From 755e1938e321de03d3dc311226083d4e1023515a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Ruiz=20Garc=C3=ADa?= Date: Fri, 12 Jun 2026 21:37:15 +0200 Subject: [PATCH 1/2] fix: silence bootstrap lifecycle events (plugin.added, connector.updated, reference.updated) New opencode versions emit plugin.added, connector.updated and reference.updated SSE events during server bootstrap. These are informational lifecycle signals with no user-facing value and were hitting the UnknownEventRenderer fallback, producing dozens of 'unknown event type' lines per run. Drop them silently in StateTracker.ingest() alongside the existing session.updated filter. Events are still recorded in the JSONL transcript for debugging. --- tests/test_new_serve_stack.py | 8 ++++++++ tools/events/state_tracker.py | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_new_serve_stack.py b/tests/test_new_serve_stack.py index 140a8a35..c14f2b09 100644 --- a/tests/test_new_serve_stack.py +++ b/tests/test_new_serve_stack.py @@ -49,6 +49,14 @@ def tracker(self): def test_empty_ingest_returns_empty(self, tracker): assert tracker.ingest({"type": "unknown"}) == [{"type": "unknown"}] + @pytest.mark.parametrize("event_type", [ + "plugin.added", + "connector.updated", + "reference.updated", + ]) + def test_bootstrap_lifecycle_events_silently_dropped(self, tracker, event_type): + assert tracker.ingest({"type": event_type, "properties": {"id": "test"}}) == [] + def test_delta_accumulates_text(self, tracker): tracker.ingest({ "type": "message.part.delta", diff --git a/tools/events/state_tracker.py b/tools/events/state_tracker.py index c083fb97..d3a89bd8 100644 --- a/tools/events/state_tracker.py +++ b/tools/events/state_tracker.py @@ -112,7 +112,9 @@ def ingest(self, event: dict[str, Any]) -> list[dict[str, Any]]: mapped = self._map_session_diff(event) return [mapped] if mapped else [] - if event_type == "session.updated": + if event_type in ("session.updated", + "plugin.added", "connector.updated", + "reference.updated"): return [] # Pass-through events that don't need accumulation. From 48882370dfa146f60a9485618d70c6e6cd7a939b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Ruiz=20Garc=C3=ADa?= Date: Fri, 12 Jun 2026 21:42:52 +0200 Subject: [PATCH 2/2] Update tools/events/state_tracker.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Signed-off-by: Pablo Ruiz GarcĂ­a --- tools/events/state_tracker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/events/state_tracker.py b/tools/events/state_tracker.py index d3a89bd8..7eae384b 100644 --- a/tools/events/state_tracker.py +++ b/tools/events/state_tracker.py @@ -113,8 +113,8 @@ def ingest(self, event: dict[str, Any]) -> list[dict[str, Any]]: return [mapped] if mapped else [] if event_type in ("session.updated", - "plugin.added", "connector.updated", - "reference.updated"): + "plugin.added", "connector.updated", + "reference.updated"): return [] # Pass-through events that don't need accumulation.