前言¶
DeepSeek Harness (DSH) 提供了 fork API 用于会话分支,但 Web 界面目前仅支持从对话的最新回合(tail)进行分支,且官方侧边栏设计上保持扁平,无法查看会话的历史血缘。对于需要在复杂对话流中回溯特定上下文的开发者,缺乏直观的分支管理入口。dsh-session-git 通过插件形式扩展了 Web UI,允许用户从历史中任意一个已完成的回合发起分支,并在子会话头部绘制家族树,专注于会话的 lineage 管理。
这是什么¶
dsh-session-git 是 DeepSeek Harness 的配套插件,由 JUANWANG-BUAA 维护,遵循 MIT 协议。它的核心定位是会话血缘管理:允许用户从对话历史中的任意已完成回合(turn/end)发起分支,并在子会话头部展示家族树。与重写文件或合并日志的插件不同,它不修改工作区文件,也不改变源会话。
核心功能¶
- 头部分支选择:在会话头部提供“Branch from turn”选项,列出当前加载窗口内的所有已完成回合(
turn/end)供用户选择。这并非直接触发分支,而是提供选择入口。 - 历史分支入口:对于之前没有产生文件的回合,提供“Branch from here”按钮。
- 家族树展示:在会话头部通过 Popover 展示家族树,显示只读的父级会话芯片。
- 源会话保护:插件不会归档、取消或询问源会话,源会话保持不变。
- 防重叠分支:拒绝对同一源发起重叠的分支操作(
error.in-flight)。 - 兼容性:严格兼容 DeepSeek Harness 0.1.0-rc.5 的 fork 语义。
安装与启用¶
安装前请确保已安装 DeepSeek Harness Web 模式,且 Node.js 版本满足 ^22.19.0 || >=24。
执行以下命令安装预构建包:
dsh plugin --profile web add https://github.com/JUANWANG-BUAA/dsh-session-git/releases/latest/download/dsh-session-git.tgz
安装完成后,可以通过以下命令验证配置:
dsh --profile web --dump-config | grep session-git
启动 Web 模式(若需调试,建议取消环境变量 DSH_HOME):
env -u DSH_HOME dsh --profile web
典型用法¶
- 打开一个包含至少一个已完成回合的对话。
- 在会话头部使用 Branch from turn 选择一个切分点,或对没有文件产生的早期回合使用 Branch from here。
- 子会话将打开,包含该回合之前的历史记录(不包括之后的回合)。
- 在子会话头部,通过 Parent 按钮或家族树弹窗返回源会话。
注:子会话标题遵循官方的 (1) / (n) 编号规则。
适用场景与注意¶
- 环境要求:必须使用
--profile web模式运行,且 Node.js 版本需符合要求。 - 文件重写差异:插件仅管理会话分支,不重写工作区文件。若需文件时间机功能,请使用专门的 rewind 插件。
- 标题规则:当某回合产生了文件,官方交付物会占据
turnTail链,此时应使用头部选择器进行切分。子会话标题由官方逻辑管理。 - 父会话状态:归档或不在工作区内的父会话将以占位符形式渲染。
- 分支逻辑:
session.fork复制的是 fork 时刻的当前工作区,而非该回合时刻的文件快照。该插件不负责文件系统的状态回溯。
结语¶
该插件通过在 Web 界面补充历史分支选择与家族树展示,填补了官方 fork 功能在历史回溯方面的空白。它专注于会话血缘的可视化与导航,不涉及文件系统操作,适合需要在长期对话中保持上下文隔离与回溯能力的开发者。