Minecraftbe/dsh-toolfold 预览 preview

Minecraftbe/dsh-toolfold

Codex风格的工具调用折叠 / Codex 风格的 DSH Web GUI 折叠

项目介绍Project Overview

dsh-toolfold 是一款 DSH Web 界面插件,把相邻的连续工具调用折叠为单条摘要栏,点击或按 Enter/Space 即可展开或收起,并按设置决定是否保留已完成思考、是否让思考分隔调用组。展开采用瀑布动画,自动跟随系统减少动态效果;折叠条贴底不被聊天滚动顶出。适用于长会话中工具调用密集、界面冗长时。卸载后界面完全还原,折叠依赖产品稳定标记,标记变动时折叠可能停止生效。

dsh-toolfold is a DSH web-UI plugin that collapses consecutive tool calls into a single summary bar, expandable by click or Enter/Space. Settings control expand animation duration, whether to keep completed thinking, and whether thinking separates call groups. Expansion uses a waterfall animation that respects reduced-motion preferences, and the bar stays pinned when near the bottom. Use it when long sessions make dense tool-call output hard to scan. It depends on product markers; if those change, collapsing may stop without breaking the chat.

或使用命令行安装(适合开发者)Or use CLI install (for developers)

命令行安装CLI Install

dsh plugin --profile web add github:Minecraftbe/dsh-toolfold

Minecraftbe/dsh-toolfold 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-toolfold · 工具调用折叠

DSH Web GUI 插件,提供类 Codex 的工具折叠体验:把连续的工具调用折叠成一条简洁的 折叠条,只展示最后一个调用的一行摘要,点击即可展开/收起。 不替换任何内置渲染器,卸载后界面完全恢复原样。

折叠效果演示

特性一览

  • 连续工具调用折叠为一条:相邻的工具调用整段收起,条内直接显示最后一个调用的一行 摘要,并标注「已折叠 N 个工具调用 · 点击展开」;
  • 思考分隔调用组(默认开启):已完成的思考会把前后两组工具调用隔开、各自独立折叠, 不会把思考前后的调用合并成一条;关闭后恢复原折叠方式——思考并入所在工具组一起折叠;
  • 思考默认隐藏,可保留:已完成的思考默认隐藏(不占版面);开启「保留思考」后思考不再 消失——分隔模式下显示在两条折叠条之间,合并模式下展开时按原顺序插回调用之间
  • 进行中的思考独立显示:流式思考保持原样可见,完成后按「思考分隔」设置处理;
  • 弹性瀑布动画:展开时卡片自上而下逐张落下(spring 回弹),收起时逐张上行且行高度同步收缩, 下方内容连续上移、结尾无跳变;系统开启「减少动态效果」时动画自动关闭;
  • 贴底不顶出:靠近底部展开时,折叠条视口位置被钉住,不会因聊天自动滚动被顶出屏幕;
  • 接近零性能占用:无页面级观察器、流式期间引擎零工作、标签页隐藏时全部暂停—— 实机测量空闲开销约 0.03% 单核(详见性能)。

展开/收起动画

安装

GitHub 一行安装

dsh plugin --profile web add github:Minecraftbe/dsh-toolfold

从源码安装

git clone https://github.com/Minecraftbe/dsh-toolfold.git
dsh plugin --profile web add ./dsh-toolfold

装完重启 dsh 并刷新浏览器即可生效(bundle 层在启动时合成)。可用以下命令确认已进入 最终配置:

dsh --profile web --dump-config

早期版本若曾在 cordis.patch.yml 手工加过 toolfold 行,先删除该行再切换,避免双挂载。

卸载

dsh plugin --profile web remove dsh-toolfold

重启后界面完全恢复原样。

使用与设置

设置入口:设置 → 插件 → 工具折叠(卡片外观与内置插件卡片一致,跟随深浅主题)。

设置卡片

设置项 说明
展开动画时长 展开/收起瀑布动画的单卡时长,0–1000ms,默认 240ms;0 为瞬时切换
保留思考 已完成的思考默认隐藏;开启后思考保留——分隔模式下显示在两条折叠条之间,合并模式下展开时按原顺序插回调用之间
思考分隔调用组 开启(默认):已完成的思考把前后两组工具调用隔开、各自独立折叠;关闭:思考并入所在工具组一起折叠(旧行为)
性能统计 在卡片内实时显示插件自身耗时(观察回调/引擎刷新/合并重算/安全重扫/摘要克隆的累计次数与 ms/s,以及被零开销短路忽略的流式批次),用于验证插件开销

交互方式:点击折叠条展开/收起;键盘 EnterSpace 同样有效。

设置存到哪里

  • 已安装(bundle)模式:设置由 DSH 设置服务持久化到 ~/.dsh/settings.yaml(命名空间 toolfold),与产品和其他插件的设置在同一个文档里, 随 dsh 主机走,换浏览器/设备不丢失;卡片底部会显示「设置保存在 DSH 主机配置」。 也可以直接手工编辑该文件:

    toolfold:
      durMs: 240        # 展开动画时长 0–2000ms
      keepThink: false  # 是否保留已完成的思考(显示在折叠条之间 / 展开时插回)
      splitThink: true  # 是否让已完成的思考隔开前后两组工具调用(默认 true)
      stats: false      # 是否开启性能统计
    
  • 未检测到 DSH 设置服务时(远程浏览器等未接入 DSH 设置服务的场景):降级为浏览器 localStorage(键 dsh-toolfold.settings.v1),卡片会显示「仅保存在本浏览器」; 旧版键 dsh-codex-collapse.settings.v1 首次加载自动迁移。

保留思考对比

性能

  • 实测(真实 GUI 页面,空闲窗口 8s):引擎总耗时约 1.6–2.8ms(≈0.3ms/s,约 0.03% 单核); 同窗口 5s CPU 采样中引擎函数零样本,页面长任务(141–686ms)来自页面加载与产品/其他插件渲染;
  • 流式零工作:思考/文本 token 流式变更被 O(1) 短路直接忽略,不触发任何重算(约 0.1–0.4µs/节点);
  • 标签页隐藏 = 字面零占用:隐藏时断开全部观察器与定时器,回到可见时重挂并补一次对账;
  • 打开「性能统计」即可在设置卡片内实时查看插件自身的每一项耗时。

说明与限制

  • 折叠基于渲染后的 DOM,依赖产品稳定标记;若产品标记变动,最坏情况是折叠停止生效,不会破坏聊天;
  • 进行中的思考AI 文字输出会隔开工具调用;已完成的思考默认也会隔开(「思考分隔 调用组」开启时),关闭该选项后已完成的思考并入所在工具组一起折叠;
  • 展开状态按会话流 + 节点 key 记忆;会话重开且 key 相同时会恢复展开状态;
  • 设置以 DSH 主机配置(~/.dsh/settings.yaml)为准;仅当主机桥不可达时才退化为浏览器 localStorage(此时换浏览器/设备需重新设置);
  • 需要浏览器支持 MutationObserverrequestAnimationFrame;不支持时退化为「初始渲染折叠一次」。

本项目完全由 dsh + deepseek v4 flash(max) 完成。

上一个 Prev dsh-prompt-manager 下一个 Next dsh-worktime-board