前言¶
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 默认为空数组,新安装的模块在运行中的宿主进程里不会自动加载。
使用方法¶
- 打开设置,进入「任务推送」页面。
- 选择推送渠道(邮件或 pushplus),并填写对应字段。
- 点击「发送测试」验证配置是否正确。
- 点击「保存」并重启 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 修补为真实的窗口焦点状态,因此判定逻辑是“窗口不在前台”,而不是“标签页在后台”。
推送决策逻辑¶
客户端无法直接读取任务的结束原因,因此需要两次交互:
- 监听会话列表中
running: true到running: false的状态翻转。 - 等待 250ms 的稳定窗口(防止状态闪烁)后,请求
GET /turn-end?sessionId=...获取宿主记录的原因。 - 如果会话状态确认为停止且未再次停止,客户端发起
POST /delivery。宿主会在此时重新读取设置并发送。
整个流程会再次检查插件是否仍处于加载状态,防止重载导致的数据不一致。
配置存储与安全¶
配置存储¶
设置文件存储在本地机器的 $DSH_HOME/notify-webhook/settings(默认路径为 ~/.dsh)。
安全性¶
- 设置文件通过 Shell 的原子写入 helper 保存,防止写入过程中崩溃导致文件损坏。
- 宿主路由为回环地址且同源。浏览器配置文件无法读取这些设置,也无法让插件发送邮件。
适用场景与注意事项¶
- 仅适用于 DSH 桌面配置文件:此插件依赖 DSH 的
dsh-tauri和dsh-tauri-ui运行时插件,不适用于浏览器配置文件。 - 窗口在前台时不推送:如果你正在观看会话流,插件会保持静默。
- 子会话跳过:子代理会话由父任务驱动,插件不会为子会话单独触发推送。