前言¶
在 DeepSeek Harness(DSH)裏跑長任務時,常見做法是盯着終端或反覆切回 Web 會話,看 Agent 是否已回答、是否在等審批、是否卡住或報錯。終端 BEL 只能表達「有動靜」,很難區分完成與提問;純日誌也不方便從別的窗口一眼判斷該回哪條會話。
下面介紹社區插件 dsh-state-notifier(維護者 HOPE-LGNF,當前版本 0.3.1)。它在宿主側準確識別五類狀態,在瀏覽器裏用合成提示音與系統通知提醒,無就緒瀏覽器時可回退終端 BEL;全局策略走 Cordis 配置,面板偏好走本機 localStorage。
這是什麼¶
dsh-state-notifier 是面向 DSH Web 配置文件的通知插件:任務完成、等待審批、等待回答、任務受阻、任務出錯各有一套提醒邏輯。插件聲明的 dsh 範圍爲 >=0.2.0-rc.2 <0.3.0-0,分類在包元數據中爲 notify;社區目錄將其歸入工作流類插件。
實現上覆用官方 Connection 的受認證 Fetch 長輪詢,瀏覽器端通過 Web Locks 協調多標籤頁發送,斷線可補發最近 256 條通知(有界內存,非 Web Push 後臺服務)。
核心功能¶
五類事件與完成判定¶
- 完成:要求回合正常結束且有最終文本回答;取消、空回合、僅工具調用、子代理回合不會誤報完成。
- 審批、提問、受阻、錯誤:獨立提醒,不受「完成最短耗時」門檻影響。
- 全局
events可對五類通知分別開關;minDuration(默認 10 秒)僅作用於完成類通知。
瀏覽器:聲音與桌面通知¶
- 在本機瀏覽器內播放合成提示音,每類事件可選「默認、柔和、明亮、急促」,也可一鍵統一;無需下載 WAV 或調用外部播放器。
- 用戶授權後發送系統通知(Windows 上可走通知中心);點擊通知可回到對應會話。
- 通知默認展示分類、會話短標識;提問類可顯示官方問題正文(多行,類似常見 IM 通知)。不會在系統通知裏塞任務正文、工具參數、審批理由或錯誤堆棧。
- 兩個同源標籤頁通過 Web Locks 與有界回執協調;設置修改立即生效並同步到其他同源標籤。
無瀏覽器時的回退¶
playback: auto 時,若沒有就緒瀏覽器,則使用終端 BEL;終端無法響鈴時會給出診斷,仍記錄通知日誌。
與舊插件的差異(README 說明)¶
項目參考 bell 的五類事件與控制思路,重新實現了傳輸與播放;未移植 bell 的 WAV 目錄、逐事件 WAV、PowerShell/Linux 播放器及中英文切換,也未移植 ding 的聲音上傳、週期提醒和註冊表協議。
安裝與版本要求¶
需要 Node.js 22.19+ 的 22.x,或 Node.js 24+(README 建議 24)。CI 在 Node 22/24 × Linux/Windows 上驗證。
不要用 Git 地址安裝(如 github:owner/repo 或插件頁的倉庫 URL):瀏覽器產物 dist/client.js 不隨 Git 分發,用 Git 安裝可能被 pnpm 拒絕或啓動失敗。應使用 Release 的 tgz 或本地 npm pack 產物。
不在倉庫根目錄時,可直接安裝 GitHub Release 附件(已含瀏覽器構建產物):
npx @deepseek-ai/dsh@0.2.0-rc.2 plugin --profile web add \
"https://github.com/HOPE-LGNF/dsh-state-notifier/releases/download/v0.3.1/dsh-state-notifier-0.3.1.tgz"
在倉庫根目錄本地構建後安裝($PWD 指向該目錄):
npm ci
npm run check
npm pack
npx @deepseek-ai/dsh@0.2.0-rc.2 plugin --profile web add "$PWD/dsh-state-notifier-0.3.1.tgz"
npx @deepseek-ai/dsh@0.2.0-rc.2 web
卸載:
dsh plugin --profile web remove dsh-state-notifier
跟隨最新發行版時,將 URL 中的版本號換成 latest,升級後按倉庫 README「開發」節的兼容檢查步驟再用於日常任務。
啓用瀏覽器提醒¶
- 打開 dsh Web 頁面,進入設置「常規」,或點會話頂部的鈴鐺。
- 勾選「播放聲音」,首次點擊「點擊解鎖聲音」(瀏覽器要求用戶手勢才能解鎖音頻)。
- 勾選「顯示桌面通知」,按提示「點擊授權桌面通知」,並在瀏覽器站點權限中允許通知。
- 展開「權限及運行信息」查看聲音、權限、連接與主機策略。
「聲音方案與試聽」可逐類試聽合成音;「通知外觀」可換鈴鐺圖標、上傳本機圖標、選擇通知裏顯示會話短標識或標題、開關「顯示提問的問題」。上傳圖標僅寫入本機 localStorage,不會發到宿主。
聲音解鎖與通知授權是兩件獨立的事;刷新後可能需要再次解鎖聲音。若通知權限曾被拒絕,需在瀏覽器站點設置裏改回。
Windows 系統通知由在 Windows 上打開 dsh 頁面的瀏覽器發出;宿主可運行在 WSL。遠程 HTTP 通常不能用系統通知,宜使用 HTTPS;localhost 與迴環地址一般爲安全上下文。頁面關閉、休眠或被瀏覽器凍結後,插件不保證提醒必達。
配置¶
全局策略只保存在 Cordis 配置中,可在 dsh 插件 Config 裏改,或編輯 profile 的 cordis.patch.yml:
- id: state-notifier
config:
enabled: true
playback: auto
minDuration: 10
events:
complete: true
approval: true
question: true
block: true
error: true
| 項目 | 含義 |
|---|---|
enabled |
總開關;關閉後不產生新通知 |
playback: auto |
有就緒瀏覽器時由瀏覽器輸出;否則 BEL |
playback: browser |
僅瀏覽器輸出;仍保留終端日誌 |
playback: terminal |
僅終端 BEL;仍保留終端日誌 |
playback: none |
只記錄日誌 |
minDuration |
完成通知最短耗時(秒),默認 10 |
events |
五類通知的獨立開關 |
瀏覽器面板的開關、音量、前臺靜音、每類聲音方案、圖標與會話顯示方式等存在該瀏覽器的 localStorage,不會覆蓋全局策略。需要全部靜音時關閉宿主總開關 enabled;前臺靜音針對整個 dsh 窗口,不是「僅當前會話」。
關閉「顯示提問的問題」後,提問正文不會隨訂閱響應發給瀏覽器,通知只保留分類與會話標識。
行爲邊界與適用注意¶
- 通知使用有界內存;宿主重啓、插件重載或斷線超出保留範圍時,面板會提示記錄重置。首次打開頁面只接收新通知,不補播舊任務。
- 發送回執表示瀏覽器接受了 API 調用,不保證用戶已看到或聽到;崩潰、存儲失敗、系統免打擾可能導致重複或遺漏。無 Web Locks 時,面板會提示僅在一個標籤頁啓用。
- 適合需要區分「完成 / 等人 / 出錯」、又不想長期盯終端的 DSH Web 用戶。插件以當前 dsh 進程權限運行,安裝前請自行查閱 GitHub 源碼 與 MIT 許可證。
DSH 生態強調「一切皆插件」;SkillHub 目錄頁 爲社區收錄,與 DeepSeek / 幻方無官方從屬關係。
延伸閱讀¶
- 倉庫:HOPE-LGNF/dsh-state-notifier
- 架構、項目狀態、瀏覽器驗證步驟見倉庫內
docs/ARCHITECTURE.md、docs/STATUS.md、docs/VALIDATION-browser.md。
經過上面的步驟,你可以在固定 dsh 版本與 Release tgz 的前提下,把五類任務狀態接到瀏覽器聲音、系統通知或終端 BEL,並按 Cordis 與面板兩層配置控制粒度。