From 373bd1282e17ed9d3a341e4ebed1f7b354805e44 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Sat, 23 May 2026 11:40:54 +0200 Subject: [PATCH] Collapse read output by default closes #4916 --- packages/coding-agent/CHANGELOG.md | 1 + packages/coding-agent/src/core/tools/read.ts | 4 +-- .../test/tool-execution-component.test.ts | 27 +++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 806bfb5c..6c01b8c1 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -9,6 +9,7 @@ ### Changed +- Changed collapsed read tool cards to show only the read line until expanded ([#4916](https://github.com/earendil-works/pi/issues/4916)). - Changed the root development install documentation to use `npm install --ignore-scripts` ([#4868](https://github.com/earendil-works/pi/issues/4868)). ### Fixed diff --git a/packages/coding-agent/src/core/tools/read.ts b/packages/coding-agent/src/core/tools/read.ts index f8d12d11..8f39b1ea 100644 --- a/packages/coding-agent/src/core/tools/read.ts +++ b/packages/coding-agent/src/core/tools/read.ts @@ -170,10 +170,10 @@ function formatReadResult( options: ToolRenderResultOptions, theme: Theme, showImages: boolean, - cwd: string, + _cwd: string, isError: boolean, ): string { - if (!options.expanded && !isError && getCompactReadClassification(args, cwd)) { + if (!options.expanded && !isError) { return ""; } diff --git a/packages/coding-agent/test/tool-execution-component.test.ts b/packages/coding-agent/test/tool-execution-component.test.ts index 9a3d1639..7a4a813d 100644 --- a/packages/coding-agent/test/tool-execution-component.test.ts +++ b/packages/coding-agent/test/tool-execution-component.test.ts @@ -191,6 +191,7 @@ describe("ToolExecutionComponent parity", () => { process.cwd(), ); component.updateResult({ content: [{ type: "text", text: "hello" }], details: undefined, isError: false }, false); + component.setExpanded(true); const rendered = stripAnsi(component.render(120).join("\n")); expect(rendered).toContain("override call"); expect(rendered).toContain("hello"); @@ -362,12 +363,38 @@ describe("ToolExecutionComponent parity", () => { { content: [{ type: "text", text: "one\ntwo\n" }], details: undefined, isError: false }, false, ); + component.setExpanded(true); const rendered = stripAnsi(component.render(120).join("\n")); expect(rendered).toContain("one"); expect(rendered).toContain("two"); expect(rendered).not.toContain("two\n\n"); }); + test("collapses ordinary read results until expanded", () => { + const component = new ToolExecutionComponent( + "read", + "tool-ordinary-read-collapsed", + { path: "notes.txt" }, + {}, + createReadToolDefinition(process.cwd()), + createFakeTui(), + process.cwd(), + ); + component.updateResult( + { content: [{ type: "text", text: "hidden content" }], details: undefined, isError: false }, + false, + ); + + const collapsed = stripAnsi(component.render(120).join("\n")); + expect(collapsed).toContain("read"); + expect(collapsed).toContain("notes.txt"); + expect(collapsed).not.toContain("hidden content"); + + component.setExpanded(true); + const expanded = stripAnsi(component.render(120).join("\n")); + expect(expanded).toContain("hidden content"); + }); + for (const scenario of [ { title: "SKILL.md",