前言¶
DeepSeek Harness (DSH) 是面向智能体开发的工具链。在处理长轮次对话时,模型会生成大量的工具调用和推理过程,这容易导致界面内容过多、难以浏览。本插件借鉴 Grok Build 的设计思路,将每轮对话中的 think(推理)和工具调用包裹在一个有限高度的可滚动窗口中,以阶段性文字回复为界分段,避免页面内容撑爆,同时保持所有中间过程的可见性。
核心功能¶
插件将每轮对话的中间过程(think 与工具调用)聚合展示,文字回复保持原生显示。
- 有限高度窗口:think 和工具调用合并为一个 slide,默认高度为 10 行,内部支持滚动。
- 分段逻辑:以阶段性文字回复为界分段。两个文字回复之间的一段 think + bash 作为一个 slide,避免两个 input prompt 之间挤成一整个 slide。
- 内容同步:原生 Think 行从消息流中隐藏,与 slide 内展示共用同一份内容。
- 原生回复保持:文字回复完全原生展示,保持全文可见,不套 slide 窗口,不加“展开全部/收起”按钮。
- 配置化控制:支持在 Settings 中调整窗口高度和默认收起状态。
安装¶
通过官方命令安装插件:
dsh plugin --profile web add github:heiheiha798/dsh-plugin-response-window
安装后重启 dsh web 或等待 profile HMR 生效。卸载命令为:
dsh plugin --profile web remove dsh-plugin-response-window
配置¶
插件在 cordis.patch.yml 中注册了默认配置,可通过配置文件或 Web UI 调整:
配置项说明¶
| 键 | 默认值 | 说明 |
|---|---|---|
lines |
10 |
窗口高度(行)。0 表示不限高(即关闭窗口)。 |
collapsed |
false |
每轮 slide 是否默认收起成一行 bar。 |
showReadOnly |
true |
是否在 slide 里列出 read/grep/web_search 等只读调用。 |
minCollapseRows |
3 |
仅在 collapsed: true 时生效,少于该数量的轮次不收起。 |
设置页调整¶
在 Web UI 的 Settings → General 中,插件注册了一项 「响应窗口大小(行数)」:
* 支持 − / 数值输入 / + 调整 lines(范围 0–200)。
* 改动后即时生效,并持久化到 dsh-plugin-response-window namespace。
技术实现¶
插件在实现上注重对宿主 React 结构的零侵入和安全性。
- 渲染方式:使用
conversation.chat.node的 keyed 替换(key: 'tool-call')实现,而非旧的 priority shadow。这符合 dsh 0.1.5-rc keyed Chat Node 契约。 - 数据来源:分组逻辑完全基于会话模型,通过
useChat选择器消费与右侧用户消息索引(turn rail)一致的 turn/location 数据,不依赖 DOM 测量。 - DOM 标记:通过模型推导的覆盖集合驱动 DOM 标记(隐藏的原生 Think 行、null 渲染的 sibling 工具行),使用 MutationObserver 将集合应用到行上的 data 属性,消除布局竞态导致的整类 bug。
- React 结构保护:绝不移走 React 拥有的
[data-chat-anchor-key]行节点。若移走该节点,React 在会话切换或编辑时会抛出NotFoundError。插件仅使用 keyed 替换和类/CSS 方式。 - 依赖更新:
createSnapshotStore依赖的dsh-client-runtime包已于 2026-08-22 从 dsh 移除,插件改用内置的最小可观察值存储。
开发与测试¶
插件采用纯 JavaScript 编写,无构建步骤。
- 类型检查:
npm run check
- E2E 测试:需要已启动的
dsh web与 python playwright:
dsh --profile web --no-open --port 3639 &
python3 test/e2e.py --url http://127.0.0.1:3639 --session "架构重构不顺原因分析"
结尾¶
该插件不隐藏任何内容,think 与工具调用按真实输出顺序交错排列在 slide 中,适合需要完整追踪中间推理和工具执行过程的场景。所有内容均遵循 MIT 许可证。