给数据流挂一个监听。它说话,agent 就醒 —— 哪怕正在空闲,哪怕现场没有人。
31.5/100
综合分
2
GitHub 星标
84
npm 周下载
—/5
用户评分
数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @dshworks/dsh-watchnpm 源 · @dshworks/dsh-watch 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@dshworks/dsh-watch @ 0.2.3
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 04:17:14
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 8 处,展示前 8 条)
- 读取本地文件lib/index.js:337
cursor = statSync(path).size - 读取本地文件lib/index.js:363
size = statSync(path).size - 读取密钥环境变量recipes/ecosystem-watcher/feed.mjs:22
const token = process.env.GITHUB_TOKEN - 读取本地文件recipes/ecosystem-watcher/feed.mjs:34
return JSON.parse(readFileSync(statePath, 'utf8')).seen ?? [] - 写入本地文件recipes/ecosystem-watcher/feed.mjs:44
writeFileSync(tmp, JSON.stringify({ seen: [...seen], updated: new Date().toISOString() })) - 写入本地文件recipes/ecosystem-watcher/feed.mjs:45
renameSync(tmp, statePath) - 请求外部主机api.github.comrecipes/ecosystem-watcher/feed.mjs:60
res = await fetch(`https://api.github.com${path}`, { - 发起网络请求recipes/ecosystem-watcher/feed.mjs:60
res = await fetch(`https://api.github.com${path}`, {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:api.github.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 监听数据流新行
- 唤醒智能体
- 无人值守长期运行
给数据流加监视:后台监听器在有新匹配行时唤醒 DeepSeek Harness 智能体,还有守护进程宿主让监视器无人值守跑上数周,无需任务、无需浏览器。与 DeepSeek 无隶属关系。
最近更新
在 GitHub 查看全部 →v0.1.12026-08-15
在 0.1.0-rc.6 上用 DeepSeek-V4-Pro 跑真实的 dsh --profile web 会话,端到端验证通过:布下一个监视 → 不匹配的行保持静默 → 匹配的行用一条限定长度的通知唤醒空闲智能体 → job_kill watch-1 通过内置 jobs 接口解除监视 → 解除后追加的内容保持静默。
为什么从 v0.1.0 升级:
· 布防不漏:如果任务注册表在生产方已经启动轮询器之后拒绝某个监视,轮询器会在错误抛出前被拆掉(JobStart 清理约定),并配有回归测试——共 50 个测试。
· CI:GitHub Actions 在每次 push 和 PR 时跑语法检查 + 完整测试套件;README 里有徽章。
· 打包更干净(清掉了多余的 pnpm-workspace.yaml 残留文件,esbuild 通过 pnpm.onlyBuiltDependencies 声明),工具调用展示标题也更清晰。
安装:dsh plugin --profile web add github:dshworks/dsh-watch(PATH 里要有 pnpm——感谢 @groksense 在 #1 里修好文档)。
🤖 由 Claude Code 生成
v0.1.02026-08-15
DeepSeek Harness 版的 Claude Code Monitor 工具:给长时间运行的命令或不断增长的文件挂一个后台监视,有新匹配行就唤醒你,按批合并、有预算上限,监视本身是一等后台任务(job_list / job_output / job_kill)。
为什么需要它:自带的任务子系统只在后台任务结束时通知你。监视则是在它「说话」时通知你——开发服务器打出 Ready、CI 日志打出 FAILED、日志文件在变大。
60 秒上手:dsh plugin --profile web add github:dshworks/dsh-watch,重启配置档,然后 watch(source: "command", command: "npm run dev", pattern: "error|Ready")。
49 个测试覆盖跨数据块边界的行拼接、多字节安全的字节上限、批处理、过滤、唤醒/事件预算、截断的如实上报和清理。纯 ESM——安装时不构建任何东西。
🤖 由 Claude Code 生成
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-watch
给数据流挂一个监听。它说话,agent 就醒 —— 哪怕正在空闲,哪怕现场没有人。
自带的 jobs 子系统只说任务结束了。dsh-watch 说有东西开口了:给长跑命令或持续增长的文件挂一个监听器,新出现的行经过滤、合批、字节封顶后,作为会话内通知送达。
然后把人撤掉。把监听写进 profile 配置、挂上 daemon,agent 就会开机自启、空闲时零成本静默、连续数周被数据流唤醒。
安装
dsh plugin --profile web add @dshworks/dsh-watch
dsh --profile web
dsh plugin 会转发给 pnpm,所以 PATH 里要有 pnpm。除此之外不需要配置 ——下一个会话里 watch 工具就可用了。
需要 dsh 0.1.7 或更新(0.1.7 与 0.2.0 两条线)。dsh 在安装前会先检查插件的 harness peer 范围,所以更旧的宿主会直接拒装,而不是加载一个按另一套 API 写的插件。
展开完整文档(README 剩余 1 节)
dsh-watch
给数据流挂一个监听。它说话,agent 就醒 —— 哪怕正在空闲,哪怕现场没有人。
自带的 jobs 子系统只说任务结束了。dsh-watch 说有东西开口了:给长跑命令或持续增长的文件挂一个监听器,新出现的行经过滤、合批、字节封顶后,作为会话内通知送达。
然后把人撤掉。把监听写进 profile 配置、挂上 daemon,agent 就会开机自启、空闲时零成本静默、连续数周被数据流唤醒。
安装
dsh plugin --profile web add @dshworks/dsh-watch
dsh --profile web
dsh plugin 会转发给 pnpm,所以 PATH 里要有 pnpm。除此之外不需要配置 ——下一个会话里 watch 工具就可用了。
需要 dsh 0.1.7 或更新(0.1.7 与 0.2.0 两条线)。dsh 在安装前会先检查插件的 harness peer 范围,所以更旧的宿主会直接拒装,而不是加载一个按另一套 API 写的插件。
工具本体
watch(source: "command", command: "npm run dev", pattern: "error|warn|Ready", label: "dev")
→ Watch armed (watch-1) on command: npm run dev.
…agent 继续干自己的活。当 dev server 打出 "Ready in 130ms",一条通知把它唤醒: [watch dev · watch-1] 1 line: Ready in 130ms
也可以盯文件:
watch(source: "file", path: "/var/log/app.log", pattern: "ERROR|FATAL")
每个监听都是一等公民后台任务(kind 为 watch),因此标准接口原样适用: job_list 列出已布防的监听,job_output 读出某个监听听到的行,job_kill 撤防,归属按会话隔离,结束时走普通的完成通知。这个插件只增加"听"这件事 ——没有第二套生命周期,也没有第二个注册表。
| 行为 | 细节 |
| 数据源 | command(经 shell 能力启动一次,继承会话的沙箱策略与环境变量)· file(从当前末尾开始跟踪;已有内容一律不投递;被截断则从头重来;文件还不存在也可以先等着) |
| 合批 | 一个 tick 内听到的所有行共用一条通知 —— 爆发式输出只花一次唤醒,而不是每行一次 |
| 过滤 | 可选的 JavaScript 正则,只投递命中的行。失败特征也要写进去 —— 没声音不等于没问题 |
| 唤醒预算 | 每个 owner 一个令牌桶:先允许 maxConsecutiveWakes 次连发,之后每 wakeRefillMs 回一个额度。用户消息被领取时直接加满 |
| 事件预算 | 每个监听在 max_events 条通知后自行撤防并以 completed 结束;填 0 表示一直听下去 |
| 字节上限 | 每条完整通知按 UTF-8 安全截断(含包装文本);听到的行同时写进任务的输出环,job_output 读的就是它 —— 保留多少由注册表限定,丢了字节的读取会被标记出来 |
| 截断诚实 | 上游输出丢失(lossy 读)会作为标记行暴露出来,绝不吞掉 |
| 生命周期 | 进程退出时先冲刷尾部再结算:completed(退出码 0)、failed(非零 —— 监听死了是一个发现,不是一段沉默)、killed(信号或撤防)。插件卸载会拆掉所有监听 |
| 上限 | 每个 owner 的布防数量上限,超了就让这次调用明确失败 |
无人值守运行
一个连续盯一个月生态的 agent,不是一场对话。有两件事必须改,而两件都已在包里。
它不能变聋。 唤醒预算的存在,是为了不让一个失控的数据源把空闲 agent 无限循环唤醒。
"数连续唤醒次数、等下一条人类消息回血"这条规则,对有人坐在旁边的会话是对的 ——对没人的会话就是一扇单向门:额度用完之后,每条通知都被注入到一个再也不会被唤醒的空闲 agent 里。所以预算改成了令牌桶:额度随时间回来(wakeRefillMs,默认 60 秒),而在桶空时到达的通知,会在额度回来的那一刻拿到一次补课唤醒。想要严格的 dsh-tool-jobs 语义,把 wakeRefillMs 设为 0。
得有人去布防,也得有人让进程活着。 dsh --profile headless 跑完一个任务到静默就退出;dsh --profile web 常驻,但要等浏览器里的人。于是 autoArm 把监听声明进 profile 配置 —— 在 agent/created 时为根会话布防,并且走工具注册表,因此它要过的守卫、审批策略、沙箱和 shell 环境,跟模型自己发起的调用完全一致 ——而 @dshworks/dsh-watch/daemon 是一个约 90 行的宿主:创建一个 agent、注入一份常驻简报、把进程撑住,并把每个活动区间的收尾文本按 ISO 时间戳写到 stdout 作为运维日志。
~/.dsh/profiles/watcher/cordis.patch.yml
- id: dsh-watch
config:
wakeRefillMs: 300000
autoArm:
- source: command
command: node recipes/ecosystem-watcher/feed.mjs --topic dsh-plugin
pattern: '"kind":"new-repo"'
label: ecosystem
max_events: 0 # 会自己撤防的监听,算不上监听
- insert:
- id: dsh-watch-daemon
name: '@dshworks/dsh-watch/daemon'
config:
brief: >-
You are the ecosystem watcher. A standing watch named "ecosystem"
is armed on a feed of newly published repositories. For each one,
decide whether there is an idea worth keeping, and append it to
data/ideas.ndjson.
dsh plugin --profile watcher add @dshworks/dsh-watch
dsh --profile watcher | tee -a watcher.log
recipes/ecosystem-watcher/ 里是完整的一套,包含一个按创建时间轮询 GitHub topic、对每个没见过的仓库输出一行 NDJSON 的 feed。
实测
2026-08-15 的一次真实运行,DeepSeek-V4-Pro,会话里没有人。feed 找到 53 个新发布的
dsh 仓库;watcher 被唤醒、读完、留下 11 个,并说明了另外 42 个为什么被放掉:
2026-08-15T16:21:23Z up — session 36041f74 2026-08-15T16:25:11Z Batch of 53 repos processed. Appended 11 ideas to data/ideas.ndjson
{"repo":"liustack/modlens","why":"Pasting an image and receiving structured JSON evidence
(OCR, layout, semantics) gives text-only DSH models vision without a vision model.",
"for":"awesome-dsh-plugins"}
这次运行还顺带换来一个 bug 修复:注入给忙碌 owner 的通知会在它的下一步被领取,所以把它们算作"欠一次补课唤醒",就会多出一次唤醒,而那次唤醒的全部内容是 "你有排队的通知" —— 说的却是已经回答过的通知。改成在 agent/inbox/claimed 时清零,并补了一个回归测试守住。
配置
每一项边界都是经过校验的 Config 字段,不是写死的常量。
| 字段 | 默认值 | 含义 |
| pollIntervalMs | 300 | 轮询节奏,同时也是合批窗口 |
| maxNoticeBytes | 4096 | 单条完整通知(含头部)的 UTF-8 字节上限 |
| maxConsecutiveWakes | 3 | 每个 owner 的唤醒额度桶容量 |
| wakeRefillMs | 60000 | 回一个额度所需的毫秒数;0 表示不按时间回血 |
| defaultMaxEvents | 50 | 每个监听的通知预算;0 表示不限 |
| maxListenersPerOwner | 8 | 每个 agent 的布防数量上限 |
| autoArm | [] | 启动时为根会话布防的常驻监听 |
daemon 自己的配置是 brief(必填)、flushIntervalMs(300000)和 journal(true)。
Model Experience
系统提示词
一段(order 107,排在后台任务指引之后):
You can arm a watch on a stream with the watch tool: it listens in the background and wakes you when new matching lines arrive, so never busy-poll a source you already listen to. Listeners are background jobs — job_list shows them, job_output reads a listener's heard-line backlog, job_kill disarms one.
配置了 autoArm 时,会追加第二段(order 108)列出常驻监听的名字,免得模型把已经有的东西再布防一遍。
工具
只有一个工具 watch(source、command/path、workdir、pattern、max_events、label)。
撤防、列表、读取都复用自带的 job_kill / job_list / job_output。
Token 影响
安静的数据源不花 token —— 轮询发生在宿主侧。每条通知是一条有字节上限的消息(≤ maxNoticeBytes);空闲唤醒还要额外付它开启的那次模型请求,这正是唤醒需要预算的原因。
依赖要求
- jobs 子系统:@deepseek-ai/dsh-jobs、dsh-jobs-local、dsh-tool-jobs ——都在 dsh-base 里,因此 web 与 headless 标准 profile 都自带。
没有挂上 job 控制器时,布防会明确失败。
- source: command 还需要 shell 能力(@deepseek-ai/dsh-shell 加一个 provider)。
文件源不需要。
- daemon 另外需要 agents、sessions、agentDefaultModel —— 同样在 dsh-base。
开发
pnpm install && pnpm test # 91 个测试
lib/ 里是纯 ESM JavaScript —— 安装时不构建任何东西,所以用 git 装不会碰到 allowBuilds。(开发安装会:vitest 会拉 esbuild,在 pnpm-workspace.yaml 里放行—— pnpm ≥ 11 从那里读构建设置,package.json 里的 pnpm 字段会被静默忽略。)
除了测试套件,涉及 harness 的发布都会在真实 dsh 上跑一遍:用 dsh plugin add 装进一个临时 DSH_HOME,再作为无人值守的监听者启动。0.2.3(2026-09-29,deepseek-flash,
dsh 0.1.7-rc.2 与 0.2.0-rc.1)验证了:
- 常驻监听在 agent/created 时布防
- 文件通知唤醒空闲 agent,job_output 读回那一行
- 命令监听在布防 150 秒后才出声,越过了执行器默认两分钟的期限
- job_kill 撤防
- 每条通知都以 dsh-watch 来源 kind 写进 v4 会话日志
node scripts/check-dsh-release.mjs 每天对 dsh latest(以及仅作提示的 next)重复安装这一半。dsh 的兼容性闸门拒装插件,或者插件把宿主已经提供的包带进 profile (它会为 profile 里的每个插件遮住宿主那一份)时,检查就会失败。
测试替身按 peer 范围写明的 harness 版本建模,每次移植都做变异检查:把上一版的调用放回去,测试套件必须变红。在 0.1.7 上,为 0.1.5 写的替身在六处真实断裂下仍然全绿。
与邻居的关系
- 自带的 dsh-tool-jobs 在任务完成时通知;dsh-watch 在运行期间有输出时通知。
同一套唤醒机制,互补的两个时刻。
- yoke233/dsh-tool-monitor
通过分流输出来订阅已经在跑的 bash/pwsh 任务。想盯一个你已经启动的任务用它;想布一个带合批和预算的专门监听(或盯文件)用 dsh-watch。
- AbnerAI/dsh-monitor
反复重跑一个命令、或轮询 NDJSON 收件箱,逐行唤醒 agent。dsh-watch 的不同在于:命令只启动一次并按流处理、按 tick 合批、给唤醒和事件都上预算、每条通知都有字节上限、活在 jobs 子系统内部,以及自带一个无人值守宿主。
已知限制与未做的事
- 是轮询,不是 inotify/kqueue:低于 pollIntervalMs 的延迟不在范围内, tick 本身就是设计中的合批窗口。
- 每个监听只有一个正则;多种特征用或来覆盖(error|Traceback|FAILED)。
- 命令源的 stderr 混在 shell provider 的标记段落里,不是一条单独可过滤的通道。
- 重启后不会自动恢复:监听与它的会话同生共死。重启后的 daemon 会开一个新会话并按 autoArm 重新布防,而不是接着上一个会话。
- 补课扫描挂在监听的 tick 上,所以一个 owner 如果所有监听都被撤防了,排队的通知会一直留到有别的东西唤醒它为止。
许可
MIT。与 DeepSeek 无隶属关系。已登记在 awesome-dsh-plugins。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dshworks/dsh-watch
给数据流挂一个监听。它说话,agent 就醒 —— 哪怕正在空闲,哪怕现场没有人。
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4