dsh-tool-monitor:订阅现有 DSH 后台 Job 的事件

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

羽毛球分组比赛记分
小程序二维码

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

小夜