ZhengQingJing/dsh-session-tree ↗★ 2
dsh-session-tree
Git-like immutable session lineage for DeepSeek Harness
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ZhengQingJing/dsh-session-tree说明文档
阅读完整 README ↗dsh-session-tree
dsh-session-tree 是一个可安装的 DeepSeek Harness(DSH)浏览器端插件。它将 DSH 原生 Session fork 呈现为不可变的对话版本树,并允许用户从任意已加载且已完成的对话轮次创建子分支。
[!IMPORTANT] 非官方社区插件。 本项目由社区独立开发,不隶属于 DeepSeek,也未经 DeepSeek 背书或维护。DSH 与本插件均处于预发布阶段;升级前请审阅变更,并备份重要的 DSH profile 与 Session 数据。
源码仓库:github.com/ZhengQingJing/dsh-session-tree
当前版本支持:
- DeepSeek Harness 源码版
0.1.0-rc.5(审计基线47f9438)。 - DSH Client 公开 API
0.1.0-rc.5和0.1.0-rc.6。 - Node.js
^22.19.0 || >=24.0.0。
DSH 尚处于开发者预览阶段。为避免在未来 API 变更上作出不安全的假设,本插件的 peer dependency 仅允许上述两个已验证的预发布版本。
功能
- 在对话页面中新增 版本树 / Branches 标签页。
- 将
SessionSummary.parentId投影为确定性的当前对话家族树。 - 区分普通 fork 与 subagent 谱系。
- 显示但隔离孤儿节点和循环谱系,不修改持久化记录。
- 列出当前已加载历史窗口中的已完成轮次。
- 调用 DSH 原生
ctx.sessions.fork({ sessionId, atSeq })创建子 Session,然后打开新对话。 - 按需加载更早的历史轮次。
- 限制大型版本树和长对话的初始 DOM 工作量。
插件不定义自有 SessionEvent 类型,也不维护独立的分支数据库。卸载插件后,已创建的分支仍是普通、可读的 DSH Session。
安全契约
- 回溯始终创建新的子 Session;绝不截断或重写父 Session。
- 只提供已完成的
turn/end检查点。 - 当 fork 请求进行中时,当前视图中的其他 fork 按钮全部禁用。
- 不自动重试不确定或部分成功的请求。界面会要求用户先检查版本树,以避免生成重复子分支。
- 禁用
increaseTitle,避免子 Session 已发布后又因标题修改失败而产生额外的部分成功状态。 - 谱系异常在 UI 中 fail-soft,不会被静默修复。
- 对话分支不会撤销文件修改、命令、Git 状态、进程、网络请求、邮件、支付或其他工具副作用。
- 不合并不同分支的上下文,也不重放工具调用。
安装
以下命令安装到 DSH 的 web profile。dsh plugin 会把包管理参数转发给 pnpm,因此需要先确保 dsh 和 pnpm 都在 PATH 中。
从 npm 安装(推荐)
npm 包是预编译制品,安装时不需要授权本地构建脚本。0.1.0-beta.2 起由 GitHub Actions Trusted Publisher 使用短期 OIDC 凭据发布,不在仓库中保存 npm token,并自动生成 provenance。
安装 next 渠道中的最新预发布版本:
dsh plugin --profile web add dsh-session-tree@next