From 53b213571f46e67cca3997dd6c98520e86321c15 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 1 Jul 2026 10:38:11 -0400 Subject: [PATCH] fix(tui): hide synthetic session context rows --- packages/tui/src/routes/session/rows.ts | 2 +- .../tui/test/cli/tui/session-rows.test.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/tui/src/routes/session/rows.ts b/packages/tui/src/routes/session/rows.ts index 3a15d6bc14..9fddd669d7 100644 --- a/packages/tui/src/routes/session/rows.ts +++ b/packages/tui/src/routes/session/rows.ts @@ -118,7 +118,6 @@ export function createSessionRows(sessionID: Accessor) { const subscriptions = [ data.on("session.next.prompted", message), data.on("session.next.context.updated", message), - data.on("session.next.synthetic", message), data.on("session.next.shell.started", message), data.on("session.next.agent.switched", message), data.on("session.next.model.switched", message), @@ -158,6 +157,7 @@ export function createSessionRows(sessionID: Accessor) { export function reduceSessionRows(messages: SessionMessage[]) { return messages.reduce((rows, message) => { + if (message.type === "synthetic") return rows if (message.type !== "assistant") { completePrevious(rows) rows.push({ type: "message", messageID: message.id }) diff --git a/packages/tui/test/cli/tui/session-rows.test.ts b/packages/tui/test/cli/tui/session-rows.test.ts index d6a804625f..9af8a38a84 100644 --- a/packages/tui/test/cli/tui/session-rows.test.ts +++ b/packages/tui/test/cli/tui/session-rows.test.ts @@ -62,6 +62,25 @@ test("keeps non-exploration tools as individual part rows", () => { ]) }) +test("skips synthetic context messages", () => { + const messages: SessionMessage[] = [ + { type: "user", id: "user-1", text: "Run background shell", time: { created: 0 } }, + assistant("assistant-1", [{ type: "tool", id: "shell-1", name: "shell", state: pending(), time: { created: 1 } }]), + { + type: "synthetic", + id: "synthetic-1", + sessionID: "ses_1", + text: "Shell command completed.\n\nOutput:\nok", + time: { created: 2 }, + }, + ] + + expect(reduceSessionRows(messages)).toEqual([ + { type: "message", messageID: "user-1" }, + { type: "part", ref: { messageID: "assistant-1", partID: "shell-1" } }, + ]) +}) + test("groups across empty assistant reasoning parts", () => { const messages: SessionMessage[] = [ assistant("assistant-1", [