dsh-tauri-notify-webhook:任务异常停止或完成时推送通知到邮件或 pushplus

前言

DSH 桌面终端在任务结束时会在系统层面弹出 Toast 通知。这种通知有两个问题:一是如果窗口在前台,它就是噪音;二是如果你离开了一会儿再回来,Toast 已经消失,且主机只保留最新的 turn/end 记录,导致会话结束后无法追溯。

dsh-tauri-notify-webhook 插件将通知从屏幕上移开,通过邮件(SMTP)或 pushplus 等渠道持久化保存。它只在任务异常停止或完成,且窗口不在前台时触发。

安装与启用

此插件需要 DSH 桌面 shell 和 Node.js >= 22.15.0。

使用以下命令安装:

dsh plugin --profile <name> add github:iuuuuuuuu/dsh-tauri-notify-webhook

安装完成后,必须重启 DSH 才能生效。这是因为 Harness 的加载器缓存机制,以及 hmr.root 默认为空数组,新安装的模块在运行中的宿主进程里不会自动加载。

使用方法

  1. 打开设置,进入「任务推送」页面。
  2. 选择推送渠道(邮件或 pushplus),并填写对应字段。
  3. 点击「发送测试」验证配置是否正确。
  4. 点击「保存」并重启 DSH。

配置字段

  • 邮件 (SMTP):需要填写 SMTP 主机、端口、安全设置(如 TLS/SSL)、发件人、收件人。用户名和密码在某些中继服务器下是可选的。
  • pushplus:填写从 pushplus.plus 获取的 Token,插件会直接向官方 /send 端点发送请求。

功能与触发机制

两种触发条件

插件默认开启两个触发开关:

  • 任务完成:当任务结束原因为 completed 时触发。
  • 任务异常停止:当任务结束原因为 aborted、error、blocked、max-tokens、interrupted 或 forked 时触发。

仅在窗口失去焦点时推送

插件通过监听 document.visibilityState === 'hidden' 来判断。DSH 的 Tauri shell 会将 document.hidden 修补为真实的窗口焦点状态,因此判定逻辑是“窗口不在前台”,而不是“标签页在后台”。

推送决策逻辑

客户端无法直接读取任务的结束原因,因此需要两次交互:

  1. 监听会话列表中 running: true 到 running: false 的状态翻转。
  2. 等待 250ms 的稳定窗口(防止状态闪烁)后,请求 GET /turn-end?sessionId=... 获取宿主记录的原因。
  3. 如果会话状态确认为停止且未再次停止,客户端发起 POST /delivery。宿主会在此时重新读取设置并发送。

整个流程会再次检查插件是否仍处于加载状态,防止重载导致的数据不一致。

配置存储与安全

配置存储

设置文件存储在本地机器的 $DSH_HOME/notify-webhook/settings(默认路径为 ~/.dsh)。

安全性

  • 设置文件通过 Shell 的原子写入 helper 保存,防止写入过程中崩溃导致文件损坏。
  • 宿主路由为回环地址且同源。浏览器配置文件无法读取这些设置,也无法让插件发送邮件。

适用场景与注意事项

  • 仅适用于 DSH 桌面配置文件:此插件依赖 DSH 的 dsh-tauri 和 dsh-tauri-ui 运行时插件,不适用于浏览器配置文件。
  • 窗口在前台时不推送:如果你正在观看会话流,插件会保持静默。
  • 子会话跳过:子代理会话由父任务驱动,插件不会为子会话单独触发推送。

生态链接

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

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

Xiaoye