前言¶
在 DeepSeek Harness(DSH)里做多轮对话、开 fork 子会话、再挂子代理时,主对话区通常只能顺着当前分支往下看。想回到某一轮改追问、对比另一条分支从哪岔开,往往要在会话列表和滚动位置之间来回找。社区插件 dsh-branch-tree(维护者 ANHANP,分类:工作流)把同一家族的分支与轮次投影成右侧持久抽屉里的树状视图:一轮一张卡、分叉从对应轮次长出,并可按事件 seq 跳回主对话定位。
这是什么¶
dsh-branch-tree 是 DSH 的非官方社区插件(MIT,当前 package 版本 0.1.1)。README 将其概括为:把会话分支历史变成一棵可以左右浏览、可以跳回去、可以继续追问的树——轮次以卡片展示,fork 从分叉的那一轮生长,附带持久右侧抽屉、子代理森林与缩略图。
作者在 DSH Desktop Beta(app 2.0.17-beta.2 / runtime 0.2.1-alpha.2,macOS)上做过验证;窄窗口与其他客户端未在文档中声明已测。
核心功能¶
下面按 README 已写明的能力归纳,不超出资料范围。
持久抽屉与轮次卡片¶
屏幕右缘有 ⑂ 把手。点开为独立持久抽屉:切换会话或分支时抽屉不消失,视角、缩放与展开状态会保留。每个框对应一轮对话,展示该轮最后一条用户消息与最终助手回复;工具调用不占卡片空间。
分叉与子代理¶
分支从它分叉的那一轮长出来:fork 子会话的继承前缀映射回父会话的对应轮次,而不是接在兄弟分支末端。子代理按创建时间落到对应轮次;卡片底部「代理 ×N」展开后从右缘延伸,相关对话节点会右移让位(子代理卡片只读、按节点聚合)。
跳转、开分支与导航¶
- 点击任意轮次卡(含卡内「你 / AI」两行)→ 主对话切换到该会话,并按该轮用户消息的 事件 seq 精确定位;跨分支不会串到同号轮次,到位后描边高亮。
- 悬停已完成轮次卡片,左侧出现
+,可弹出「新的追问」输入卡;快捷词可点选发送,+可自定义快捷词。发送后自动 fork、发送追问并切到新分支(未完成轮次不能开新分支)。 - 右上角缩略图显示整棵树剪影与当前视野框,点击或拖动可导航;画布可自由平移,缩放围绕指针;无滚动边界。
- 双击分支名药丸可重命名分支(本地保存,之后自动名不再覆盖)。
- 工具栏
⇆可开关「轮次导航条镜像到左侧」(默认开);→提手为折叠按钮。
抽屉跨会话只挂载一次,切会话更新数据;相机状态存 localStorage。点主对话、顶栏或空白处可收起;点左侧工作区/会话栏及其下拉不会收起;Esc 同样收起。深/浅色跟随 DSH。
数据与隐私¶
宿主半通过只读路由(Host 头围栏,仅回环)提供:
GET /branch-tree/api/tree?sessionId=<id>— 分支家族树、每轮投影、子代理森林。GET /branch-tree/ui/*— 抽屉 iframe UI(改 UI 不需重启宿主)。
数据来自本机 DSH 会话库(sessionQuery,可读未打开的冷会话;缺失时退化为 live store)与 subagents 服务。轮次标题由 DSH 同一条模型路由(通常 deepseek-flash)生成并缓存到 ~/.dsh-beta/branch-tree/round-titles.json;模型不可用时用本地截断占位。插件不上传数据;除标题走 DSH 自有模型路由外,不发额外网络请求。
安装与启用¶
当前通过 GitHub Release 预构建 tarball 分发(npm 包文档称稍后提供)。安装命令以 README 原文为准:
dsh plugin --profile web add https://github.com/ANHANP/dsh-branch-tree/releases/latest/download/dsh-branch-tree.tgz
命令会自动写入依赖与 dsh.profile.bundles(作者已实测);装完需重启 DSH。
- DSH Desktop:桌面 profile 由应用管理;待 dsh-market 收录后可市场一键安装,也可将上述 tarball 地址交给市场/插件管理器安装入口。
- 本地开发:
dsh plugin --profile <profile> add /path/to/dsh-branch-tree;若dsh.profile.bundles未自动追加,手工加入"dsh-branch-tree"。
运行环境要求 Node >=20(见 package.json engines)。
典型用法¶
| 操作 | 效果 |
|---|---|
点右缘 ⑂ |
展开/收起抽屉 |
| 点轮次卡 / 卡内文本 | 跳到该轮 |
悬停卡 → 左侧 + |
开新分支输入卡;快捷词直接发送,⌘/Ctrl+Enter 发送,Esc 取消 |
| 双击分支名药丸 | 重命名分支(本地保存) |
| 点缩略图 / 拖动 | 跳转视野 |
| 拖动画布 / 双指滚动 | 平移;捏合(或 ⌘+滚轮)缩放 |
调试(可选,默认关闭):宿主设 DSH_BRANCH_TREE_DEBUG=1 注册 /branch-tree/api/debug 并写 ~/.dsh-beta/branch-tree/debug.jsonl;客户端设 localStorage['dsh-branch-tree:debug']='1' 上报推挤诊断。
适用场景与注意¶
适合谁:经常在 DSH 里 fork 多路径探索、需要一眼看清分支从哪一轮岔开、并要从历史轮次继续追问或精确跳回某轮的用户。
兼容性:早期 0.1.x,依赖 DSH 内部结构,升级后可能需要插件跟进修。会话跳转依赖 chat 节点的 anchorSeq / data-chat-anchor-key、loadThrough(seq)。轮次导航条镜像为样式覆盖,依赖 DSH 打包后的哈希类名,DSH 升级可能失效(抽屉其余 UI 不受影响)。「推挤式展开」为实验性,部分布局可能无效果。侧边对话(side chat)不在树里。
安全与权限:插件以当前 DSH 进程权限运行,可读本机会话与子代理投影;安装前建议查看 GitHub 仓库 源码与 MIT 许可证,确认与自身环境一致。
交互与视觉上,「新的追问」输入卡灵感来自社区插件 dsh-synapse(MIT),本项目独立实现;与 DeepSeek / DeepSeek Harness 官方无隶属或背书关系。
结尾¶
若你已在 DSH 里用 fork 和子代理拉长对话族谱,dsh-branch-tree 把同一套历史收成右侧可缩放、可缩略图导航的树,并把「回到某一轮」做成按 seq 定位的主对话跳转。目录与元信息可在 SkillHub 插件页查看:anhanp/dsh-branch-tree;安装与 issue 以 GitHub:ANHANP/dsh-branch-tree 为准。