dsh-gateway-notify:长任务结束、失败或待审批时推送到手机与群聊

前言

用 DeepSeek Harness(DSH)跑智能体时,一轮对话可能跑几分钟,也可能在工具审批处停住等你点同意。人不在电脑前时,很难知道任务是已经跑完、报错退出,还是卡在审批上。自己写脚本轮询日志成本高,也不如「事件到了就推一条」来得直接。

下面介绍社区插件 dsh-gateway-notify(维护者 YanYunCY,分类:联网工具)。它在 DSH 上报的会话事件上监听,在合适时机向 ntfy、Bark、Gotify、Server酱、飞书、钉钉、企业微信、Telegram 或自定义 webhook 发一条通知。默认不把提示词和回复正文发出去,只带项目目录名、耗时、模型等摘要信息。

该插件由 @magpie-community/gateway-notify(MIT)移植而来,通道实现基本沿用原项目;与 magpie 网关版相比,它直接订阅 DSH 的 session/event 流,并增加了审批等待推送与 env:NAME 引用密钥的方式。

这是什么

dsh-gateway-notify 是 DeepSeek Harness 的 Cordis 插件(npm 包名 dsh-gateway-notify,当前资料中版本为 0.1.0)。源码与说明见 GitHub,社区目录页:SkillHub 插件页。

它解决的是:在 agent 一轮 turn 跑够久后正常结束、任意时长内失败、或审批超时未处理时,主动推送到你配置的通道,便于离开键盘后仍能跟进任务状态。

什么时候会推送

插件按 DSH 事件决定是否发送;同一 session 在 cooldownSeconds 窗口内最多推一次。子 agent 会话(有 parentSession)默认静默,除非打开 subagents: true。

dsh 事件 是否推送
turn/end,原因 completed 或 max-tokens,且本轮运行时间 ≥ minMinutes 推送完成(含耗时与模型)
turn/end,原因 error 推送失败(含错误信息;任意时长,需 errors 为 true)
approval/asked 在 approvalDelaySeconds 内未决定 推送待审批(含工具名)
turn/end,原因 aborted 不推送(用户主动停止)
blocked、interrupted、forked 不推送

安装与依赖

安装前需满足 Node ≥ 24.9(与 dsh 要求一致)。资料中在 dsh 0.2.1-rc.5 下测试过。

在 web profile 下添加插件:

dsh plugin --profile web add dsh-gateway-notify

插件以当前 dsh 进程权限运行;安装前建议自行查看仓库源码与 MIT 许可证(README 中注明含 magpie 与原作者版权行)。

配置

在 $DSH_HOME/profiles/web/cordis.patch.yml 中为 gateway-notify 写入 config。密钥、webhook 等应放在环境变量里,字段写成 env:变量名,避免明文进 profile。

示例(节选多种通道):

# $DSH_HOME/profiles/web/cordis.patch.yml
- id: gateway-notify
  config:
    minMinutes: 3
    channels:
      - type: ntfy
        topic: env:NTFY_TOPIC          # 任意字符串字段都可用 env:NAME
        token: env:NTFY_TOKEN          # 可选,受保护 topic 时使用
      - type: bark
        key: env:BARK_KEY
      - type: feishu
        webhook: env:FEISHU_WEBHOOK
        secret: env:FEISHU_SECRET

常用选项(默认值以 README 为准):

选项 默认 含义
channels [] 推送目标列表
minMinutes 3 仅当 turn 至少运行这么久才推送「正常结束」
cooldownSeconds 30 同一 session 在此秒数内最多一条
errors true 失败 turn 是否推送(可很短)
approvals true 是否推送长时间未处理的审批
approvalDelaySeconds 60 审批等待多久后推送
subagents false 是否为子 agent 会话推送
includeText false 是否在通知中带最终回复开头
maxTextLength 200 includeText 时截取长度
lang en 通知文案语言:en 或 zh

某条通道暂时不用时,可在该 channel 上设 off: true,保留配置但不发送。

支持的通道

type 必填 可选
ntfy topic server(默认 ntfy.sh)、token、priority、tags
bark key server(默认 api.day.app)、group、sound
gotify server、token priority
serverchan key(SCT… 或 sctp…)
feishu webhook secret
dingtalk webhook secret
wecom webhook
telegram token、chatId server
webhook url headers;请求体为 { title, body, event }

每条通道对应一次到你配置的 HTTPS 服务的 POST;README 说明默认不会把数据发到其它地方。

隐私与适用注意

默认推送内容仅包含项目文件夹名、耗时、模型,失败时加上错误信息;除非开启 includeText,否则不包含提示词与完整回复。

适合:本地或远程长时间跑 DSH agent、需要手机或 IM 提醒完成/失败/待审批的开发者。不适合指望「所有 session 变化都通知」的场景——主动停止、blocked 等事件 deliberately 不推。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。本文事实均来自上述仓库 README 与 package 信息;使用前请以仓库最新文档为准。

链接

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

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

小夜