dsh-state-notifier:DSH 任務狀態的五類瀏覽器與終端提醒

前言

在 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「開發」節的兼容檢查步驟再用於日常任務。

啓用瀏覽器提醒

  1. 打開 dsh Web 頁面,進入設置「常規」,或點會話頂部的鈴鐺。
  2. 勾選「播放聲音」,首次點擊「點擊解鎖聲音」(瀏覽器要求用戶手勢才能解鎖音頻)。
  3. 勾選「顯示桌面通知」,按提示「點擊授權桌面通知」,並在瀏覽器站點權限中允許通知。
  4. 展開「權限及運行信息」查看聲音、權限、連接與主機策略。

「聲音方案與試聽」可逐類試聽合成音;「通知外觀」可換鈴鐺圖標、上傳本機圖標、選擇通知裏顯示會話短標識或標題、開關「顯示提問的問題」。上傳圖標僅寫入本機 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 與面板兩層配置控制粒度。

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

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

小夜