Skip to content

feat(chat): 工具组在命令运行期间自动展开,执行结束后自动收起 - #454

Open
pia wants to merge 1 commit into
xintaofei:mainfrom
pia:fix/tool-group-auto-expand
Open

feat(chat): 工具组在命令运行期间自动展开,执行结束后自动收起#454
pia wants to merge 1 commit into
xintaofei:mainfrom
pia:fix/tool-group-auto-expand

Conversation

@pia

@pia pia commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

概述

本 PR 调整助手消息中工具组的默认展示方式:

  • Agent 开始运行命令后,对应的工具组自动展开,用户可以直接看到
    正在执行哪些操作。
  • 组内全部命令执行完成后,工具组延迟 1 秒自动收起,最终对话记录
    依然保持紧凑。
  • 历史消息中的工具组仍然默认折叠,不受影响。
  • 组内命令卡片继续默认折叠,用户需要查看命令详情时再点击展开。

动机

目前工具组默认始终是折叠的。Agent 在执行命令的过程中,界面上只能
看到一个折叠的汇总 chip,用户无法直接了解当前正在运行什么、已经
运行了多少命令,必须手动展开工具组才能看到内容。

对于较长的任务,Agent 可能会连续运行多个命令,工具组甚至会反复
创建和切换。一直保持折叠会让执行过程变成黑盒,降低用户对 Agent
工作进度的感知。

本次改动的目标是:

  • 在执行期间自动显示当前活动,让用户一眼看到进度;
  • 执行结束后自动收起,避免历史会话中留下大量展开的临时信息;
  • 不改变用户已有的「命令细节按需查看」的使用习惯。

行为变化

场景 修改前 修改后
工具组内有命令正在运行 默认折叠,用户看不到执行内容 自动展开
工具组内所有命令执行完成 保持用户之前手动设置的状态 若是自动展开,则延迟 1 秒收起
历史消息中的工具组 默认折叠 默认折叠,不变
组内命令卡片 默认折叠,点击查看详情 默认折叠,点击查看详情
思考块 流式时展开,结束后 1 秒收起 不变

实现说明

  • ToolGroupPart 增加受控状态机,区分用户手动状态和自动状态:
    • manualOpen 记录用户主动展开或收起;
    • autoOpen 跟随工具组的运行状态;
    • 手动操作始终优先。
  • 工具组存在未完成命令时自动展开;全部完成后通过 1000ms 定时器
    自动收起。
  • 延迟收起期间如果命令重新开始运行,取消本次收起。
  • 增加交互保护:
    • 运行中的自动展开工具组,第一次点击 chip 可以「钉住」它,
      第二次点击才关闭;
    • 用户正在查看某条命令卡片时,外层不会自动收起;
    • 焦点仍在工具组内时,不会自动收起,避免内容卸载造成焦点丢失。
  • 抽取 AUTO_CLOSE_DELAY_MS = 1000,由思考块与工具组共用,
    保持自动收起节奏一致。
  • 组内命令卡片继续由手动操作控制展开,点开后仍可看到实时终端输出。

边界情况

  • 历史消息中的工具组保持默认折叠。
  • 页面刷新或组件重挂载后,恢复到该状态应有的默认值。
  • 用户手动展开或收起后,不再被自动逻辑覆盖。
  • 命令执行期间工具组会保持展开,不会因为单条命令完成而提前收起。
  • 编辑、读取、搜索等非命令工具卡片的行为不变。

测试

新增 src/components/message/tool-group-interaction.test.tsx,覆盖以下场景:

  • 工具组运行时自动展开;
  • 所有命令结束后延迟 1 秒自动收起;
  • 延迟窗口内恢复运行会取消收起;
  • 自动展开/收起不会污染用户手动状态;
  • 手动钉住与关闭;
  • 用户查看子卡片时外层不自动收起;
  • 焦点在工具组内时不自动收起;
  • 命令卡片保持默认折叠;
  • read / edit 卡片行为回归。

验证结果:

  • pnpm test
  • pnpm eslint <changed files>
  • pnpm exec tsc --noEmit
  • 已通过独立数据目录的本地桌面实例进行人工预览

文件变更

  • src/components/message/content-parts-renderer.tsx
  • src/components/ai-elements/reasoning.tsx
  • src/lib/auto-collapse-timing.ts(新增)
  • src/components/message/tool-group-interaction.test.tsx(新增)

影响范围

仅前端消息渲染与交互逻辑,不涉及 Rust 后端、数据库结构、i18n
文案或事件协议。

关联 Issue

无。

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.

1 participant