问题场景
在 TUI 对话记录中,tool-call 的输入参数和完整输出被原样渲染在 assistant 回复之前。当工具调用频繁或输出较长时(例如 Bash 执行了一段脚本、读取了大段文件内容),整个 transcript 会被工具输出占满,用户需要滚动很久才能看到 assistant 真正的回复。
这导致两个问题:
- 视觉噪音大:用户通常只关心工具是否成功执行以及关键结果,不关心完整的内部参数或原始输出。
- 信息密度低:assistant 的核心回复被淹没在大量工具输出中。
当前行为
当前 TUI 会把 tool-call 的完整输入/输出作为普通 transcript entry 直接展开显示,和 assistant 回复混在一起。如下图所示:
从图中可以看到,用户问题之后是一大段 Bash 脚本的工具输出,然后才是 assistant 的 Markdown 回复。
期望行为
默认情况下,tool-call 的输入和输出应该被折叠/截断展示,只保留关键信息:
- 显示工具名称和一行摘要,例如
Used Bash (wsl -e bash -c '...')
- 输入参数和输出结果默认只展示前几行,超出部分用灰色提示
... (N more lines, ctrl-o to expand)
- 用户可以通过快捷键(如
ctrl-o 或点击)展开查看完整内容
- 折叠后的工具条目使用低对比度颜色(灰色),减少视觉干扰
参考实现效果:
已经考虑过的替代方案
- 完全隐藏 tool-call 结果:只告诉用户“执行成功/失败”。这种方式最简洁,但会丢失可调试性,当工具执行结果不符合预期时用户无法查看细节。
- 把 tool-call 结果放到单独的侧面板或日志文件:保持 transcript 干净,但需要额外的 UI 复杂度和交互学习成本。
- 默认折叠 + 可展开:在简洁性和可调试性之间取得平衡,也是大多数现代 AI IDE/CLI(如 Claude Code、Cursor)采用的方案。
推荐方案 3。
相关代码
src/tui/app.tsx — buildTranscriptItems 和 TranscriptEntry 渲染逻辑
packages/core/src/tools/presentation.ts — tool 结果展示相关格式化
skills/builtin/src/command-output.ts / command-tool.ts — 命令行工具的输出处理
相关 issue / PR
问题场景
在 TUI 对话记录中,tool-call 的输入参数和完整输出被原样渲染在 assistant 回复之前。当工具调用频繁或输出较长时(例如
Bash执行了一段脚本、读取了大段文件内容),整个 transcript 会被工具输出占满,用户需要滚动很久才能看到 assistant 真正的回复。这导致两个问题:
当前行为
当前 TUI 会把 tool-call 的完整输入/输出作为普通 transcript entry 直接展开显示,和 assistant 回复混在一起。如下图所示:
从图中可以看到,用户问题之后是一大段 Bash 脚本的工具输出,然后才是 assistant 的 Markdown 回复。
期望行为
默认情况下,tool-call 的输入和输出应该被折叠/截断展示,只保留关键信息:
Used Bash (wsl -e bash -c '...')... (N more lines, ctrl-o to expand)ctrl-o或点击)展开查看完整内容参考实现效果:
已经考虑过的替代方案
推荐方案 3。
相关代码
src/tui/app.tsx—buildTranscriptItems和TranscriptEntry渲染逻辑packages/core/src/tools/presentation.ts— tool 结果展示相关格式化skills/builtin/src/command-output.ts/command-tool.ts— 命令行工具的输出处理相关 issue / PR
hidden/ 折叠机制