From f7121677f36194ea4f76a841bebbc0b8fdc7092e Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Sat, 14 Feb 2026 18:40:57 -0800 Subject: [PATCH] chore (tui): add stream assembler regression for tool boundary drops --- src/tui/tui-stream-assembler.test.ts | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/tui/tui-stream-assembler.test.ts b/src/tui/tui-stream-assembler.test.ts index ed3aab34788..8bb22967e94 100644 --- a/src/tui/tui-stream-assembler.test.ts +++ b/src/tui/tui-stream-assembler.test.ts @@ -120,6 +120,37 @@ describe("TuiStreamAssembler", () => { expect(finalText).toBe("Before tool call\nAfter tool call"); }); + it("does not regress streamed text when a delta drops boundary blocks after tool calls", () => { + const assembler = new TuiStreamAssembler(); + const first = assembler.ingestDelta( + "run-5-stream", + { + role: "assistant", + content: [ + { type: "text", text: "Before tool call" }, + { type: "tool_use", name: "search" }, + { type: "text", text: "After tool call" }, + ], + }, + false, + ); + expect(first).toBe("Before tool call\nAfter tool call"); + + const second = assembler.ingestDelta( + "run-5-stream", + { + role: "assistant", + content: [ + { type: "tool_use", name: "search" }, + { type: "text", text: "After tool call" }, + ], + }, + false, + ); + + expect(second).toBeNull(); + }); + it("keeps non-empty final text for plain text prefix/suffix updates", () => { const assembler = new TuiStreamAssembler(); assembler.ingestDelta(