dsh-notify: DeepSeek Harness 任务监控通知插件

在 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 仓库。

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

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

小夜