前言¶
在 DeepSeek Harness(DSH)的工作流中,分叉(Fork)會話是一個常用操作。當源會話處於運行狀態或存在排隊消息時,如果直接進行分叉,子會話會繼承源會話的待領提示詞。這導致子會話優先執行源會話遺留的命令,而你剛剛發送的新提示詞被推遲到下一輪。這不僅造成指令重複執行,還打亂了預期的對話流程。
dsh-fork-inbox-guard 是一個 Host 插件,它通過清理分叉後繼承的待領消息隊列,確保子會話的第一次交互直接響應當前發送的提示詞。
核心功能¶
- 丟棄繼承消息:在創建子會話時,移除從源會話繼承來的待領提示詞。
- 優先響應新提示:保證子會話的第一個回合回答的是你當前發送的消息。
- 日誌記錄:將被丟棄的消息標記爲
outcome: canceled,保留agent/inbox/spliced事件記錄。 - 入口覆蓋:攔截側邊欄的 Fork 會話入口以及消息菜單的 Branch 入口,防止誤操作導致繼承舊隊列。
安裝與啓用¶
在插件目錄下執行以下命令進行安裝:
dsh plugin --profile web add "link:$(pwd)"
安裝完成後重啓 dsh web 服務。卸載時使用:
dsh plugin --profile web remove dsh-fork-inbox-guard
本插件僅修改 Host 半區邏輯,不註冊 Client 模塊,因此不需要重新構建前端。
典型用法¶
插件生效後,可以通過子會話的日誌確認行爲。在分叉出的會話日誌中查找 agent/inbox/spliced 事件,其 outcome 字段應爲 canceled,且 removedCount 爲 1。這條記錄對應的是被丟棄的繼承消息,隨後的 user/message 事件則是你新發送的提示詞。
插件本身會輸出一條日誌信息,表明丟棄了某個帶種子會話的待領 Inbox:
fork-inbox-guard: dropped the pending inbox of seeded session "session-xxxx"
默認的 web profile 未安裝控制台日誌插件,該信息不會顯示在終端。若需在終端查看,需要掛載 @deepseek-ai/cordis-plugin-logger-console。
適用場景與注意¶
- 生效範圍:僅對新建的子會話生效,不會反向修復已經建立的歷史會話。
- Fork 算法:不修改 Harness 內部的 fork 切點算法,因此子會話日誌中仍會先出現源會話的 insert 事件,緊接着纔是 canceled 的 splice 事件。
- API 依賴:依賴 Harness 的公開 API(在 1.0 之前版本不保證穩定),升級 DSH 後建議重跑
just test。 - 衝突處理:上游如果在 fork 時直接清空了子會話的 inbox,本插件檢測到空隊列時會跳過操作,不會產生衝突。
- Resume 與無 Seed:
resume操作不受影響;對於沒有新 seed 的新會話,插件也不會進行干預。
短結尾¶
該插件通過清理繼承隊列,解決了 Fork 操作中指令錯位和重複執行的問題,適合需要精細化控制會話繼承行爲的場景。