dsh-canvas:把 DeepSeek Harness 会话铺成可缩放地图

前言

DeepSeek Harness(DSH)里的一次对话,在界面上通常是一条从上往下滚动的消息流。流式阅读很顺手,但结构不直观:哪一句是你的意图、哪一段是模型的判断、哪一次工具调用真正改动了文件、又在哪一轮你改了主意——这些关系在一条直线上很难一眼看清。

下面介绍社区客户端插件 dsh-canvas(仓库 qiuyiwu1989-star/dsh-canvas)。它在会话视图环上增加 Canvas 标签,把当前会话渲染成可拖拽、可缩放的卡片地图;每张卡片带有记录背后的 anchorSeq,便于回溯到会话中的对应行。

这是什么

  • 名称:dsh-canvas(README 中亦称 Thinking Canvas for DeepSeek Harness)
  • 维护者:qiuyiwu1989-star(package.json 作者为 qiuyiwu)
  • 分类:客户端(仅浏览器侧;host 半部为空壳,不向模型注册 Tool、不写 prompt)
  • 版本(package.json):0.1.0,许可证 MIT
  • 目录页:SkillHub 插件页

插件依赖注入 @deepseek-ai/dsh-client-ui-conversation,在对话界面挂载 Canvas 视图。DSH 生态主张「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。

核心功能

会话 → 卡片地图

打开任意会话,在对话上方标签中选择 Canvas。画布按「谁贡献了这条内容」分类,而不是按事件的 wire 形状:

角色 在会话中的含义
My intent 你发送的消息
My choice 在模型工作时注入的纠偏(steering)
AI contribution 助手的一步(推理内容放在卡片详情里)
Tool action 工具调用,标题为工具名
Result 一轮末尾
Context 注入的上下文与 system prompt
System 压缩、重试、进程折叠等
Error 轮次错误与 token 上限
Other 画布未识别的事件类型

每张卡片可点击查看右侧详情(全文、turn、step、seq);卡片上的 anchorSeq 用于对应会话记录。v0.1 尚未实现从画布跳回对话,需自行根据 turn / step / seq 定位。

交互与导出

操作 方式
平移 拖拽空白区域
缩放 滚轮(以光标为中心),或工具栏 − / +
适应视图 工具栏 Fit
选中卡片 卡片上的 +,或详情面板 Add to selection
搜索 工具栏搜索框;Dim others / Hide others 控制未命中项
按角色筛选 点击角色 chip,再点可排除;All 重置
移动卡片 拖拽卡片,位置按会话保存在本地
清除 Esc
导出 托盘:选中项导出为带溯源的 Markdown,或整画布 JSON

空会话示例

无内容可画时,画布展示五张卡的虚构示例(邻里读书会报名页,从意图到交付)。README 明确说明示例数据为虚构,见仓库 examples/sample-canvas.json。

状态与边界

  • 只读:读取会话快照,不写会话、不碰文件、不调模型、不发网络请求。
  • 仅当前加载窗口:与 Chat、Trajectory 相同,只反映客户端已加载的会话窗口;更早历史需对话加载后才会出现在画布上。
  • 本地状态(浏览器 localStorage,不上传):
  • dsh-canvas:view:<sessionId>:平移与缩放
  • dsh-canvas:layout:<sessionId>:拖拽后的卡片位置
    清除这些键可恢复默认布局;私有模式或配额满时画布仍可用,但不会记住布局。

安装与启用

安装命令(来自 README):

dsh plugin --profile <your profile> add github:qiuyiwu1989-star/dsh-canvas

说明:

  1. dsh plugin 会在 profile 目录内转发给 pnpm,并对照已安装包 reconcile dsh.profile.bundles;本包声明 dsh.bundle,会自动进入 bundle 层列表。
  2. 安装后需重启应用——profile 在启动时读取。
  3. profile 名即启动时使用的名:dsh web 对应 web;自定义启动则用传入的名称。不确定时可看 $DSH_HOME/profiles/ 下最近写入的目录。
  4. 本仓库无 prepare 脚本、无构建步骤,lib/ 即源码,一般无需在 pnpm-workspace.yaml 的 allowBuilds 中额外放行。

卸载:

dsh plugin --profile <your profile> remove dsh-canvas

手动挂载 patch(可选):

dsh web --patch /path/to/dsh-canvas/cordis.patch.yml

安装成功时,宿主侧会在客户端启动图中扫描插件;启动一次后,页面中若出现类似行,表示已接入:

{
  "id": "dsh-canvas",
  "url": "/plugins/??dsh-canvas/client.js&rev=...",
  "inject": ["@deepseek-ai/dsh-client-ui-conversation"]
}

典型用法

  1. 按上文命令为当前使用的 profile 安装插件并重启 DSH Web(或你的自定义启动方式)。
  2. 打开一条已有记录的会话,切换到 Canvas 标签。
  3. 用平移、缩放、Fit 浏览整体结构;点击卡片阅读详情,用角色 chip 或搜索框缩小范围。
  4. 需要留档时,从托盘导出选中 Markdown(含溯源)或整画布 JSON。
  5. 若需对照会话原文,用详情中的 turn / step / seq 回到 Chat 流中查找(v0.1 无反向跳转)。

适用场景与注意

适合:需要在 DSH 里复盘长会话结构、区分意图 / 工具 / 结果、或导出带溯源摘要的开发者与智能体使用者。

注意:

  • 插件以当前 DSH 客户端进程与浏览器环境运行;安装前建议阅读 GitHub 源码 与 MIT 许可证,确认符合你的安全与合规要求。
  • 画布不拉取未加载的历史,也不改变会话内容;模型侧不可见此插件。
  • 运行时零 npm 依赖;Node 引擎要求(package.json):^22.19.0 || >=24(主要影响本地跑测试,非终端用户必装项)。

结尾

dsh-canvas 把 DSH 会话从纵向流变成可缩放、可筛选、可导出的卡片地图,并用 anchorSeq 把视觉节点钉回会话记录。若你在 SkillHub 或 GitHub 看到该插件,可按 README 安装到对应 profile 后,在会话里直接使用 Canvas 标签。

  • 目录页:https://www.skillhub.cn/plugins/qiuyiwu1989-star/dsh-canvas
  • GitHub:https://github.com/qiuyiwu1989-star/dsh-canvas
羽毛球分组比赛记分
小程序二维码

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

Xiaoye