前言¶
在 DeepSeek Harness(DSH)里做长对话时,常见做法是单线续写:改 prompt、重试、换模型,历史往往是一条时间线。一旦想从某个旧节点换一条路继续,要么复制粘贴上下文,要么开新 Session 丢血缘。官方 Session 列表能管理多个会话,但不擅长把「同一项目的分叉、克隆、祖先关系」画成一张可浏览的图。
下面介绍社区插件 dsh-session-tree-extension(目录维护者 lizhuoyuan41-droid,分类:记忆)。它在 Harness 上实现 只追加(append-only)、多分支 的会话树:从历史节点分叉、克隆到独立 Session、在 WebUI 里把整条谱系当作一张合并图查看;旧历史不被编辑或删除。仓库当前为 v0.1.2,基于上游 robiteame/dsh-session-tree-extension,许可证 MIT。发布包在 npm 上为 @ryanlee2007 作用域下的四个包,由载体 Bundle 一次安装挂载全部能力。
这是什么¶
一句话:给 DSH 加三条命令(/tree、/fork、/clone)和右侧会话树面板,把分叉与克隆放进同一套谱系视图。
实现上拆成四层(README 已列出):
| 包名 | 职责 |
|---|---|
@ryanlee2007/dsh-session-tree |
载体 Bundle,一次安装组合下面三层 |
@ryanlee2007/dsh-pi-agent-session-tree |
Host 域服务:SessionTree / SessionTreeStore 与 sessionTree Remote |
@ryanlee2007/dsh-tool-session-tree |
命令面:/tree、/fork、/clone |
@ryanlee2007/dsh-client-ui-session-tree |
WebUI 树面板:Harness 0.2 右侧 Sidebar 原生 Tab,旧版 stock 有叠加回退 |
徽章标明目标 DeepSeek-Harness 0.2.2-rc.1;开发与验证基线同为该版本。依赖 Cordis ~4.1.0,由目标安装环境提供 peer。
核心功能¶
三条命令¶
| 命令 | 作用 |
|---|---|
/tree |
打开合并谱系图:非 subagent 的 Session 与节点可点击、可绑定 |
/fork |
从任意历史节点分叉;图中出现新枝,源 Session 行下还有内联折叠菜单 |
/clone |
将当前对话(沿根路径)复制为同项目下的独立新 Session |
/tree:打开树面板¶
在右侧以 git 风格 展示当前 Session 谱系:祖先、分叉、克隆在同一视图;用户消息、助手回复、工具调用、模型切换为连线节点。共享前缀会去重;分叉点带 Session 徽章;当前 Session 路径高亮。点击节点可绑定;若节点属于其他 Session,会先打开该 Session。可折叠子树或整段 Session 枝;可用 focus 目标图标只查看某一叉点之后的子树。
/fork:从历史节点分支¶
选定更早的用户 prompt,从新路径继续对话,原路径保持不变。分叉走官方原生 fork API,在 Session 列表中有真实父链。插件同时更新合并图,并在源 Session 行下方渲染内联可折叠分支菜单;两处都跟随官方 reactive Session 列表,新分支无需手动刷新。
/clone:复制为新 Session¶
把当前对话复制到同项目下的独立 Session;源历史只读,克隆副本可单独续写。
界面与交互(README Highlights)¶
- 子树聚焦:在分叉点点击靶心图标,只显示该节点及后代;聚焦节点置顶,切换 Session / 侧栏重挂时记忆焦点;在子树内导航保持聚焦;
全部或 Esc 回到全谱系。 - 分支命名:分叉名取自该枝第一条自有 prompt,随后可跟动态标题;空分叉回退为
parent · fork N。 - 颜色稳定:各分支按永久分支号着色,外层归档或子树聚焦后仍一致。
- 嵌套泳道:分叉上的分叉位于
parent lane + 1。 - 分支菜单动画:各级菜单高度 + 淡入淡出开合,关闭后不可交互;侧栏不再横向滚动。
安装与启用¶
环境要求:DeepSeek-Harness ^0.2.2-rc.1、Cordis ~4.1.0。预构建 tarball 无需 install 脚本,自带 lib/ 产物。
DeepSeek Harness Desktop¶
- 打开 Settings → Plugins → Market。
- 搜索
@ryanlee2007/dsh-session-tree并安装。 - 重启桌面应用。
桌面插件管理器会激活载体 Bundle,下次启动组合 pi-agent-session-tree、tool-session-tree、ui-session-tree 三行。若当前构建的 dsh plugin 仅转发到 pnpm,仍应通过应用内市场安装;新装 bundle 会在当前构建中直接激活。重启后 /tree 应能打开面板。
CLI(0.2.2-rc.1 及更新)¶
在带 0.2.2-rc.1 插件管理器的 CLI 上,一条命令安装并激活 Bundle:
dsh plugin --profile <profile> add @ryanlee2007/dsh-session-tree
使用预构建包时(名称与版本以你手中的 tarball 为准,README 示例为 0.1.2):
dsh plugin --profile <profile> add ryanlee2007-dsh-session-tree-0.1.2.tgz
安装后重启该 profile,并检查组合层是否生效:
dsh --profile <profile> --dump-config # 应列出三条 session-tree 相关行
典型用法¶
- 看清整条线:在当前 Session 输入
/tree,在右侧面板浏览祖先、分叉与克隆;点击节点绑定上下文,或跳到拥有该节点的 Session。 - 换一条路试 prompt:在对话中选定历史用户消息,执行
/fork,在新枝上继续;在侧栏源 Session 下展开内联菜单切换分支。 - 并行实验:对当前线程满意但想保留副本时,用
/clone在同项目下开新 Session,两边独立演进。 - 只看某一叉:在树面板对分叉点使用聚焦(靶心),用
全部或 Esc 退回全图。
分支切换上,插件 不修改 Harness 核心文件,运行时探测可选的分支选择 API:
- Native 模式:带
Session.selectMessageSurface()的构建上,跳转/分叉直接切换模型可见历史。 - Stock 模式:在未改动的官方 Harness 上,通过官方 append API(空
replacesurface 事件)加插件侧车$DSH_HOME/storages/session-tree/持久化分支状态;日志仍可做 resume。 - Projection 模式:若连仿真都不可用,仅移动树投影与面板,下一轮仍走 canonical 历史。
非 Native 模式时 Host 日志会 一次性 提示。跨机器迁移时请把 session.jsonl.zstd 与匹配的 sidecar 一并带走。
适用场景与注意¶
适合谁:需要在 DSH 里做 prompt 对照实验、从旧节点重开分支、在同项目下保留多个有血缘关系的 Session,并希望在一张图里看清谱系的开发者。
权限与信任:插件以当前 dsh 进程权限运行,可读写会话相关存储(含 stock 模式下的 $DSH_HOME/storages/session-tree/)。安装前应在 GitHub 仓库 查看源码与 MIT 许可证;社区目录 skillhub.cn 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系,亦不能替代你对代码的审阅。
生态:DSH 理念是「一切皆插件」;本插件通过 Cordis 组合层挂载,与核心解耦。目录页星标数为 0(以目录统计为准),不代表功能完整度,仅作参考。
结尾¶
dsh-session-tree-extension 把多分支对话树做成只追加数据模型加三条命令:/tree 看谱系、/fork 从历史分叉、/clone 复制独立 Session。桌面从市场装 @ryanlee2007/dsh-session-tree,CLI 用官方 dsh plugin add 装同一 Bundle;满足 0.2.2-rc.1 后即可在侧栏与内联菜单里管理分支。