前言¶
DSH 官方 fork 功能在創建新會話時,原會話的子 agent 記錄仍指向舊會話。這導致 fork 出的新對話中,子 agent 面板爲空,雖然記錄仍在磁盤上,但脫離了新對話。dsh-fork-relink 監聽 session/created 事件,爲原會話的直接子 agent 創建完整副本並掛載到新會話下。
功能特性¶
該插件通過監聽官方事件來實現子 agent 的遷移與保留:
- 事件監聽與篩選:監聽
session/created事件,僅對isSeeded且有parentSession且非subagent的會話(即 fork 子會話)進行操作。 - 遞歸複製樹:爲原會話的每個直接子 agent 調用官方
agents.create創建完整副本,並遞歸複製整棵子 agent 樹。 - 元數據保留:複製子 agent 的面板、代理路由、descriptor、label 等信息。
- 冷會話機制:副本是冷會話,落盤後釋放活體。副本與原件互不干擾,副本通過官方恢復路徑喚醒。
- 目錄登記:創建副本後向父會話追加官方
subagent/catalog,確保副本在子代理面板中可見。 - 日誌代際處理:按代際讀取會話日誌(
session.vN.jsonl.zstd),自動讀取最高代際文件,不把代際號寫死。 - 運行狀態過濾:跳過當前運行中的子 agent,避免與內存態衝突,並將跳過的記錄記入日誌。
安裝與啓用¶
安裝插件後需重啓 dsh web 生效。
從 GitHub 安裝¶
dsh plugin --profile web add github:Enosensu/dsh-fork-relink
本地開發¶
直接指向工作目錄:
dsh plugin --profile web add "link:<本目錄>"
卸載¶
dsh plugin --profile web remove dsh-fork-relink
使用與限制¶
安裝插件後,fork 出的新對話將自動擁有子 agent 副本,但需注意以下特性:
- 冷會話喚醒:副本是冷會話,首次發消息需要通過冷恢復喚醒。插件日誌會記錄每個副本的可尋址性。
- ID 使用:必須使用
list_agents返回的副本 ID 發送消息。原 ID 仍歸舊分支,對新父會話會返回UNAUTHORIZED: belongs to another parent session。 - 隊列消息:繼承的排隊消息不再由本插件呈現。0.3.0 版本已刪除補位條,官方隊列條會直接顯示繼承項。
- 零依賴:插件完全零依賴、零文件改寫,所有操作均通過官方 API 完成。
適用場景¶
該插件適合需要在新 fork 對話中繼續與原子 agent 進行交互的開發者。它解決了官方 fork 後子 agent 面板爲空、記錄無法在新對話中可見的問題,但要求用戶在 fork 後使用副本 ID 進行操作。