dsh-event-notice:把 DSH 会话事件推到 Ntfy、Gotify 或 Webhook

前言

在 DeepSeek Harness(DSH)里跑长任务时,你往往不能一直盯着浏览器:一轮对话结束、子代理跑完、任务被中止、工具要审批、助手在等你选答案——这些时刻如果只能靠切回标签页才发现,容易耽误后续操作。本插件由社区维护者 sorchk 提供,归类为「联网工具」;它在宿主侧监听会话事件,把摘要式通知发到你自建的 Ntfy、Gotify 或任意 Webhook,正文不包含会话聊天内容,发送失败只记日志,不会打断当前会话或工具执行。

这是什么

dsh-event-notice 是 DSH 的 Cordis bundle 插件,同时包含宿主端(index.js)与 Web 浏览器端(client.js)。当任务完成、子任务完成、任务中断、需要审批、需要回答问题时,按你的配置向外部通道投递通知。插件当前在 npm 上的版本为 0.5.11(资料来自仓库 package.json),依赖 Node >= 20。

仓库地址:https://github.com/sorchk/dsh-event-notice
社区目录页:https://www.skillhub.cn/plugins/sorchk/dsh-event-notice

核心功能

下面按「事件 → 通道 → 隐私」说明能力,均来自官方 README。

会通知哪些事件

通知事件 触发来源 说明
任务完成 task-complete 会话事件 turn/end,结束原因 completed 主会话的一轮任务正常跑完
子任务完成 subtask-complete 子代理会话事件 turn/end,结束原因 completed 子代理(子任务)正常跑完。默认不勾选,需在配置页打开
任务中断 task-interrupted 会话事件 turn/end,结束原因为中止 / 阻塞 / 报错 / 达到 token 上限 附上具体原因;子任务中断也算这一类
需要审批 approval-required 会话事件 approval/asked 附上工具名与审批原因
需要回答问题 question-required 会话事件 tool/call,工具名为 ask_user_question 助手正在等你回答

「任务完成」只管主会话,「子任务完成」只管子代理会话,两者互斥,一条完成事件不会重复通知。

通知正文只包含会话标题、子代理标签、事件细节与工作区名称,不包含会话正文。

三个 outbound 通道

三个通道可同时启用:

  • Gotify:POST <服务器地址>/message?token=<应用令牌>
  • Ntfy:JSON 发布接口,主题放在请求体里,标题含中文也不会破坏请求头
  • Webhook:自定义 HTTP 方法与请求体模板,支持占位符(见下文配置)

Gotify 与 Ntfy 均支持按事件单独设置优先级;Webhook 默认 POST,请求体为 JSON,模板内字符串会按 JSON 字面量转义。

权限与隐私

插件只监听会话事件,不读取会话正文;只向你在配置页填写的服务器地址发起请求。Gotify 应用令牌与 Ntfy 访问令牌写入 DSH 凭据存储(~/.dsh/.credentials.yaml),不随设置明文落盘。

安装与启用

插件通过 dsh plugin 装到指定 profile,命令参数会原样交给 pnpm,实际在 ~/.dsh/profiles/<profile>/ 下执行 pnpm add。

Web 版常用安装方式如下(以下为 README 原文命令,勿自行拼接其它写法):

# 默认分支(main)的最新提交
dsh plugin --profile web add github:sorchk/dsh-event-notice

# 固定到某个 tag
dsh plugin --profile web add github:sorchk/dsh-event-notice#v0.5.10

# 固定到某个 commit
dsh plugin --profile web add github:sorchk/dsh-event-notice#c30f562

也接受完整 Git 地址:

dsh plugin --profile web add https://github.com/sorchk/dsh-event-notice.git
dsh plugin --profile web add git+ssh://git@github.com/sorchk/dsh-event-notice.git
事项 说明
--profile web 装到哪个 profile;各 profile 的插件互不相通
自动启用 安装成功后 DSH 会把插件追加到该 profile package.json 的 dsh.profile.bundles,无需手改
生效时机 需重启该 profile 的 DSH 进程(网页界面)后才会加载
卸载 dsh plugin --profile web remove dsh-event-notice
更新 dsh plugin --profile web update dsh-event-notice

