diff --git a/packages/coding-agent/test/agent-session-persisted-keys-cache.test.ts b/packages/coding-agent/test/agent-session-persisted-keys-cache.test.ts index 26c39b53b..693b2ec77 100644 --- a/packages/coding-agent/test/agent-session-persisted-keys-cache.test.ts +++ b/packages/coding-agent/test/agent-session-persisted-keys-cache.test.ts @@ -1,4 +1,4 @@ -import { afterEach, beforeEach, describe, expect, it } from "bun:test"; +import { afterEach, beforeEach, describe, expect, it, spyOn } from "bun:test"; import * as fs from "node:fs"; import * as os from "node:os"; import * as path from "node:path"; @@ -88,6 +88,32 @@ describe("AgentSession persistence-keys cache", () => { expect(count2).toBe(1); }); + it("caches missing-key checks across a growing branch", async () => { + const getBranch = spyOn(sessionManager, "getBranch"); + + try { + for (let i = 0; i < 25; i++) { + const msg: AgentMessage = { + role: "user", + content: [{ type: "text", text: `Cache perf ${i}` }], + timestamp: 2000 + i, + }; + session.agent.emitExternalEvent({ type: "message_end", message: msg }); + await sessionManager.flush(); + for (let spin = 0; spin < 5; spin++) { + await Promise.resolve(); + } + } + + expect(getBranch).toHaveBeenCalledTimes(1); + } finally { + getBranch.mockRestore(); + } + + const entries = sessionManager.getBranch().filter(e => e.type === "message"); + expect(entries.length).toBe(25); + }); + it("reflects the NEW branch after a rewind (stale cache would wrongly skip)", async () => { // 1. Send first message (assistant) const msg1: AssistantMessage = createAssistantMessage("Msg 1");