在 DeepSeek Harness (dsh) 的 headless 或后台模式下,任务状态(完成、出错、阻塞等)往往只有进程自己知道,开发者难以第一时间获知智能体的运行结果或遇到的阻碍。dsh-notify 作为一个监控通知插件,将任务状态主动推送到配置的通道上,解决了后台任务不可见的问题。
这是一个为 DeepSeek Harness (dsh) 设计的任务监控通知插件,由 ikashana 维护。它监听任务的生命周期事件,并在特定条件下通过 HTTP webhook、A2A agent、MCP 工具或 Windows 本地语音通知用户。插件采用纯 Node.js 实现,零运行时依赖,免构建,随 dsh 的 bundle patch 机制安装。
核心功能¶
dsh-notify 提供了四种主要的触发机制和四种分发通道:
- turn/end 告警:监听任务完成、出错、阻塞、超出 token 上限等状态。默认仅监听,不发送通知。支持配置监听的
reason.kind白名单,例如排除用户主动取消的aborted状态。多轮作业中,若在冷却窗口(默认 10 秒)内开始新轮次,前一轮通知会被取消,仅报告最终状态。 - 人工确认与超时升级:当触发需要人工确认的对话框或
ask_user_question工具调用时发送通知。若 10 分钟内无确认结果,会通过 SAPI 语音和优先级通道进行升级报警。 - SAPI 语音通知:仅支持 Windows 平台,调用系统语音合成播报通知。通过 PowerShell 的
-EncodedCommand以 UTF-16LE Base64 传输,避免中文乱码。无控制台窗口干扰,后台独立播放。 - 多通道支持:
- HTTP:支持 QQ 机器人、ServerChan、钉钉、企业微信、ntfy 等服务,支持模板渲染和失败重试。
- A2A:单向发送 JSON-RPC 2.0 消息到 A2A 协议 agent,支持 UUID 去重。
- MCP:作为流式 HTTP 通知桥接,支持协议版本握手。
- 零依赖免构建:纯 Node.js 实现,无额外运行时依赖,通过 dsh 的 bundle patch 机制安装。
- 模型主动通知工具:提供
notify工具(默认关闭),允许模型在运行过程中主动向用户推送消息。
安装与启用¶
插件默认为“仅监听,不发送”模式(无 HTTP/A2A/MCP 通道,语音关闭,工具关闭)。安装后需在配置中显式开启通道。
安装命令¶
dsh plugin --profile web add github:ikashana/dsh-notify
headless 模式同样适用,语音和 HTTP/A2A/MCP 通道仍可正常发送。
配置方法¶
插件通过 bundle patch 插入,配置文件为 cordis.patch.yml。由于是替换整个配置对象,需重写保留的键。
- id: notify
config:
http:
channels:
- id: ntfy
url: 'https://ntfy.sh/my-topic'
sapi:
enabled: true
tools:
notify:
enabled: true
配置支持模板变量({{title}}、{{reason}}、{{text}}、{{duration}}、{{timestamp}})。私有配置(包含密钥的 URL)建议放在本地文件并通过 gitignore,仓库中无硬编码密钥。
典型用法¶
- 配置 HTTP 通道:利用 HTTP 模板渲染功能,支持环境变量(
${env:XXX})和凭证(${credential:REF})。 - 启用 SAPI 语音:在 Windows 环境下开启语音通知。
- 模型主动通知:在配置中开启
tools.notify.enabled: true,模型即可调用notify工具推送消息。 - 确认结果上报:设置
notifyDecided: true,在人工确认结束后发送“已确认/已拒绝”等结果。 - 多轮作业:默认情况下,若在冷却窗口(默认 10 秒)内开始新轮次,前一轮通知会被取消,仅报告最终状态。
适用场景与注意¶
- 适用场景:需要长期运行后台任务的开发者,希望实时获知任务成败或阻塞情况;需要通过语音或特定 Webhook 通道进行告警的场景。
- 注意事项:
- 插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证(MIT)。
- 模型主动的
notify消息会绕过turnEnd.includeText隐私开关,以原文形式出现在通知中,默认关闭是为了安全。 - 需要依赖
@deepseek-ai/schemastery。 - SAPI 语音仅支持 Windows。
- 多轮作业默认仅报告最终状态,若需中间状态需调整冷却窗口或配置。
dsh-notify 提供了从状态监听、人工确认到多通道分发的一整套方案。它默认静默,仅在配置后生效,适合追求轻量、零依赖的 DSH 生态用户。更多信息及源码可访问 GitHub 仓库。