在 DSH 的 Web 客戶端開發中,明確 Agent 回合的結束是一個常見需求。dsh-web-ding 作爲一個插件,通過在瀏覽器端合成並播放聲音,解決了“不知道 Agent 何時真正空閒”的問題。
插件定位¶
這是一個瀏覽器專屬的“叮”聲提示插件。它由兩部分組成:Host 端監聽器檢測 agent/status 的空閒狀態,並將信號推送到 falling-ts-web-ding 設置命名空間;瀏覽器端客戶端鏡像該命名空間,通過 Web Audio API 合成提示音並彈出通知。
安裝與前置條件¶
運行以下命令將插件添加到 Web Profile:
dsh plugin --profile web add github:falling-ts/dsh-web-ding
安裝前需確保 Web 應用包含客戶端包(package.json 中的 dsh.client 聲明)。
核心功能¶
- 合成提示音:使用 Web Audio API 在前端合成“叮”聲(三個正弦振盪器加指數衰減包絡)。Host 端不播放音頻,不調用系統通知。
- Host 端監聽:監聽 Agent/Status 的空閒轉換(所有回合結束,包括子 Agent)。只有新的空閒轉換會觸發信號,重複的空閒狀態保持靜默。
- 瀏覽器端客戶端:鏡像設置命名空間,實時響應用戶配置。支持 Win11 風格的右下角 Toast 通知。
- 通知抽屜:點擊 Toast 打開通知抽屜,列出回合結束消息。消息存儲在
localStorage,最多保留 100 條,支持單條刪除和全部刪除。
配置說明¶
配置項存儲在 falling-ts-web-ding 命名空間中,可在 設置 → 提示音配置 面板調整。該插件包含兩個獨立的配置塊:
Block 1 — 彈出用戶選擇¶
當瀏覽器端的 [data-question-key] 元素出現時觸發,檢測是純前端行爲。可調整:
* questionEnabled:開關。
* questionVolume:音量(0..1)。
* questionFreq:頻率(80..4000 Hz)。
* questionDecayMs:衰減時長(100..4000 ms)。
Block 2 — 回合結束¶
監聽 Agent 空閒轉換。Host 端在檢測到 agent/status 空閒變化時發佈 done 信號。可調整:
* turnEndEnabled:開關。
* turnEndVolume:音量(0..1)。
* turnEndFreq:頻率(80..4000 Hz)。
* turnEndDecayMs:衰減時長(100..4000 ms)。
注意事項¶
- 瀏覽器自動播放策略:瀏覽器會阻止音頻播放,直到用戶與頁面發生交互(點擊、按鍵)。首次使用前需在頁面上點擊一次或使用“試聽”按鈕預熱 AudioContext。
- 後臺標籤頁:瀏覽器可能會暫停後臺標籤頁的 AudioContext,保持標籤頁可見才能聽到聲音。
- 數據隔離:消息日誌完全存儲在瀏覽器
localStorage中,Host 端不讀寫該數據。
源碼與文檔¶
該插件依賴 settings/document-updated 鏡像通道與瀏覽器端通信。源碼與目錄頁:https://github.com/falling-ts/dsh-web-ding