dsh-canvas:在 DeepSeek Harness 里把会话分支画成画布

前言

DeepSeek Harness(DSH)原生支持 fork,侧边栏也会列出会话,但父子关系在列表里会被摊平,很难一眼看出「从哪条消息岔出去、现在有几条并行线在跑」。分叉入口也藏在侧边栏行菜单和单轮对话底部,想先看清整体再决定在哪一刀,往往要来回点。

answertsundere 维护的 dsh-canvas(仓库 answertsundere/dsh-canvas-plugin)把当前工作区的会话谱系画成全屏画布:按 parentSession 从左到右排布,支持在任意消息处 fork、并行观察多条分支的运行状态,并用确定性规则对比分叉后的事件流。插件在 SkillHub 目录归类为「工作流」;分发以 GitHub pinned 发布为主(README 说明 npm 包名 dsh-canvas 已被占用,尚未改名发布)。

这是什么

一句话:面向 DSH 的对话分支画布——谱系图、消息级 fork、并行运行可视、确定性分支对比。

维护者:answertsundere。许可证:MIT。当前插件版本 v0.1.0,开发与验证目标 DSH 版本为 0.2.0-rc.2(README 写明所用 API 对照本地 DSH checkout 校验,而非在线文档)。

未安装也可体验 UI:在线 demo 使用合成数据;本地可 pnpm run demo 后打开 demo/index.html。

核心功能

谱系画布(Lineage canvas)

工作区会话按 parentSession 左→右布局:线性链保持同一行,只有真实分支才向下展开。支持 0.4–2× 缩放、拖拽平移、适应视图、搜索定位。

子代理会话默认视为对话内部,不单独占谱系节点;父节点以「机器人 ×N」徽标汇总,可跳转到该会话的 ⌖ 网状视图。工具栏「子代理」开关可把子代理重新显示为节点。

任意消息 fork

详情面板列出该分支自己的轮次及真实 seq 范围,每行提供「⑂ fork here」。切分点取该行自身最后一条事件的 seq,保证 始终是真实事件。

两种启动方式:

  • run now:把指令排队进子分支;
  • create empty branch:不发送任何内容,只建空分支。

确定性对比(Deterministic comparison)

只比较各分支 inheritedEventCount 之后的事件,按位置对齐,不做语义判断。「Carry conclusion」生成 可编辑草稿,不会自动提交。

状态与实时输出

三态:confirmed(idle/queued/failed/done)、inferred(thinking/tool)、unknown(disconnected)。不会因静默而推断为 idle。

运行中的分支在画布上可见流式输出:节点卡片显示最新一行(推理 / 回答 / 工具),选中分支的详情面板显示完整实时推理与回答,按 chunk 更新;持久化消息落盘后并入轮次列表。有流时状态徽标由流驱动(thinking vs tool)。

子代理战情网(Agent swarm web)

节点卡片 ⌖ 按钮打开该会话的 live 视图:父 agent 居中,子 agent 环状排列;某 agent 输出时辐条亮起,光点沿辐条向父节点移动,芯片上显示该 agent 最新一行。名册来自会话日志的 subagent/catalog 事件,新 spawn 的 agent 会即时加入。

安装与启用

环境要求(来自 README):

  • DeepSeek Harness 桌面端或 CLI,对齐 0.2.0-rc.2
  • Node.js ≥ 22.19,pnpm 10+(corepack enable),Git

从 GitHub 一行安装(pinned tag,无需本地 build):

dsh plugin --profile <your-profile> add "github:answertsundere/dsh-canvas-plugin#v0.1.0"

安装后需 重启应用或对应 profile——新 bundle 行在宿主启动时读取。

插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与 MIT 许可证,确认符合你的安全与合规要求。SkillHub 目录页:https://www.skillhub.cn/plugins/answertsundere/dsh-canvas-plugin,与 DeepSeek / 幻方无官方从属关系,属于社区插件生态。

从源码开发安装(README 节选):clone 后 pnpm install、pnpm run build;桌面推荐 node scripts/install-local.mjs --profile desktop(独立 CLI 会拒绝 --profile desktop,需走桌面应用自带 carrier CLI)。改插件代码后同样需要重启应用,HMR 仅覆盖已挂载插件的代码变更。

典型用法

  1. 在 DSH 中装好插件并重启,打开当前工作区对应的画布视图。
  2. 在谱系上选中要深入的分支,在详情面板找到目标轮次,使用「⑂ fork here」;按需选「run now」或「create empty branch」。
  3. 并行跑两条方案时,在画布上同时观察各节点状态与流式输出;需要收敛结论时,用确定性对比对齐分叉后事件,再用「Carry conclusion」得到可编辑草稿(v1 通过剪贴板带走,无 composer 句柄)。

开发调试可先跑 demo:pnpm run demo,浏览器打开 demo/index.html;或访问上述在线 demo 熟悉交互。

适用场景与 v1 限制

适合:需要在同一工作区内规划 fork 点、并行试两种实现或提示策略、对照事件流而非「感觉差不多」的 DSH 用户。

务必知晓的 v1 限制(README 表格):

限制 原因
分支共享同一工作目录 公开 fork API 无 cwd;UI 常驻「⚠ parallel write」警告
详情面板为快照 选中节点读一次即释放,不长期 pin 会话
Carry-forward 走剪贴板 v1 无 composer 句柄
无持久主線标记 仅「continue in this branch」
无自动择优、无语义摘要 仅位置对齐,保证两次对比结果一致

社区目录当前 GitHub 星标为 1(以目录页/仓库公开数据为准),不代表功能完整度;请以 README 与 docs/compat.md 中的兼容说明为准。

结尾

dsh-canvas 把 DSH 里原本分散的 fork 与并行探索收进一张可缩放、可搜索的谱系画布,并补上子代理 live 网状视图与确定性事件对比,适合把工作流里的「分支实验」从侧边栏列表里拎出来单独管理。

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

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

小夜