← 返回列表
未验证
Claude Code 的 Monitor 工具的即插即用替代品,专为 DeepSeek Harness 打造。
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/14 · 已提供中文文档
综合分
27.9
GitHub 分
27.9
用户评分
—
★ Stars
2
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add AbnerAI/dsh-monitor该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/dsh-agent@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools@deepseek-ai/cordis用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-monitor
Claude Code 的 Monitor 工具的即插即用替代品,专为 DeepSeek Harness 打造。
dsh-monitor 是一个 harness 插件,可在消息源上布设持久化的后台监视器。当有新内容到达时,插件会唤醒所属 agent——将一条来自插件的用户消息投递到会话中,其机制与 Claude Code 的 完全一致。
如果你依赖 Claude Code 的 Monitor 在 shell 空闲时保持对入站消息的响应能力,那么这个插件能在 DeepSeek Harness 中为你提供同样的能力。
工作原理
模型调用 monitor 工具在某个源上布设监视器:
- source: file —— 一个仅追加的 NDJSON 收件箱。新行一旦写入即被投递。
- source: command —— 按间隔重复运行的 shell 命令。自上次运行以来的输出增量会被投递。
每收到一条新消息,插件就会唤醒 agent:
| Agent 状态 | 行为 |
|---|---|
| 空闲 | agent.followup() —— 开启新一轮(对应 Claude Code 的 的 harness 等价物) |
| 忙碌 | agent.inject() —— 将消息排入下一步 |
监视器在会话内持久存在,可按需解除,并在插件卸载时自动拆除。
安装
dsh plugin --profile 是一个轻量的 pnpm 转发器:它在 profile 目录中运行
pnpm ,然后自动将任何声明了 dsh.bundle 的已安装包
添加到 profile 的层栈中。
从 npm 安装
npx @deepseek-ai/dsh@latest plugin --profile web add dsh-monitor
从 git 安装
npx @deepseek-ai/dsh@latest plugin --profile web add https://github.com/AbnerAI/dsh-monitor
从本地目录安装
npx @deepseek-ai/dsh@latest plugin --profile web add /path/to/dsh-monitor
安装本地目录时,请先在包内运行 pnpm install——
link: 安装不会自动解析该包自身的依赖。
手动替代方案:将 dsh-monitor 添加到 profile 的 dsh.profile.bundles,
并通过其 dsh.bundle.patch 声明引入本包的 cordis.patch.yml。
快速开始
让 agent 在一个收件箱文件上布设监视器:
monitor(source="file",
path="/absolute/path/to/inbox.ndjson",
name="my-inbox",
poll_interval_ms=1000)
- path 必须是绝对路径(或以 ~ 开头——插件会展开它)。Node 的 fs 本身不会展开 ~。
- poll_interval_ms 默认为 2000;对于类聊天的收件箱,1000 是一个不错的平衡值。
该工具会返回一个监视器 id,例如 monitor-1。从那时起,写入该文件的每一新行都会自动唤醒 agent。
随时管理监视器:
monitor_list # 列出已布设的监视器(id、source、已投递数量)
monitor_stop(id="monitor-1") # 解除一个
若要监视某个命令不断变化的输出而非文件:
monitor(source="command", command="tail -n 5 /var/log/app.log", poll_interval_ms=5000)
工具
monitor
设置一个持久化监视器。
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| source | "file" \| "command" | 是 | file = 监视一个仅追加的 NDJSON 收件箱;command = 轮询某个 shell 命令的输出 |
| path | string | 当 source 为 file 时必填 | NDJSON 收件箱的路径(绝对路径,或以 ~ 开头) |
| command | string | 当 source 为 command 时必填 | 要轮询的 shell 命令 |
| cwd | string | 否 | 命令的工作目录(默认为进程的 cwd) |
| poll_interval_ms | number | 否 | 轮询间隔,单位为毫秒(默认 2000) |
| name | string | 否 | 用于唤醒消息和 monitor_list 中的简短标签 |
返回一个监视器 id。每条新的 NDJSON 行(或命令输出增量)都会作为插件来源的通知被投递,从而唤醒 agent。
实现说明。 轮询使用普通的全局 setInterval,并通过 ctx.effect 注册清理逻辑——与 dsh-schedule 使用相同的定时器约定。Cordis 的定时器服务 mixin(ctx.setInterval)被有意不使用:它只能从宿主上下文解析,无法从工具执行上下文解析,调用它会抛出 cannot get property "timer" without inject。
monitor_list
列出已设置的监视器及其 id、来源和投递计数。输出为空表示没有设置任何监视器。
monitor_stop
按 id 取消一个监视器。返回它是否仍处于设置状态。
NDJSON 收件箱格式
每一行是一个 JSON 对象;如果存在 content 字段,则投递该字段,否则投递原始行:
json
{"content":"hello","ts":1712345678}
任何仅追加的 NDJSON 文件都可以使用。该格式与消息和通知代理天然契合:代理为每条入站消息追加一条记录,文件上的监视器会在新记录到达时唤醒 agent。这与 Claude Code Monitor 为其自身的收件箱监视器所暴露的契约一致。
要求
- DeepSeek Harness (dsh),带有基于 Cordis 的插件加载器(bundles / cordis.patch.yml)。
- 对等依赖:dsh-agent、dsh-llm、dsh-tools、cordis(由 harness 运行时满足)。
许可证
MIT扫码进群