dsh-session-git:DeepSeek Harness 对话血缘与分支管理插件

前言

DeepSeek Harness (DSH) 提供了 fork API 用于会话分支,但 Web 界面目前仅支持从对话的最新回合(tail)进行分支,且官方侧边栏设计上保持扁平,无法查看会话的历史血缘。对于需要在复杂对话流中回溯特定上下文的开发者,缺乏直观的分支管理入口。dsh-session-git 通过插件形式扩展了 Web UI,允许用户从历史中任意一个已完成的回合发起分支,并在子会话头部绘制家族树,专注于会话的 lineage 管理。

这是什么

dsh-session-git 是 DeepSeek Harness 的配套插件,由 JUANWANG-BUAA 维护,遵循 MIT 协议。它的核心定位是会话血缘管理:允许用户从对话历史中的任意已完成回合(turn/end)发起分支,并在子会话头部展示家族树。与重写文件或合并日志的插件不同,它不修改工作区文件,也不改变源会话。

核心功能

  1. 头部分支选择:在会话头部提供“Branch from turn”选项,列出当前加载窗口内的所有已完成回合(turn/end)供用户选择。这并非直接触发分支,而是提供选择入口。
  2. 历史分支入口:对于之前没有产生文件的回合,提供“Branch from here”按钮。
  3. 家族树展示:在会话头部通过 Popover 展示家族树,显示只读的父级会话芯片。
  4. 源会话保护:插件不会归档、取消或询问源会话,源会话保持不变。
  5. 防重叠分支:拒绝对同一源发起重叠的分支操作(error.in-flight)。
  6. 兼容性:严格兼容 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

典型用法

  1. 打开一个包含至少一个已完成回合的对话。
  2. 在会话头部使用 Branch from turn 选择一个切分点,或对没有文件产生的早期回合使用 Branch from here。
  3. 子会话将打开,包含该回合之前的历史记录(不包括之后的回合)。
  4. 在子会话头部,通过 Parent 按钮或家族树弹窗返回源会话。
    注:子会话标题遵循官方的 (1) / (n) 编号规则。

适用场景与注意

  • 环境要求:必须使用 --profile web 模式运行,且 Node.js 版本需符合要求。
  • 文件重写差异:插件仅管理会话分支,不重写工作区文件。若需文件时间机功能,请使用专门的 rewind 插件。
  • 标题规则:当某回合产生了文件,官方交付物会占据 turnTail 链,此时应使用头部选择器进行切分。子会话标题由官方逻辑管理。
  • 父会话状态:归档或不在工作区内的父会话将以占位符形式渲染。
  • 分支逻辑:session.fork 复制的是 fork 时刻的当前工作区,而非该回合时刻的文件快照。该插件不负责文件系统的状态回溯。

结语

该插件通过在 Web 界面补充历史分支选择与家族树展示,填补了官方 fork 功能在历史回溯方面的空白。它专注于会话血缘的可视化与导航,不涉及文件系统操作,适合需要在长期对话中保持上下文隔离与回溯能力的开发者。

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

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

小夜