前言¶
在 DeepSeek Harness(DSH)裏做長對話時,常見做法是單線續寫:改 prompt、重試、換模型,歷史往往是一條時間線。一旦想從某個舊節點換一條路繼續,要麼複製粘貼上下文,要麼開新 Session 丟血緣。官方 Session 列表能管理多個會話,但不擅長把「同一項目的分叉、克隆、祖先關係」畫成一張可瀏覽的圖。
下面介紹社區插件 dsh-session-tree-extension(目錄維護者 lizhuoyuan41-droid,分類:記憶)。它在 Harness 上實現 只追加(append-only)、多分支 的會話樹:從歷史節點分叉、克隆到獨立 Session、在 WebUI 裏把整條譜系當作一張合併圖查看;舊歷史不被編輯或刪除。倉庫當前爲 v0.1.2,基於上游 robiteame/dsh-session-tree-extension,許可證 MIT。發佈包在 npm 上爲 @ryanlee2007 作用域下的四個包,由載體 Bundle 一次安裝掛載全部能力。
這是什麼¶
一句話:給 DSH 加三條命令(/tree、/fork、/clone)和右側會話樹面板,把分叉與克隆放進同一套譜系視圖。
實現上拆成四層(README 已列出):
| 包名 | 職責 |
|---|---|
@ryanlee2007/dsh-session-tree |
載體 Bundle,一次安裝組合下面三層 |
@ryanlee2007/dsh-pi-agent-session-tree |
Host 域服務:SessionTree / SessionTreeStore 與 sessionTree Remote |
@ryanlee2007/dsh-tool-session-tree |
命令面:/tree、/fork、/clone |
@ryanlee2007/dsh-client-ui-session-tree |
WebUI 樹面板:Harness 0.2 右側 Sidebar 原生 Tab,舊版 stock 有疊加回退 |
徽章標明目標 DeepSeek-Harness 0.2.2-rc.1;開發與驗證基線同爲該版本。依賴 Cordis ~4.1.0,由目標安裝環境提供 peer。
核心功能¶
三條命令¶
| 命令 | 作用 |
|---|---|
/tree |
打開合併譜系圖:非 subagent 的 Session 與節點可點擊、可綁定 |
/fork |
從任意歷史節點分叉;圖中出現新枝,源 Session 行下還有內聯摺疊菜單 |
/clone |
將當前對話(沿根路徑)複製爲同項目下的獨立新 Session |
/tree:打開樹面板¶
在右側以 git 風格 展示當前 Session 譜系:祖先、分叉、克隆在同一視圖;用戶消息、助手回覆、工具調用、模型切換爲連線節點。共享前綴會去重;分叉點帶 Session 徽章;當前 Session 路徑高亮。點擊節點可綁定;若節點屬於其他 Session,會先打開該 Session。可摺疊子樹或整段 Session 枝;可用 focus 目標圖標只查看某一叉點之後的子樹。
/fork:從歷史節點分支¶
選定更早的用戶 prompt,從新路徑繼續對話,原路徑保持不變。分叉走官方原生 fork API,在 Session 列表中有真實父鏈。插件同時更新合併圖,並在源 Session 行下方渲染內聯可摺疊分支菜單;兩處都跟隨官方 reactive Session 列表,新分支無需手動刷新。
/clone:複製爲新 Session¶
把當前對話複製到同項目下的獨立 Session;源歷史只讀,克隆副本可單獨續寫。
界面與交互(README Highlights)¶
- 子樹聚焦:在分叉點點擊靶心圖標,只顯示該節點及後代;聚焦節點置頂,切換 Session / 側欄重掛時記憶焦點;在子樹內導航保持聚焦;
全部或 Esc 回到全譜系。 - 分支命名:分叉名取自該枝第一條自有 prompt,隨後可跟動態標題;空分叉回退爲
parent · fork N。 - 顏色穩定:各分支按永久分支號着色,外層歸檔或子樹聚焦後仍一致。
- 嵌套泳道:分叉上的分叉位於
parent lane + 1。 - 分支菜單動畫:各級菜單高度 + 淡入淡出開合,關閉後不可交互;側欄不再橫向滾動。
安裝與啓用¶
環境要求:DeepSeek-Harness ^0.2.2-rc.1、Cordis ~4.1.0。預構建 tarball 無需 install 腳本,自帶 lib/ 產物。
DeepSeek Harness Desktop¶
- 打開 Settings → Plugins → Market。
- 搜索
@ryanlee2007/dsh-session-tree並安裝。 - 重啓桌面應用。
桌面插件管理器會激活載體 Bundle,下次啓動組合 pi-agent-session-tree、tool-session-tree、ui-session-tree 三行。若當前構建的 dsh plugin 僅轉發到 pnpm,仍應通過應用內市場安裝;新裝 bundle 會在當前構建中直接激活。重啓後 /tree 應能打開面板。
CLI(0.2.2-rc.1 及更新)¶
在帶 0.2.2-rc.1 插件管理器的 CLI 上,一條命令安裝並激活 Bundle:
dsh plugin --profile <profile> add @ryanlee2007/dsh-session-tree
使用預構建包時(名稱與版本以你手中的 tarball 爲準,README 示例爲 0.1.2):
dsh plugin --profile <profile> add ryanlee2007-dsh-session-tree-0.1.2.tgz
安裝後重啓該 profile,並檢查組合層是否生效:
dsh --profile <profile> --dump-config # 應列出三條 session-tree 相關行
典型用法¶
- 看清整條線:在當前 Session 輸入
/tree,在右側面板瀏覽祖先、分叉與克隆;點擊節點綁定上下文,或跳到擁有該節點的 Session。 - 換一條路試 prompt:在對話中選定歷史用戶消息,執行
/fork,在新枝上繼續;在側欄源 Session 下展開內聯菜單切換分支。 - 並行實驗:對當前線程滿意但想保留副本時,用
/clone在同項目下開新 Session,兩邊獨立演進。 - 只看某一叉:在樹面板對分叉點使用聚焦(靶心),用
全部或 Esc 退回全圖。
分支切換上,插件 不修改 Harness 核心文件,運行時探測可選的分支選擇 API:
- Native 模式:帶
Session.selectMessageSurface()的構建上,跳轉/分叉直接切換模型可見歷史。 - Stock 模式:在未改動的官方 Harness 上,通過官方 append API(空
replacesurface 事件)加插件側車$DSH_HOME/storages/session-tree/持久化分支狀態;日誌仍可做 resume。 - Projection 模式:若連仿真都不可用,僅移動樹投影與面板,下一輪仍走 canonical 歷史。
非 Native 模式時 Host 日誌會 一次性 提示。跨機器遷移時請把 session.jsonl.zstd 與匹配的 sidecar 一併帶走。
適用場景與注意¶
適合誰:需要在 DSH 裏做 prompt 對照實驗、從舊節點重開分支、在同項目下保留多個有血緣關係的 Session,並希望在一張圖裏看清譜系的開發者。
權限與信任:插件以當前 dsh 進程權限運行,可讀寫會話相關存儲(含 stock 模式下的 $DSH_HOME/storages/session-tree/)。安裝前應在 GitHub 倉庫 查看源碼與 MIT 許可證;社區目錄 skillhub.cn 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係,亦不能替代你對代碼的審閱。
生態:DSH 理念是「一切皆插件」;本插件通過 Cordis 組合層掛載,與核心解耦。目錄頁星標數爲 0(以目錄統計爲準),不代表功能完整度,僅作參考。
結尾¶
dsh-session-tree-extension 把多分支對話樹做成只追加數據模型加三條命令:/tree 看譜系、/fork 從歷史分叉、/clone 複製獨立 Session。桌面從市場裝 @ryanlee2007/dsh-session-tree,CLI 用官方 dsh plugin add 裝同一 Bundle;滿足 0.2.2-rc.1 後即可在側欄與內聯菜單裏管理分支。