在 DeepSeek Harness (dsh) 中進行智能體開發或任務編排時,經常需要關注任務狀態或等待人工確認。當窗口被遮擋或在其他應用中工作時,很容易錯過這些關鍵節點。dsh-notifier 插件通過調用操作系統的原生通知能力,將任務完成和審批請求直接推送到桌面,從而解決這個問題。
是什麼¶
dsh-notifier 是 DeepSeek Harness (dsh) 的一個系統通知插件。它由 YZz-S 維護,採用 MIT 許可證。該插件主要解決“任務執行狀態不直觀”和“審批流程易遺漏”的問題,確保開發者或用戶在切換窗口時也能及時獲取 DSH 的狀態變化。
核心功能¶
-
任務完成通知
當頂層會話從running狀態變回idle(即一個回合結束)時,插件會發送“Task completed(任務已完成)”的通知。插件使用agents.roots()來識別頂層會話,避免子代理結束時的通知刷屏。 -
審批與輸入通知
當觸發審批(approval/request)或需要頁面內手動輸入時,插件發送“Action required(需要確認)”的通知,並在正文中包含觸發該請求的工具名稱和原因。 -
不干擾審批流程
插件的通知邏輯透明地通過 waterfall 的next()傳遞,不會回答或改變審批結果,完全不影響原有的審批流程。 -
跨平臺支持
* Windows:支持 WinRT Toast,失敗時降級爲氣泡通知。
* macOS:調用osascript執行display notification。
* Linux:使用notify-send。 -
DeepSeek Harness 品牌標識
在 Windows 平臺上,插件會註冊一個自定義的 AppUserModelID(DeepSeekHarness.Notify),這樣系統顯示的通知來源應用名和圖標即爲“DeepSeek Harness”。
安裝與啓用¶
安裝該插件需要使用 DSH 的命令行工具。
dsh plugin --profile web add github:YZz-S/dsh-notifier
安裝後,只要 dsh 進程在運行,任務完成或需要人工確認時系統通知會自動彈出。該插件爲純 Host 插件,無需刷新頁面即可生效。
典型用法¶
根據使用場景的不同,有兩種啓用方式。
方式一:動態 Cordis 插件(臨時運行)¶
這種方式適合在開發調試時臨時啓用,生命週期綁定在當前 dsh 進程。
- 在 dsh Web GUI 的 Cordis 工具中調用
cordis_define,將host.js的內容粘貼到code.host字段。參數需設置爲plugin.kind: 'new',idPrefix取 3-6 個小寫字母。 - 調用
cordis_run激活插件。 - 下一次任務完成或觸發審批時,系統通知會彈出。
注意:動態插件的生命週期與當前 dsh 進程相同。重啓 dsh 後必須重新定義並運行。
方式二:安裝爲正式插件(推薦)¶
使用上方提供的安裝命令將其安裝爲正式插件,無需每次手動定義。
工作原理¶
插件通過 subprocess.spawn 調用操作系統的原生命令來發送通知。命令探測順序爲:
1. Windows:優先使用 PowerShell 調用 WinRT Toast(帶自定義 AppUserModelID),失敗則降級爲氣泡通知。
2. macOS:調用 osascript。
3. Linux:調用 notify-send。
標題固定爲“DeepSeek Harness”,正文顯示“會話標題”+ 狀態。爲了防止通知過多,插件僅在檢測到頂層會話(通過 agents.roots())從 running 變爲 idle 時才發送任務完成通知。
隱私與注意事項¶
-
隱私
* 僅在 HKCU 註冊 AppUserModelID 用於顯示來源名稱和圖標。
* 不進行文件寫入、遙測或持久化存儲。
* 不採集或上傳任何本地數據。
* Windows 平臺僅在顯示通知時從公開 CDN 拉取圖標(avatars.githubusercontent.com/u/148330874?v=4&s=200)。 -
限制
* 進程級別:動態插件以當前 dsh 進程爲生命週期,重啓後需重新加載。
* 服務依賴:如果subprocess服務不可用,插件會靜默禁用。
* 網絡依賴:Windows 平臺的圖標依賴網絡,斷網時圖標不顯示,但通知本身仍會彈出。
總結¶
dsh-notifier 通過輕量級的系統通知機制,解決了 DSH 任務執行和審批流程中信息滯後的問題。它遵循“不干擾業務”的原則,在提供即時反饋的同時,保持了極低的隱私風險和資源佔用。