Minecraftbe/dsh-toolfold
Codex 风格的工具调用折叠 / Codex-style folding for DSH Web GUI
Listed
3
Ui
Bundle verified
Preview
What it does
Codex-style tool call folding, collapsing multiple tool calls into a single line.
Best for
- DSH Web GUI users whose conversations contain long runs of adjacent tool calls.
- Users who want a compact last-call summary while retaining click or keyboard access to the full tool-call sequence.
- Workflows that benefit from independently folding tool-call groups separated by completed reasoning.
Not ideal for
- Sessions with few tool calls, where folding provides little reduction in visual clutter.
- Users who need completed reasoning always visible without enabling the keep-reasoning setting; it is hidden by default.
- Browsers without MutationObserver and requestAnimationFrame support; behavior falls back to a one-time initial fold.
- Environments where DSH rendering markers change, since folding may stop working when those DOM markers are no longer stable.
README
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,以及被零开销短路忽略的流式批次),用于验证插件开销 |
交互方式:点击折叠条展开/收起;键盘 Enter 或 Space 同样有效。
设置存到哪里
-
已安装(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(此时换浏览器/设备需重新设置); - 需要浏览器支持
MutationObserver与requestAnimationFrame;不支持时退化为「初始渲染折叠一次」。
本项目完全由 dsh + deepseek v4 flash(max) 完成。
Frequently Asked QuestionsFAQ
Use the verified command dsh plugin --profile default add github:Minecraftbe/dsh-toolfold in a DSH-enabled shell. The command resolves the public package metadata and keeps the plugin attached to the catalog identity shown on this page.
Compatibility follows the bundle and profile status shown above. If a profile is not detected, keep the plugin disabled there and check the repository documentation before enabling it in production.
The GitHub link and activity metadata are the source of truth for releases and maintenance. Revisit this page after a new release to confirm the catalog has observed the latest version.