前言¶
在 DeepSeek Harness(DSH)裏跑 Agent 時,人往往盯着別的窗口:回合何時結束、是否出錯、是否在等審批或提問,單靠界面狀態不夠直觀。一直切回 DSH 看日誌也費精力。dsh-notify-chime 監聽會話事件,在固定幾類節點播放區分度明顯的短音,並可按需彈出系統通知,把「該不該回來點一下」變成可聽、可選橫幅的反饋。下面介紹插件定位、安裝、設置與使用時的注意點。
這是什麼¶
dsh-notify-chime 是社區維護的 DSH 工作流類插件,維護者爲 dixieWithHeart。當前包版本爲 1.8.0(以 package.json 爲準),許可證 MIT,要求 Node.js >= 20。插件隨包提供 cordis.patch.yml,安裝後自動寫入宿主配置;宿主側邏輯在 lib/host.js,設置頁通過 client.js 注入 DSH 設置 UI。
一句話:在回合完成 / 中斷 / 出錯 / Agent 提問等場景發聲,Windows 等平臺還可選 Toast;八類事件各自可開關、可配音色,支持自定義音頻文件。
生態上,DSH 主張「一切皆插件」;SkillHub 目錄頁 與 GitHub 倉庫 爲社區來源,與 DeepSeek / 幻方無官方應用商店從屬關係。安裝前宜自行查看源碼與許可證;插件以當前 dsh 進程權限運行。
核心功能:八類事件與默認聽感¶
插件按 kind 區分場景,內置默認音色語義一致:完成偏上行、中斷偏下行、出錯低頻、提問偏高音催問。
| 場景 | kind | 默認音色(README 描述) |
|---|---|---|
| 回合正常結束 | finished |
上行三音 |
| 中斷(停止、歸檔、取消) | interrupted |
下行兩音 |
| 出錯結束 | error |
低頻雙響 |
| Agent 提問(等回答) | question |
三聲高音 |
等待審批(approval/asked) |
approval |
上行雙音,稍急 |
計劃評審(exit_plan_mode) |
plan-review |
三音上行 |
目標受阻(goal/change → phase: blocked) |
goal-blocked |
低頻下行 |
後臺任務失敗(job/settled → failed) |
job-failed |
短促雙音 |
自 1.5.0 起,計劃評審不再與「提問」混爲一類。目標受阻僅在「非 blocked → blocked」那一次躍遷發聲;後臺任務失敗按會話 3 秒窗口去抖,多任務同時失敗只響一次。
不發聲的情況(資料明確):應用退出、會話分叉、被阻斷,以及默認被過濾的 subagent 會話。監聽的是會話日誌追加流,冷啓動打開歷史會話不會補響。
安裝與啓用¶
官方安裝命令如下(資料原文,勿自行拼接 github:owner/repo 形式):
dsh plugin add dsh-notify-chime
裝完後刷新頁面,在 設置 → 提示音 中調整。設置保存即生效,無需重啓 DSH。
設置頁結構¶
三組配置;總開關關閉時不發聲、不彈通知,但事件仍記賬,可隨時重新打開。
| 組 | 內容 |
|---|---|
| 聲音 | 總開關、音色、八類事件各自開關與試聽、正在看的會話完成時不響、同類事件最小間隔、子會話提醒 |
| 通知 | 通知總開關、哪些事件彈、標題前綴、正文是否帶會話名 |
| 高級 | 設置文件 / 音效 / 自定義 / 軌跡目錄(只讀)、恢復默認 |
用戶改過的項寫入 ~/.dsh/dsh-notify-chime.json,未在界面改動的仍以 cordis.patch.yml 初值爲準。
界面語言:設置頁中英文文案隨 DSH 設置 → 常規 → 語言切換,無需重啓。系統通知標題與正文由宿主生成,資料寫明目前固定中文。
音色與自定義音效¶
六套內置音色只換聽感,不改觸發規則:default、soft、chime、retro、digital、wood(具體聽感見 README 表)。頂部選擇爲全局默認;單類事件可點行內「跟隨全局 ▾」單獨指定。
某行音色選爲「自定義」後出現「上傳」:
- 支持 WAV / MP3 / M4A / AAC,單文件 ≤ 5 MB;WAV 走
SoundPlayer,其它走 WPFMediaPlayer - 存於
~/.dsh/dsh-notify-chime-sounds/<kind>.wav,卸載插件不刪文件
assets/ 下內置 WAV 由包內 tools/make_sounds.py 合成,MIT 分發,無第三方採樣。
配置初值與高級項¶
cordis.patch.yml 中的 config 僅爲初值;界面保存後以 JSON 設置文件爲準。典型片段:
- id: dsh-notify-chime
config:
enabled: true
soundset: default
minIntervalMs: 700
includeSubagents: false
kinds:
finished: true
interrupted: true
error: true
question: true
approval: true
plan-review: true
goal-blocked: true
job-failed: true
toast: { enabled: true, kinds: [question], includeSession: true }
常用字段含義(默認值以 README 表爲準):
enabled:總開關初值;false時插件仍加載,設置頁可用soundset:全局音色,含customminIntervalMs:同類事件最小間隔(默認 700),防連響includeSubagents:是否爲子會話發聲(默認 false)quietCurrent:當前正在查看的會話完成時不響(僅影響完成類)kinds.<kind>:該類是否發聲toast.*:是否彈系統通知、對哪些 kind、標題前綴、是否帶會話名;Windows 上toast.appId默認com.deepseek.dsh,須爲已註冊 AppUserModelID
也可在 patch 裏爲單類寫死路徑或靜音,例如:
- id: dsh-notify-chime
config:
sounds:
finished: C:/Windows/Media/Windows Print complete.wav
error: false
調試觸發記錄:爲 traceFile 指定路徑後,每次觸發追加一行 JSON;默認不配則不寫文件。
系統通知與平臺行爲¶
- Windows:WinRT Toast
- macOS:
osascript - Linux:
notify-send
appId 未在系統註冊時,通知可能只進通知中心、不彈橫幅。資料提供了 Windows 下排查用的 tools/check-notifications.py、tools/try.mjs toast 等命令,並建議檢查系統通知開關與勿擾模式。
典型用法:本地試聽與冒煙¶
不依賴真實會話即可驗證音效與通知:
node tools/try.mjs all # 試聽四種音效
node tools/try.mjs toast # 試彈通知
node tools/smoke-test.mjs # 契約冒煙,臨時目錄,不碰真實設置、不發聲
node tools/smoke-test.mjs --verbose
重新生成內置 WAV(可選):
python tools/make_sounds.py # 全部重生成
python tools/make_sounds.py chime # 只重生成一套
適用場景與限制¶
適合誰:長時間讓 Agent 在後臺跑、需要靠聲音區分「正常結束 / 被打斷 / 出錯 / 在等你答或批」的 DSH 用戶;希望提問類事件再配系統通知、減少切窗的用戶。
實現上的限制(README 原文要點):
- 每次提醒通過獨立子進程播放,不阻塞 Host;PowerShell 冷啓動約 200 ms,感知延遲約 0.3 s
- 無插件內音量調節,跟隨系統默認輸出設備;虛擬聲卡可能導致聽不清
- 自定義格式不支持 WMA、FLAC
- 暫停:設置頁總開關;卸載:
dsh plugin remove dsh-notify-chime,設置文件可保留或刪除
結尾¶
dsh-notify-chime 把 DSH 回合生命週期裏幾類關鍵節點映射成可配置的提示音與可選系統通知,並用八類 kind、六套音色和去抖規則減少誤報與連響。若要安裝或查看版本說明,見 SkillHub 目錄 與 GitHub:dixieWithHeart/dsh-notify-chime。