前言¶
DeepSeek Harness(DSH)的 Web 客户端在流式输出时会渲染「思考块」,默认折叠,需要手动展开才能看到思考过程。手动切换会打断阅读节奏,尤其在思考时间较长或多次出现思考块时,体验较分散。dsh-auto-think 插件在模型输出思考时自动展开思考块,思考结束后自动折叠,并配合高度与透明度的过渡动画,让切换过程平滑自然。
插件简介¶
- 名称:dsh-auto-think
- 维护者:yezitotempeace
- 分类:客户端
- 仓库:https://github.com/yezitotempeace/dsh-auto-think
- 定位:针对 DSH Web 客户端思考块的自动展开/折叠,配合侧边栏开关控制自动化行为
- 版本:0.1.2
- 许可证:MIT
核心功能¶
自动展开与折叠¶
- 思考块开始流式输出(
data-state="running")且处于折叠状态时,自动展开(每个块只展开一次)。 - 思考结束(
data-state="ok")后约 350ms,自动折叠。 - 手动展开或折叠的块,在结束后保持当前状态,不会被动折叠。
- 历史里已结束的块不受影响,不会再次自动展开。
- 开关关闭后不再自动展开/折叠,但手动操作仍保持动画效果。
动画效果¶
- 展开动画:高度从 0 过渡到实测高度,透明度从 0 过渡到 1,用时约 200ms。
- 折叠动画:高度从实测高度过渡到 0,透明度从 1 过渡到 0,用时约 180ms。
- 动画曲线:
cubic-bezier(0.2, 0.8, 0.2, 1)。 - 即使开关关闭或手动操作,动画仍然存在,避免「嗖」地闪一下。
侧边栏开关¶
- 开关注册在
sidebar.footer.action(设置按钮上方一行),36×36 图标按钮。 - 右下角小圆点:亮色表示开启,灰色表示关闭。
- 悬停提示:「自动展开思考:开(思考时展开,结束后折叠)」或「自动展开思考:关」。
- 点击即切换,无需刷新页面。
- 开关状态保存在浏览器的
localStorage的dsh-auto-think/enabled键中,默认开启。
安装与启用¶
安装依赖¶
使用 DSH 的 plugin 命令安装依赖:
dsh plugin --profile web add github:yezitotempeace/dsh-auto-think
启用插件¶
将 dsh-auto-think 加进 profile 的 package.json 的 dsh.profile.bundles 字段,然后重启 Web 客户端。本机开发可通过 link 方式:
- 仓库放到
/root/dsh-auto-think; dependencies中写入"dsh-auto-think": "link:/root/dsh-auto-think";dsh.profile.bundles中添加dsh-auto-think;- 在
node_modules下创建指向该仓库的软链接; - 重启 Web 客户端。
停用 / 卸载¶
- 从
dsh.profile.bundles中删除dsh-auto-think(或在 profile 的cordis.patch.yml中设置disabled: true)。 - 重启 Web 客户端。
关闭开关仅停止自动展开/折叠,插件本身仍加载,动画功能不受影响。
技术实现要点¶
- 找到思考块:使用
document.querySelectorAll('[data-variant="think"]'),对应 chat 插件的ReasoningRow根节点。 - 状态判断:通过
data-state属性判断running/ok;通过内部[data-disclosure-row]的aria-expanded判断展开状态。 - 触发切换:对对应行调用
click(),与用户点击走同一条 ReactonClick。 - 监听变化:使用
MutationObserver监听data-state、data-expanded、data-open、aria-expanded属性变化,每帧合并一次扫描。 - 防抢操作:使用模块级
WeakMap记录每个块的「是否由插件展开」和「是否已折叠」。 - 开关状态:使用模块级 store +
useSyncExternalStore,写入localStorage。
插件不读取会话内容,不发送网络请求,仅依赖 react、react/jsx-runtime 和 primitives 的思考图标。
适用场景与注意事项¶
- 适合需要持续查看思考过程的开发者、研究者与 AI 交互场景。
- 插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。
- 开关关闭后可手动展开/折叠,动画效果依然存在,可按需调整。
小结¶
dsh-auto-think 通过自动展开/折叠思考块,配合平滑的过渡动画,减少手动操作,让思考过程的展示更连贯。侧边栏开关提供了灵活的控制,同时不影响手动操作的动画体验。
- 插件目录页:https://www.skillhub.cn/plugins/yezitotempeace/dsh-auto-think
- GitHub 仓库:https://github.com/yezitotempeace/dsh-auto-think