dsh-plugin-response-window:DeepSeek Harness (DSH) Web 插件

前言

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 许可证。

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

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

小夜