前言¶
在 DeepSeek Harness(DSH)里,agent 通常可以等待一段命令或任务完成,但有些工作更适合持续监听:命令一直在输出,日志文件一直在增长,agent 需要在出现关键新行时被唤醒。
dshworks/dsh-watch 解决的是这类问题:它为 DSH agent 提供后台流监听,监听命令输出或文件新行,并以过滤、批量、字节受限的会话内通知唤醒 agent。插件还附带无人值守 daemon host,用于把 watch 挂到长期会话中。
这是什么¶
dshworks/dsh-watch 是 DSH 插件,包名为 @dshworks/dsh-watch,许可证为 MIT,要求 Node >= 20。
它的核心能力是:
- 支持
command和file两种流源 - 监听命令输出或文件新行
- 新行以过滤、批量、字节受限的通知到达
- 支持可选 JavaScript regex 过滤
- 每个 watch 是一等 background job(
kind watch) - 可配合
job_list、job_output、job_kill使用 - 支持 wake budget/token bucket 和 event budget(
max_events) - 支持
autoArmprofile 配置和@dshworks/dsh-watch/daemon无人值守宿主
核心功能¶
两种流源¶
插件支持监听两类来源:
command:监听命令输出file:监听文件新行
命令源通过 shell capability 启动,并继承会话的 sandbox policy 和环境。文件监听从当前末尾开始,不投递既有内容;文件被截断后会从头重启;尚不存在的文件会被持续观察。
过滤、批量与字节限制¶
新行不会逐行无限制地进入会话。插件支持可选的 JavaScript regex 过滤,只有匹配的行会进入通知。通知本身也是批量、字节受限的,用于控制进入 agent 会话的内容量。
插件还提供一组配置上限,包括每 owner 的 armed-watch cap、notice 字节上限、backlog 预算等。
作为 background job 管理¶
每个 watch 都是一等 background job,kind 为 watch。因此可以使用 DSH 标准的 job 管理接口:
job_listjob_outputjob_kill
安装与启用¶
安装命令如下:
dsh plugin --profile web add @dshworks/dsh-watch
dsh plugin 会转发到 pnpm,因此 pnpm 必须位于 PATH。
典型用法¶
监听命令输出¶
下面的示例监听 npm run dev 的输出,并只关注包含 error、warn 或 Ready 的行:
watch(source: "command", command: "npm run dev", pattern: "error|warn|Ready", label: "dev")
监听文件新行¶
下面的示例监听日志文件的新行,并只关注 ERROR 或 FATAL:
watch(source: "file", path: "/var/log/app.log", pattern: "ERROR|FATAL")
无人值守运行¶
插件支持在 profile config 中声明 wakeRefillMs 和 autoArm 的 standing watches,并可使用 @dshworks/dsh-watch/daemon 作为无人值守宿主。
一个可用的运行方式是:
dsh plugin --profile watcher add @dshworks/dsh-watch
dsh --profile watcher | tee -a watcher.log
适用场景与注意¶
适合需要 agent 在命令输出或文件新行中出现关键信息时醒来的场景,例如开发服务器、日志、长期运行脚本等。
使用前需要注意:
- 插件以当前 dsh 进程权限运行,命令源还会通过 shell capability 启动,并继承会话的 sandbox policy 和环境
- 安装前应检查源码和 MIT 许可证
- 要求 Node >= 20
dsh plugin会转发到 pnpm,因此 pnpm 必须位于 PATH- 文件监听从当前末尾开始,不投递既有内容
- 存在每 owner 的 armed-watch cap、notice 字节上限、backlog 预算等配置上限
链接¶
目录页:https://www.skillhub.cn/plugins/dshworks/dsh-watch
GitHub:https://github.com/dshworks/dsh-watch