vlln/dsh-autofork:Agent 忙時自動分叉會話

前言

DeepSeek Harness (DSH) 的插件化架構允許在運行時動態擴展能力。在 agent 執行耗時任務(如長文本生成、工具調用)時,傳統的交互模型往往要求用戶等待當前輪次結束,或者使用 steer 等待下一個 step 邊界。這會導致用戶在等待期間無法插入新指令,交互被割裂。

dsh-autofork 插件通過 harness 側的被動觸發機制解決了這個問題:當檢測到 agent 正在忙碌且無法被打斷時,用戶提交的新指令會自動在一條新的會話(分叉)中執行;原會話留在後臺繼續運行直至完成,跑完後將結果回注到前臺會話。這種機制將”必須等待”的串行交互轉變爲”隨時可插話”的並行交互。

核心功能

  • 自動分叉:Agent 忙碌時,新指令自動觸發分叉,用戶立即在空閒會話中響應。
  • 後臺續跑與回注:原會話不中止,跑完後將結果注入當前會話。
  • 家族血緣視圖:提供”分叉”頁籤,展示分叉會話的血緣樹。
  • 工具集:暴露 fork_list、fork_steer、fork_cancel 三個工具供前臺調用。
  • 容器模式:實驗性功能,嘗試將消息交給綁定實例處理。

安裝與啓用

通過官方插件命令安裝:

dsh plugin --profile web add github:vlln/dsh-autofork

安裝後需重啓 web 進程,bundle 會重新加載層棧。

使用方式

  • 觸發條件:只有當 agent 正在運行當前輪次且來不及被打斷時,新指令纔會觸發分叉。如果 agent 空閒,它會直接響應,不會平白多出會話。
  • 分叉行爲:
  • 左側列表會冒出新會話,命名爲 ⑂n <原會話名>。
  • 焦點會自動切到新會話,用戶立即與空閒 agent 交互。
  • 舊會話在後臺繼續運行,完成後結果回注。
  • 分叉頁籤:顯示整個家族的血緣樹,包含會話狀態、觸發指令和分叉時間。
  • 注入摘要:回注內容默認摺疊成一行摘要,可展開查看。

工具與參數

插件向前臺暴露了三個工具:

工具 說明
fork_list 列出家族會話,顯示名字與實時狀態(運行中 / 空閒 / 已結束)。↑ 表示接管了前臺,↓ 表示被前臺接管,~ 表示同族另一條分叉。
fork_steer 給家族裏的一條會話發中途指令,等價於 steer,無需中止。
fork_cancel 中止家族裏的一條會話。參數 keepInbox=true 只中止當前 turn 並保留待處理項。

配置參數集中在 src/params.mjs,關鍵參數如下:

參數 默認值 說明
enabled true 總開關。
minStepAgeMs 0 分叉門檻:step 已運行低於此時長則不分叉。
coalesceWindowMs 2000 距下一個 step 邊界不足此時長時降級爲 steer。
maxActiveBranches 3 同一前臺下的活躍後臺分叉上限。
followHead true 是否把焦點切到新分叉。
titleMark '⑂' 分叉會話命名標記,格式爲 <標記><序號> <家族根名>。
noticeSummaries true 注入消息是否摺疊成一行摘要。
exposeDispatchTools true 是否向前臺暴露工具。
containerMode false 容器模式(實驗),默認關閉。
mirrorDelivery 'safe' 實例回覆投遞方式,'immediate' 已知會寫壞容器轉寫。

限制與注意事項

  • 非子代理樹:分叉出來的會話是普通會話,不會出現在原生「子代理」實例樹中,家族關係由「分叉」頁籤與 fork_list 表達。
  • 命名限制:開啓分叉命名後,會話不再被自動命名,標題被釘住。
  • 文件隔離:無文件級隔離,分叉與舊會話共享同一個 cwd。併發寫文件需手動協調(如使用 stale-version 守衛)。
  • 實驗性開關:containerMode 會導致容器與分叉重複勞動,mirrorDelivery: 'immediate' 已知會破壞會話轉寫,建議保持默認。
  • 平臺限制:部分客戶端功能僅在 web 平臺生效(dsh.client.platform = web)。

驗證與自檢

  • 健康檢查:GET /api/dsh-autofork/health[?sessionId=<id>] 返回插件參數、已註冊工具與家族狀態。
  • 本地驗證:運行 npm run verify 進行語法檢查、靜態門禁和測試。

許可證

MIT

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

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

小夜