Session Git:把分叉会话画成分支树,一键合并回主会话

前言

在 DeepSeek Harness(DSH)里,从某条回复「分叉会话」去探索另一条思路很常见。主会话却看不到分叉里发生了什么:结论、改过的文件、跑过的命令、你在分叉里做的决定,往往只能自己口述一遍,主会话的 Agent 才能接着用。

下面介绍社区插件 dsh-session-git(目录分类:工作流)。它把分叉会话画成分支地图,并把分支成果以摘要(digest)合并回主会话,减少重复输入。

这是什么

Session Git 由维护者 glk1220 发布,当前包版本为 0.1.0(MIT 许可证)。定位是:在 Harness 中为分叉会话提供分支视图,并支持将分支已完成的工作合并回主会话。

插件不向网络发送会话数据;合并时读取本机会话记录,本地处理。

核心功能

分支地图

  • 右侧边栏 Session Git 标签:围绕当前会话展示分支树——各分支从何处 fork、自有轮次数、已合并程度。
  • 左侧边栏 Session Git 面板:列出工作区内所有分叉树。

一键合并

  • 主会话中可对某分支点 Merge here;分支内可点 Merge into parent。
  • 输入斜杠命令 /merge 同样触发合并;单独输入 /merge 会打开分支选择器。

增量合并

对同一分支再次合并时,默认只带入自上次合并以来的新内容。需要从 fork 点重来可加 --all。

默认静默投递

合并产生的 digest 默认进入队列,在你下一条消息时随上下文交给 Agent,不中断当前对话。输入框上方有一条提示条说明合并已排队。若希望 Agent 立刻行动,可加 --wake,或在 -- 后写备注(与 digest 一并发送)。

未合并提醒

回到主会话且某分支有新工作尚未合并时,输入框上方提示条提供 Merge here 或 Ignore;分支再完成一轮后会再次提醒。

Agent 侧能力

运行时上下文可告知 Agent 当前会话有哪些分支;配置开启 tools 后,Agent 可调用 session_branches 与 session_branch_merge。用户说「把分支里的结论带进来」时,Agent 可走这一套工具;经此路径读取的内容同样计入合并状态。

安装与启用

要求 DeepSeek Harness 0.2.1-rc.5 或更高版本(package.json 中 engines.dsh 与此一致)。

在 Harness 图形界面:打开 Plugins → Add plugin → Install a third-party plugin,填入 GitHub 仓库地址:

https://github.com/glk1220/dsh-session-git

从 GitHub 安装需要本机可访问 GitHub;也可下载仓库后,在同一对话框填写插件目录的绝对路径。

命令行安装:

dsh plugin --profile web add github:glk1220/dsh-session-git

按提示重启 Harness。

插件以当前 DSH 进程权限运行。安装第三方插件前,建议在 GitHub 上查看源码与 LICENSE,确认符合你的安全与合规要求。社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。

典型用法

界面流程

  1. 在回复下点 Branch into a new conversation,或从侧栏会话菜单选 Fork session,在分叉中探索。
  2. 结束后在分叉右侧 Session Git 中点 Merge into parent;或回到主会话,在输入框上方条带中点 Merge here。
  3. 在主会话照常发下一条消息;Agent 会在上下文中看到分支 digest 并回答。

侧栏可设 digest 粒度:Summary、Full、Conclusion only;Let the agent act right away 等价于 --wake。

斜杠命令

/merge [#number|title|id] [summary|full|last|Nturns] [--all] [--wake] [--up] [-- note]
/branches
形式 含义
/merge 仅一个分支时直接合并;多个时合并唯一有新区间的分支,或列出供选择。在无子分支的分叉内,合并到父会话。单独输入打开分支选择器。
/merge #2 按地图上编号选择;标题(部分匹配)或 session id 前 4 位以上亦可。
summary / full / last digest 详细程度,默认 summary。
turns:3 仅最近 3 轮,全文细节。
--all 忽略既往合并,从 fork 点重新合并。
--wake 合并后立即唤醒 Agent。
--up 将当前分支合并到父会话。
-- note -- 之后的内容作为你的消息与 digest 一并发送。
/branches 在对话中打印分支地图。

digest 包含什么

digest 是交给 Agent 的背景材料。超长时会先压缩步骤细节。主要章节包括:

  1. 分支与本会话的关系:fork 位置、本次合并覆盖的轮次。
  2. 分支目标(若已设置)。
  3. 各轮:用户消息、Agent 回复要点、所用工具、委派给 subagent 的工作。
  4. 用户在分支中的决定(如对 Agent 提问的回答)。
  5. 变更文件与执行的命令。
  6. 待办列表与 compaction 摘要。
  7. 分支最终结论。

开头会说明:分支中的计划与 to-do 仅供记录、需你确认;若两会话共享工作目录,分支的文件改动已在磁盘上,以实际文件为准。

配置

在 profile 的 cordis.patch.yml 中,可覆盖 id 为 session-git 的整条 config:

选项 默认 含义
runtimeContext true 在运行时上下文中告知 Agent 本对话有哪些分支(多为不变事实,减少重复推送)。
tools true 提供 session_branches、session_branch_merge 工具。
maxDigestChars 24000 单次 digest 字符上限,2000–200000。
maxContextBranches 8 运行时上下文最多列出的分支数。
locale auto 命令结果与 digest 语言:auto 随对话,zh / en 强制。

适用场景与注意

适合谁:经常在 Harness 里 fork 多路线探索、又希望主会话 Agent 自动继承分支结论与操作记录的开发者。

已知限制(来自上游 README):

  • 排队中的合并类似排队消息:在 Agent 读取前若点 Stop 或重启 Harness,可能被取消;提示条会再次显示未合并,重新合并不丢分支内容。
  • 静默合并不出现在对话流中(Harness 不渲染纯上下文注入),状态见输入框条带与分支地图。
  • Subagent 会话不在地图上;其下分支挂在最近可见会话下。

DSH 生态理念是「一切皆插件」;Session Git 解决的是分叉探索与主会话上下文之间的断层,用分支树和 merge 把成果带回,而不必重新打字复述。

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

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

小夜