前言¶
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 功能在歷史回溯方面的空白。它專注於會話血緣的可視化與導航,不涉及文件系統操作,適合需要在長期對話中保持上下文隔離與回溯能力的開發者。