在 DeepSeek Harness (DSH) 中,後臺 Job 通常只在任務結束時通知 Agent。對於長期運行的後端服務,錯誤可能在退出前就已經發生。這個插件補充了運行中事件通道。
定位與功能¶
dsh-tool-monitor 是一個由 yoke233 維護的插件,類別爲聯網工具。它允許訂閱已經運行的 Bash 或 PowerShell Job,並在後臺服務出錯時立即向 Agent 投遞事件。該插件不啓動第二個業務進程,保留原始 job_output。
核心功能包括:
* 訂閱已經運行的流式後臺 Job。
* 保留原始 job_output,不啓動第二個業務進程。
* 惰性啓用 tee,避免對 Job 進行不必要的輪詢。
* 支持使用 JavaScript 正則表達式過濾輸出。
* 支持區分大小寫與超時設置。
* 兼容官方 job_* 工具。
安裝與啓用¶
安裝插件到指定的 profile:
dsh plugin --profile web add github:yoke233/dsh-tool-monitor
安裝完成後,啓動或重啓該 profile:
dsh --profile web
典型用法¶
先正常啓動一個後臺服務:
pwsh(command: "npm run dev", run_in_background: true)
終端通常返回 Job ID,例如 → pwsh-1。
再讓 job_monitor 訂閱這個 Job:
{
"job_id": "pwsh-1",
"description": "監聽後端錯誤",
"pattern": "error|fatal|exception"
}
終端返回 Monitor 的 Job ID,例如 → monitor-1。
此時,monitor-1 只訂閱 pwsh-1 的輸出。一旦匹配到指定的正則表達式,插件會向所屬 Agent 投遞會話事件;原服務始終只運行一份。
工作原理¶
插件擴展了 DSH 的 JobRegistry(兼容官方 LocalJobRegistry),複用所有權隔離、等待、取消、完成通知等語義。
- 惰性讀取:Monitor 通過惰性啓用 tee 機制讀取數據,未被訂閱的 Job 保持官方讀取路徑。
- 生命週期:Monitor 本身也是一個普通 Job。
job_list同時顯示目標 Job 和 Monitor。job_output分別讀取目標 Job 的原始輸出和 Monitor 的匹配輸出。job_kill monitor-1只停止訂閱,不會終止目標 Job。- 目標 Job 結束時,關聯 Monitor 自動結束並刷新最後一條不完整輸出行。
工具參數¶
| 參數 | 必填 | 說明 |
|---|---|---|
job_id |
是 | 已有流式後臺 Job 的 id,通常來自帶 run_in_background: true 的 bash 或 pwsh |
description |
是 | 顯示在 Monitor 通知中的簡短說明 |
pattern |
否 | JavaScript 正則表達式,逐完整輸出行匹配 |
case_sensitive |
否 | 是否區分大小寫,默認 false |
timeout_ms |
否 | 訂閱時限;默認持續到目標 Job 結束 |
兼容性與邊界¶
- 輸出格式:支持 Bash 的 LF 與 PowerShell 的 CRLF 輸出。
- Job 類型:只支持公開流式
readOutput()的後臺 Job;不支持非流式後臺 Job。 - 會話隔離:不能跨會話監聽其他 Agent 的 Job,所有權校驗仍由 DSH Registry 執行。
- 持久化:Job 和 Monitor 都是 Host 進程內狀態,不跨 DSH Host 重啓持久化。
- 歷史 Job:插件安裝前創建的歷史 Job 不可補掛監聽。
- 緩衝區:緩衝區按 UTF-8 字節設置上限,發生丟棄時
job_output會顯示明確提示。
總結¶
dsh-tool-monitor 提供了一種輕量級的方案,用於在 DSH Agent 環境中實時捕獲後臺服務的錯誤。通過複用官方 Job 生態,它在不改變原有業務進程邏輯的前提下,增加了運行時監控能力。