dsh-fork-relink: DSH fork 後自動複製子 agent 樹

前言

DSH 官方 fork 功能在創建新會話時,原會話的子 agent 記錄仍指向舊會話。這導致 fork 出的新對話中,子 agent 面板爲空,雖然記錄仍在磁盤上,但脫離了新對話。dsh-fork-relink 監聽 session/created 事件,爲原會話的直接子 agent 創建完整副本並掛載到新會話下。

功能特性

該插件通過監聽官方事件來實現子 agent 的遷移與保留:

  1. 事件監聽與篩選:監聽 session/created 事件,僅對 isSeeded 且有 parentSession 且非 subagent 的會話(即 fork 子會話)進行操作。
  2. 遞歸複製樹:爲原會話的每個直接子 agent 調用官方 agents.create 創建完整副本,並遞歸複製整棵子 agent 樹。
  3. 元數據保留:複製子 agent 的面板、代理路由、descriptor、label 等信息。
  4. 冷會話機制:副本是冷會話,落盤後釋放活體。副本與原件互不干擾,副本通過官方恢復路徑喚醒。
  5. 目錄登記:創建副本後向父會話追加官方 subagent/catalog,確保副本在子代理面板中可見。
  6. 日誌代際處理:按代際讀取會話日誌(session.vN.jsonl.zstd),自動讀取最高代際文件,不把代際號寫死。
  7. 運行狀態過濾:跳過當前運行中的子 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 副本,但需注意以下特性:

  1. 冷會話喚醒:副本是冷會話,首次發消息需要通過冷恢復喚醒。插件日誌會記錄每個副本的可尋址性。
  2. ID 使用:必須使用 list_agents 返回的副本 ID 發送消息。原 ID 仍歸舊分支,對新父會話會返回 UNAUTHORIZED: belongs to another parent session。
  3. 隊列消息:繼承的排隊消息不再由本插件呈現。0.3.0 版本已刪除補位條,官方隊列條會直接顯示繼承項。
  4. 零依賴:插件完全零依賴、零文件改寫,所有操作均通過官方 API 完成。

適用場景

該插件適合需要在新 fork 對話中繼續與原子 agent 進行交互的開發者。它解決了官方 fork 後子 agent 面板爲空、記錄無法在新對話中可見的問題,但要求用戶在 fork 後使用副本 ID 進行操作。

插件目錄 | GitHub 倉庫

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

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

小夜