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 運行時插件,不適用於瀏覽器配置文件。
  • 窗口在前臺時不推送:如果你正在觀看會話流,插件會保持靜默。
  • 子會話跳過:子代理會話由父任務驅動,插件不會爲子會話單獨觸發推送。

生態鏈接

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

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

小夜