From 0bf930bdc7c74d0996907fda3844f667dbf4d0fe Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 13 Mar 2026 18:36:23 +0000 Subject: [PATCH] test: harden agent event bus coverage --- src/infra/agent-events.test.ts | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/infra/agent-events.test.ts b/src/infra/agent-events.test.ts index 9661ee13bfc..7f65ff5f752 100644 --- a/src/infra/agent-events.test.ts +++ b/src/infra/agent-events.test.ts @@ -83,4 +83,65 @@ describe("agent-events sequencing", () => { expect(receivedSessionKey).toBeUndefined(); }); + + test("merges later run context updates into existing runs", async () => { + resetAgentRunContextForTest(); + registerAgentRunContext("run-ctx", { + sessionKey: "session-main", + isControlUiVisible: true, + }); + registerAgentRunContext("run-ctx", { + verboseLevel: "high", + isHeartbeat: true, + }); + + expect(getAgentRunContext("run-ctx")).toEqual({ + sessionKey: "session-main", + verboseLevel: "high", + isHeartbeat: true, + isControlUiVisible: true, + }); + }); + + test("falls back to registered sessionKey when event sessionKey is blank", async () => { + resetAgentRunContextForTest(); + registerAgentRunContext("run-ctx", { sessionKey: "session-main" }); + + let receivedSessionKey: string | undefined; + const stop = onAgentEvent((evt) => { + receivedSessionKey = evt.sessionKey; + }); + emitAgentEvent({ + runId: "run-ctx", + stream: "assistant", + data: { text: "hi" }, + sessionKey: " ", + }); + stop(); + + expect(receivedSessionKey).toBe("session-main"); + }); + + test("keeps notifying later listeners when one throws", async () => { + const seen: string[] = []; + const stopBad = onAgentEvent(() => { + throw new Error("boom"); + }); + const stopGood = onAgentEvent((evt) => { + seen.push(evt.runId); + }); + + expect(() => + emitAgentEvent({ + runId: "run-safe", + stream: "assistant", + data: { text: "hi" }, + }), + ).not.toThrow(); + + stopGood(); + stopBad(); + + expect(seen).toEqual(["run-safe"]); + }); });