From a9895a1e8aa513da4feecd969e9edf7cf37f8b6e Mon Sep 17 00:00:00 2001 From: Simon Klee Date: Mon, 20 Jul 2026 13:22:46 +0200 Subject: [PATCH] fix(tui/mini): idle footer when session idles (#37910) --- packages/tui/src/mini/stream-v2.transport.ts | 2 ++ .../tui/test/mini/stream-v2.transport.test.ts | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/tui/src/mini/stream-v2.transport.ts b/packages/tui/src/mini/stream-v2.transport.ts index 5e4b6bbcfdb..ae07370de9a 100644 --- a/packages/tui/src/mini/stream-v2.transport.ts +++ b/packages/tui/src/mini/stream-v2.transport.ts @@ -712,6 +712,8 @@ export async function createSessionTransport(input: StreamInput): Promise { await transport.close() }) - test("hydrates projection, reduces live output, and completes on settlement", async () => { + test("finalizes an idle projection before reducing live output", async () => { const events = feed() events.push(connected()) - const client = sdk({ streams: [events] }) + const client = sdk({ + streams: [events], + messages: { + ses_1: [ + { + id: "msg_old", + type: "assistant", + agent: "build", + model: { providerID: "test", id: "model" }, + content: [{ type: "text", text: "[Link](https://example.com)" }], + time: { created: 1 }, + }, + ], + }, + }) const ui = footer() + const idle = spyOn(ui.api, "idle") const transport = await createSessionTransport({ sdk: client, sessionID: "ses_1", @@ -429,7 +444,8 @@ describe("V2 mini transport", () => { replay: true, footer: ui.api, }) - expect(ui.commits.map((item) => item.text)).toEqual(["previous prompt"]) + expect(ui.commits.map((item) => item.text)).toEqual(["[Link](https://example.com)"]) + expect(idle).toHaveBeenCalledTimes(1) let admitted = false spyOn(client.session, "prompt").mockImplementation((request) => { @@ -476,7 +492,7 @@ describe("V2 mini transport", () => { }) await turn - expect(ui.commits.map((item) => item.text)).toEqual(["previous prompt", "answer"]) + expect(ui.commits.map((item) => item.text)).toEqual(["[Link](https://example.com)", "answer"]) expect(ui.events).toContainEqual({ type: "stream.patch", patch: { phase: "idle", status: "" } }) await transport.close() })