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