前言¶
在 DeepSeek Harness (DSH) 中,利用 run_in_background 啓動後臺子 agent 是常見的開發模式。然而,後臺子 agent 完成時的通知或彙報消息,往往會在父會話仍處於忙碌狀態(如正在生成回覆或調用工具)時直接進入收件箱或顯示在界面上。這會導致消息混入正在進行的回合,或者提前打斷用戶的注意力。
@momojie-s/dsh-subagent-idle-delivery 解決了這個問題。它通過“掛起並釋放”(hold-and-release)機制,攔截後臺子 agent 的完成通知,直到父會話完全空閒後,纔將這些消息作爲新的對話回合投遞。
插件簡介¶
這是一個 DSH 插件,由開發者 Momojie-S 維護。
其核心邏輯是攔截後臺子 agent 的完成通知,並在父會話空閒時投遞。掛載後無需任何額外操作即可生效。它支持攔截 subagent-settled(後臺子 agent 結算通知)、subagent-report(舊版彙報工具)和 agent-message(新版 send_message 回覆)等類型。
安裝與啓用¶
通過命令行安裝插件:
dsh plugin --profile web add github:Momojie-s/dsh-subagent-idle-delivery
首次安裝時,如果使用 pnpm,可能需要在 profile 目錄下的 pnpm-workspace.yaml 文件中添加 allowBuilds 授權構建。安裝完成後重啓 DSH 以生效。
配置項¶
插件支持通過 patch config 字段進行擴展配置。
| 字段 | 類型 | 默認值 | 說明 |
|---|---|---|---|
heldKinds |
string[] | ['subagent-settled', 'subagent-report', 'agent-message'] |
指定需要攔截的 source.kind 列表。擴展前需確認該類型的全部來源,以免誤攔審批或任務完成通知。 |
maxHoldMs |
number | 600000 |
放水閥時限。如果扣留時間超過該毫秒數仍未進入空閒狀態,消息將以“排隊到當前回合之後”的方式釋放。設爲 0 可嚴格扣留到空閒,但慎用(連續驅動的 goal 會話可能長期不空閒)。 |
驗證與使用場景¶
典型用法:
讓模型起一個後臺子 agent(使用 run_in_background),同時父會話繼續執行當前任務。
驗證步驟:
1. 啓動後臺子 agent。
2. 觀察日誌,應出現 holding N notice(s) ... until idle,表示消息已被攔截。
3. 此時界面不應出現子 agent 的彙報消息。
4. 完成父會話當前回合的工作。
5. 子 agent 的彙報作爲新回合出現在歷史記錄中,日誌顯示 released ... (idle)。
注意事項¶
- 環境依賴:插件依賴 DSH 版本
>= 0.1.0-rc.7。 - 類型變更:默認攔截
agent-message類型(在 DSHrc.1steer 統一後,此類消息取代了舊的 report 工具)。 - 權限:本插件以當前 DSH 進程權限運行,安裝前請檢查源碼與許可證。