dsh-branch-inbox-guard:解決 DSH 分支繼承父級隊列的隊列污染問題

前言

在使用 DeepSeek Harness (DSH) 0.1.5 版本進行會話分支操作時,fork 出來的子會話會繼承父會話的日誌前綴。如果父會話有未處理的隊列(即 agent/inbox/spliced 事件),這些事件會被重放進子會話的待辦隊列中。此時你在新分支輸入的問題會被追加到繼承隊列之後,導致子會話的第一回合優先運行父會話的舊問題,你剛輸入的問題看起來“消失”了。這個插件通過宿主機端 bundle 實現,無需修改核心代碼。

插件信息

  • 名稱: dsh-branch-inbox-guard
  • 功能: 移除 fork 子會話從父會話繼承的已排隊提示詞,使新分支優先執行你輸入的內容。
  • 維護者: xine2009cn
  • 許可證: MIT

核心功能

插件在每次 agent/created 事件觸發時檢查待辦隊列,移除那些插入在會話繼承前綴(seq < session.inheritedEventCount)中的事件。具體行爲如下:

  • 移除繼承項:對於在分叉點之前插入的隊列項,將其作爲 agent/inbox/spliced 取消事件持久化刪除。
  • 保留自有項:對於會話自身生成的事件,保持不變。
  • 支持子代理:支持 fork-context 下的子代理場景,防止其隊列被父級污染。
  • 冪等與保守:不會修改會話歷史,不寫外部文件,且只在確認來源爲父級時才操作。

安裝與啓用

通過 npm 倉庫安裝,無需構建步驟。

dsh plugin --profile web add dsh-branch-inbox-guard

安裝後,重啓 DSH 進程(如 docker restart <container>)並重新加載 Web GUI。插件需要在 profile 的 dsh.profile.bundles 配置中列出,以便在啓動時加載。

典型用法

  1. 在一個會話中排隊一條消息,此時 Agent 正在運行。
  2. 在已完成的回合處分叉出一個新分支。
  3. 檢查新分支的隊列,應已清空繼承的舊消息。
  4. 在新分支輸入一個問題,應立即開始運行,而不是等待父級的舊消息。

日誌驗證:
當插件移除隊列項時,DSH 日誌中會出現如下記錄:

[branch-inbox-guard] session-xxxxxxxx: dropped 5 inherited prompt(s) from its fork parent

兼容性與注意事項

  • 版本兼容:已驗證 DSH 0.1.5-rc.1 和 0.1.5-rc.2。在 DSH 0.1.1-rc.2 上,由於分叉時隊列本就是空的,該插件爲無操作狀態。
  • 無配置:無需任何額外配置。
  • 權限:插件以當前 DSH 進程權限運行,建議安裝前檢查源碼與許可證。

結語

dsh-branch-inbox-guard 提供了一種非侵入式的解決方案,用於修復 DSH 0.1.5 版本中 fork 分支繼承隊列導致的新輸入被阻塞的問題。

  • GitHub: https://github.com/xine2009cn/dsh-branch-inbox-guard
  • DSH 生態目錄: https://www.skillhub.cn/plugins/xine2009cn/dsh-branch-inbox-guard
羽毛球分组比赛记分
小程序二维码

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

小夜