若 pnpm 拦截依赖的构建脚本,可按提示在 ~/.dsh/profiles/<profile>/pnpm-workspace.yaml 的 allowBuilds 下增加对应键(例如 dsh-event-notice: true)后重跑安装命令。

安装完成后,Web GUI 中会出现「插件 → 事件通知」配置页;设置弹窗左侧(「侧边卡片」之后)另有「事件通知」入口;会话输入框模型选择器左侧有铃铛按钮,用于单独开关当前会话的通知。

典型用法

1. 在配置页接通通道

路径:设置 → 事件通知 或 插件 → 事件通知。配置即改即生效。

通用项要点:

  • 启用通知:总开关,默认开
  • 所有会话默认通知:默认关;单会话覆盖优先
  • 默认通知的事件:除「子任务完成」外四项默认开
  • 通知标题前缀:默认 DSH,标题形如 DSH · 任务完成
  • 请求超时(毫秒):默认 10000

Gotify:填服务器地址(如 https://gotify.example.com);应用令牌经凭据引用名 DSH_EVENT_NOTICE_GOTIFY_TOKEN 写入凭据存储,配置页「应用令牌」留空表示保持原值。

Ntfy:填服务器地址与主题(默认 dsh);访问令牌引用名 DSH_EVENT_NOTICE_NTFY_TOKEN;匿名服务器可留空令牌。

Webhook:填完整地址;默认可用下列占位符:{{event}} {{title}} {{message}} {{sessionId}} {{sessionTitle}} {{parentTitle}} {{workspace}} {{cwd}} {{detail}} {{timestamp}}。

README 中一种常见优先级搭配示例如下(可按自己习惯调整):

事件 Ntfy Gotify
任务完成 3 default 5
子任务完成 3 default 5
任务中断 4 high 8
需要审批 5 max 9
需要回答问题 5 max 9

2. 单会话快速开关

输入框左侧铃铛按钮表示该会话实际生效状态:无小圆点表示跟随「所有会话默认通知」;有小圆点表示本会话已单独改过。点按在「跟随默认 / 关」之间切换;与全局默认一致时会删除覆盖记录。

也可在配置页「会话级覆盖」卡片中管理已设覆盖的会话,或直接改设置里的 sessionOverrides。

3. 发送测试通知

配置页上的「发送测试通知」会对每个已启用且配置完整的通道各发一条。请求走 DSH Web 上的本地路由 POST /dsh-event-notice/test,仅接受与 Host 一致的同源请求。

4. 载荷长什么样

Webhook 默认请求体示例(README):

{
  "event": "task-complete",
  "title": "DSH · 任务完成",
  "message": "会话标题:收到\n任务正常完成\n工作区:dsh-event-notice",
  "sessionId": "session-…",
  "sessionTitle": "收到",
  "parentTitle": "",
  "timestamp": "2026-11-08T06:12:25.603Z"
}

子代理完成时 sessionTitle / parentTitle 字段会体现子代理标签与主会话标题;开启「子任务完成」后,event 为 subtask-complete。正文中的「工作区」是侧边栏工作区显示名,不是 cwd 路径(workspace、cwd 主要供 Webhook 模板占位符使用)。

适用场景与注意

适合需要在手机或桌面推送客户端(Ntfy / Gotify)或自建自动化(Webhook)里感知 DSH 运行状态的用户,例如长时间 Agent 任务、多子代理并行、审批敏感工具调用等。

安装前建议自行阅读仓库源码与许可证;插件以当前 DSH 进程的权限运行,向外发起的 HTTP 请求目标完全由你填写。社区目录站 SkillHub 与 DeepSeek / 幻方无官方从属关系,DSH 生态遵循「一切皆插件」的扩展方式,本插件属于其中的联网工具类。

推送 tag v* 时仓库 CI 可将版本发布到 npm(registry.npmjs.org);若你更习惯包管理器版本钉死,可使用 dsh plugin ... add github:sorchk/dsh-event-notice#v0.5.10 等形式固定 tag。

结尾

dsh-event-notice 把 DSH 里几类关键会话事件收敛成不含聊天正文的出站通知,并支持 Ntfy、Gotify、Webhook 三路并行与会话级铃铛开关。若要查阅维护说明与完整配置表,请以 GitHub README 为准。

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

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

Xiaoye