dsh-think-fold:自动展开正在执行的过程行,轮次结束后并入官方「已完成」

前言

在 DSH 客户端里跑长任务时,对话流会不断堆出「思考」行和各种工具卡。默认情况下,正在执行的那一行未必会及时展开,过程区在轮次尚未结束时还可能无限增高,把页面往下拽。若只靠手动点每条 disclosure,或等轮次结束才依赖官方编组,阅读成本会明显偏高。

下面介绍客户端插件 dsh-think-fold(维护者 Citrusrr):它不自绘 UI,只监听官方公布的行状态,替你比人稍早一点点击官方折叠控件;跑着的一轮把过程收进限高窗口,轮次结束后把整轮过程并进官方那条「已完成 · 用时」,页面上主要留下最终回复。

这是什么

dsh-think-fold 归类为 客户端(client-side) 插件,职责很窄:盯住「当前哪一行在跑」,驱动官方自己的开合;不写自定义渲染,排版、字号、代码块与 diff 仍全部由 DSH 官方界面负责。

卸载后会收回插件撑开过的行,并还原它改过的两个官方设置(ui-chat.transcriptView 档位、ui-chat.foldedReplies)。

核心功能

逐行自动开合

覆盖两类官方行:思考行(data-variant="think")与各类 工具卡(bash、edit/write、read、搜索、网页、子代理、工作流等)。

时刻 行为
模型开始思考 展开官方「思考」行
开始调工具 思考行收起,正在执行的工具卡展开
工具执行完 工具卡收回为一行摘要
你曾手动开合过某条 记下后不再自动动(含你手动收起「正在跑」的那条)

「谁在跑」完全读官方 data-state(如 running、preparing 表示执行中),不用计时器或启发式猜测。preparing 阶段官方往往尚不可点展开,插件会等到 running 再展开。

跑着的一轮:过程限高窗口

官方在轮次未结束、过程尚未编成组时,过程体常为不限高。插件在 data-group-expanded-mode 仍存在时,给 [data-step-process-body] 加上与官方对齐思路的 max-height、overflow-y: auto,并在窗口内做跟随滚动与边缘淡出;轮次结束、该属性消失后,把滚动与淡出交还官方逻辑。

面板里「过程窗口高度」默认 400(与官方对齐),0 表示不限高。控制台可用 __dshThinkFold.windows() 查看各组状态。

一轮结束:并入官方「已完成」

当 turn.status === 'closed' 后,插件配合官方内建的整轮编组(transcriptView + TurnProcessNodeView),在合适条件下延迟点击首行,把该轮思考与命令收进 [data-turn-process] 那条「已完成 · 用时 …」;并可在需要时将 ui-chat.foldedReplies 从默认 all 调到 final,使过程旁白随过程一起收起,只留最终回复 露在外面。你亲手点开过的首行不会被再次自动合并。

安装与启用

插件上架后可在客户端 Plugins → Discover 搜索安装。

不经市场时,使用 Release 上的预构建包(链接始终指向最新一版):

dsh plugin --profile web add https://github.com/Citrusrr/dsh-think-fold/releases/latest/download/dsh-think-fold.tgz

卸载(资料中的 API 示例):

plugin_manager(remove_bundle, "dsh-think-fold")

说明: 插件在 web profile 下以客户端脚本形式运行(dsh.client.platform: web,immediately: true)。安装前建议浏览仓库源码与 MIT 许可证;插件会改写页面内联样式与少量官方 UI 设置,权限范围限于当前 DSH 客户端进程能访问的页面与 localStorage。

界面入口与典型用法

按钮与面板

入口在 输入框左侧、「+」添加按钮右侧 的圆形按钮(约 28×28)。点开为参数面板,修改后立即生效,设置保存在浏览器 localStorage 键名 dsh-think-fold。关闭方式:点面板外、Esc、或右上角关闭。

常用设置(节选)

设置项 作用
启用 总开关;关闭即恢复官方行为
完成后合并整轮 轮次结束并成「已完成 · 用时」
合并延迟 结束后等待多久再合并(默认 600ms)
过程窗口 / 过程窗口高度 跑着的一轮是否收进限高窗口;0 = 不限高
思考窗口高度 长思考压成内滚;0 = 不限高
工具卡也自动开合 是否包含命令、读写文件等工具卡
收起过渡 / 收起延迟 跑完后的收起动画与等待

本地调试可在开发者环境用 plugin_manager(install_bundle, "<你的克隆路径>/dsh-think-fold") 以 link: 方式挂载,改代码后刷新即可(见 README,正文安装仍以 Release 包为准)。

控制台自检

__dshThinkFold.rows()    // 各行 kind / state / expanded / userOwned 等
__dshThinkFold.state()   // 当前设置
__dshThinkFold.scan()    // 立刻重算

__dshThinkFold.set({
  enabled: true,
  processWindowEnabled: true,
  processWindowMax: 400,
  mergeDelayMs: 600,
  includeTools: true,
  // 其余字段见 README 与仓库源码
});

适用场景与注意

适合谁: 经常在 DSH Web 客户端里看长思考、多工具链任务的智能体开发者;希望「只看正在跑的那一块」,又不想放弃官方排版与 diff 呈现的人。

不适合或需知:

  1. 纯客户端、依赖官方 DOM 契约。 资料记载在 dsh 0.2.0-rc.2 上实测过选择器与状态语义;DSH 大版本升级后若 DOM 或 store 变化,可能需要插件跟进更新。
  2. 不替代安全审计。 插件通过 click 与样式写入驱动界面,行为应对照 GitHub 仓库 自行确认。
  3. SkillHub 目录 为社区插件索引,与 DeepSeek / 幻方无官方从属关系;星标与收录信息以各站点当时展示为准(目录线索:0 stars)。

结尾

dsh-think-fold 用「驱动官方 disclosure + 过程限高窗口 + 轮次合并」三条线,把长会话里的思考与工具执行收成可读的一屏流,而不引入第二套 Markdown 或面板。若要试用,可从 SkillHub 目录页 跳转说明,或直接用上文 Release 命令安装,细节以 GitHub README 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye