前言¶
在本地運行 DeepSeek Harness(DSH)時,對話結束後需要手動切回應用查看結果。若會話較多,這種來回切換會打斷工作流。dsh-notify-sfx 解決這個問題:當 DSH 的會話產生事件(對話完成、等待批准、等待回答等)時,彈出 Windows 原生 Toast 通知,同時播放 opencode 風格的提示音;點擊通知可直接跳到對應會話。
插件定位¶
dsh-notify-sfx 是一個運行在 Windows 端的 DSH 插件,由維護者 XA-anjiu 開發。它通過 Windows 原生通知系統與音效包,將 DSH 的會話事件轉化爲桌面彈窗與聽覺反饋,支持點擊跳轉、自定義音效、設置面板等配置能力。
核心功能¶
Windows 原生通知¶
使用 ToastGeneric 載荷格式,圖標取自 DSH 應用本身。插件自動註冊 AUMID 與開始菜單快捷方式,確保通知可以被點擊激活。通知內容包括狀態標題、會話名以及詳情兩行。
opencode 音效包¶
內置 5 組共 45 個音效(alert / bip-bop / staplebops / nope / yup),每個事件可單獨選擇音效。音效資源來自 opencode 倉庫,採用 MIT 許可證。
逐事件音效¶
對話完成 / 出錯 / 等待批准 / 等待回答 / 其他通知,五個事件各自對應一個音效膠囊。默認事件音效爲:對話完成 staplebops-01、出錯 staplebops-03、等待批准 staplebops-02、等待回答 staplebops-05、其他 staplebops-01。
導入自定義音效¶
支持 wav / mp3 / m4a / wma / aac / flac / ogg 格式。可通過設置面板的「導入音效」功能,或直接將文件放入 assets/opencode/ 目錄後重裝插件。
點擊跳轉¶
點擊通知後,編譯型啓動器 bin/dshnotify.exe(無控制台窗口)會通知宿主聚焦窗口並切到對應會話,全程約 0.3 秒。點擊行爲可通過配置選擇:app 聚焦窗口並切會話、web 用瀏覽器打開會話、none 不跳轉。
設置面板¶
在 DSH 設置 → 通知與音效中可配置各項參數。改動即時保存、無需重啓。設置項保存在 profile 的 data/dsh-notify-sfx/settings.json。
入口可關¶
主界面鈴鐺圖標與會話頭部鈴鐺入口、設置頁「通知與音效」入口均可單獨隱藏。
安裝與啓用¶
通過命令行安裝:
dsh plugin add dsh-notify-sfx
或從源碼安裝:
cd <profile 目錄>
pnpm add -w "file:<本倉庫路徑>"
安裝完成後重啓桌面端。插件自帶 cordis.patch.yml,會被自動掛載。如需自定義配置,可在 profile 的 cordis.patch.yml 裏追加:
- id: dsh-notify-sfx
name: dsh-notify-sfx
config:
enabled: true
sound:
mode: file # file | none
配置項¶
| 配置項 | 說明 | 默認 |
|---|---|---|
enabled |
總開關 | true |
clickTarget |
點擊行爲:app 聚焦窗口並切會話、web 用瀏覽器打開會話、none 不跳轉 |
app |
lifetime |
通知停留:short / long / persistent |
short |
surface |
通知形式:system 系統通知、inapp 應用內浮層、both |
system |
visible.homeIcon |
會話頭部鈴鐺入口 | true |
visible.settingsSection |
設置頁「通知與音效」入口 | true |
sound.mode |
file 播放音效 / none 靜音 |
file |
sound.events |
逐事件音效,取值如 pack:staplebops-01、file:<絕對路徑>、none |
見下 |
sound.pack |
每個事件的默認音效 | staplebops-01 / 03 / 02 / 05 / 01 |
sound.volume |
播放音量 0–1(也可寫進 data/dsh-notify-sfx/settings.json 的 volume,改完立即生效) |
1 |
includeSubagents |
子代理的通知是否也彈 | false |
音效包說明¶
| 音效包 | 名稱 | 數量 | 風格 |
|---|---|---|---|
staplebops |
便籤輕敲 | 7 | 短促木質敲擊,適合「完成」 |
bip-bop |
嗶啵電子 | 10 | 電子雙音,適合「提問」 |
alert |
清脆提醒 | 10 | 明亮提示音 |
nope |
低沉否定 | 12 | 下行音,適合「出錯」 |
yup |
上揚應聲 | 6 | 上行確認音 |
音效文件位於 assets/opencode/,來自 opencode 倉庫的 packages/ui/src/assets/audio(MIT,見 NOTICE.md)。
工作原理¶
lib/index.js監聽session/event的turn/end、approval/asked、ask_user_question,按事件挑音效規格。lib/notify.ps1手寫 ToastGeneric 載荷(標題 = 狀態,正文 = 會話名 + 詳情兩行),附加<audio>或靜音,用ToastNotificationManager發出;同時負責 AUMID 註冊與音效播放(WinRTMediaPlayer)。lib/install-shortcut.ps1在開始菜單建一條帶 AUMID 的快捷方式——非打包 Win32 程序的 toast 點擊激活依賴它。- 點擊走
dshnotify://協議 →bin/dshnotify.exe(lib/launcher.cs編譯,lib/build-launcher.ps1負責重建)→ POST/api/dsh-notify-sfx/settings寫入待聚焦會話,並聚焦 DSH 窗口;瀏覽器半區輪詢到會話 id 後調用宿主的uiWorkspace.openSession。 lib/panel.js提供設置橋(同源校驗、僅本機),lib/client.js負責設置面板、會話頭部鈴鐺、右側欄頁面。
適用場景與注意¶
適合需要頻繁切換會話、希望將 DSH 事件轉化爲桌面通知與聽覺反饋的開發者。插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
開發¶
node test/sound.test.mjs # 音效規格解析
node test/panel.test.mjs # 設置橋
node test/client.test.mjs # 瀏覽器半區渲染
node tools/preview.mjs # 逐個事件試聽
改完 lib/ 後要同步到 profile 的 node_modules/dsh-notify-sfx(安裝副本是真實目錄,不是軟鏈),再重啓桌面端。
致謝¶
- 通知與 AUMID 處理基於 SeverusZh/dsh-notify-windows(MIT)派生。
- 音效資源與通知行爲參考 opencode(MIT, Copyright (c) 2025 opencode)。
總結¶
dsh-notify-sfx 通過 Windows 原生通知與 opencode 音效包,將 DeepSeek Harness 的會話事件轉化爲桌面彈窗與聽覺反饋,支持點擊跳轉、自定義音效、設置面板等配置能力,適合需要頻繁切換會話的開發者。
- 插件目錄頁:https://www.skillhub.cn/plugins/XA-anjiu/dsh-notify-sfx
- GitHub:https://github.com/XA-anjiu/dsh-notify-sfx