Skip to content

feat(chat): Bash 工具卡实时显示命令输出 - #1122

Merged
xiaozhou26 merged 3 commits into
mainfrom
feat/issue975-live-command-output
Nov 2, 2026
Merged

xiaozhou26 merged 3 commits into
mainfrom
feat/issue975-live-command-output

Conversation

@xiaozhou26

Copy link
Copy Markdown
Contributor

Closes #975

功能

命令运行中,Bash 工具卡实时显示输出尾部(如编译进度),结果到达后由最终输出取代。

实现

后端部分在 K-brain:Stack-Cairn/K-brain#77(已合并,随 K-brain v0.107.7 发布)。桌面端 Bash 运行中推送 tool.status{tool_call_id,status:"running",message} 输出快照,每个调用最多 500ms 一次、单次最多 4 KiB,协议不变。

LiveAgent:

  • lib/kbrain/turn.ts:带 tool_call_id 的 tool.status 走新的 onToolOutput,不再覆盖整轮状态;未知调用或已有结果的调用忽略。
  • 运行时把它写入工具卡的 liveOutput(runKBrainConversationTurn.ts)。结果到达即丢弃,不写入历史、持久化消息或 WebUI relay。
  • ShellToolDisplay 渲染实时输出(liveShellOutput.ts):去 ANSI 颜色;\r 进度重绘只保留最新一帧;上限 200 行 / 8000 字符;自动跟随底部,用户上翻时不抢滚动。
  • ToolCallItem:有输出时自动展开,成功结束后收起,失败保持展开;用户手动开合后不再干预。
  • scripts/release/kbrain.lock.json 锁定 K-brain v0.107.7(hash 来自 release 的 SHA256SUMS,8 个下载地址均返回 200)。

已知限制:被折叠的工具组里卡片会展开但组不会;Gateway WebUI 暂未显示;yield_time_ms 后台命令不推送。旧版 K-brain 不发这类事件,行为与原来一致。

验证

  • 新增 test/chat/kbrain-live-tool-output.test.mjs,以及 tool-argument-display.test.mjs 的两个渲染用例,共 22/22 通过。
  • UI / GUI / WebUI typecheck、biome、UI boundary、diff hygiene 通过。
  • pnpm test:gui 中启动真实 K-brain 的 6 个测试文件:用该分支构建的 K-brain 跑,30/30 通过。
  • K-brain 侧:go test(backend/agent/tools/protocol)、go vet、-race 通过。

Screenshots / preview

在浏览器中渲染真实的 ToolCallItem(运行中的 cargo build --release,输出含 ANSI 颜色和 \r 进度条):

修复前后对比

编译等长命令运行时,工具卡此前只显示"运行中",看不到进度。K-brain 以
tool.status{tool_call_id,status:"running",message} 推送输出尾部快照(有上限、
已节流),桌面端接入:

- turn.ts:带 tool_call_id 的 running 状态交给新的 onToolOutput 回调,不再当作
  整轮状态文字覆盖运行进度;未知调用或已出结果的调用的快照忽略
- 实时轮次:ToolTraceItem 新增 liveOutput,setToolLiveOutputInRound 整体替换
  快照;结果到达时丢弃,不进历史、持久化消息或 WebUI 转发
- ShellToolDisplay:无结果时显示实时输出,去掉终端控制序列、按 \r 只保留进度条
  最后一次重绘,最多 200 行 / 8000 字符;贴底自动滚动,用户上翻时不抢位置
- ToolCallItem:收到输出时自动展开,成功结束后自动收起,失败保持展开;用户
  手动开合后不再干预;memo 比较包含 liveOutput
@xiaozhou26
xiaozhou26 merged commit 643f581 into main Nov 2, 2026
14 checks passed
@xiaozhou26
xiaozhou26 deleted the feat/issue975-live-command-output branch November 2, 2026 06:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]

1 participant