在 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 生态,它在不改变原有业务进程逻辑的前提下,增加了运行时监控能力。