import { describe, expect, test } from "vitest"; import { clearAgentRunContext, emitAgentEvent, getAgentRunContext, onAgentEvent, registerAgentRunContext, resetAgentRunContextForTest, } from "./agent-events.js"; describe("agent-events sequencing", () => { test("stores and clears run context", async () => { resetAgentRunContextForTest(); registerAgentRunContext("run-1", { sessionKey: "main" }); expect(getAgentRunContext("run-1")?.sessionKey).toBe("main"); clearAgentRunContext("run-1"); expect(getAgentRunContext("run-1")).toBeUndefined(); }); test("maintains monotonic seq per runId", async () => { const seen: Record = {}; const stop = onAgentEvent((evt) => { const list = seen[evt.runId] ?? []; seen[evt.runId] = list; list.push(evt.seq); }); emitAgentEvent({ runId: "run-1", stream: "lifecycle", data: {} }); emitAgentEvent({ runId: "run-1", stream: "lifecycle", data: {} }); emitAgentEvent({ runId: "run-2", stream: "lifecycle", data: {} }); emitAgentEvent({ runId: "run-1", stream: "lifecycle", data: {} }); stop(); expect(seen["run-1"]).toEqual([1, 2, 3]); expect(seen["run-2"]).toEqual([1]); }); test("preserves compaction ordering on the event bus", async () => { const phases: Array = []; const stop = onAgentEvent((evt) => { if (evt.runId !== "run-1") return; if (evt.stream !== "compaction") return; if (typeof evt.data?.phase === "string") phases.push(evt.data.phase); }); emitAgentEvent({ runId: "run-1", stream: "compaction", data: { phase: "start" } }); emitAgentEvent({ runId: "run-1", stream: "compaction", data: { phase: "end", willRetry: false }, }); stop(); expect(phases).toEqual(["start", "end"]); }); });