dsh-notify-sfx:DeepSeek Harness 的 Windows 桌面通知與音效插件

前言

在本地運行 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)。

工作原理

  1. lib/index.js 監聽 session/event 的 turn/end、approval/asked、ask_user_question,按事件挑音效規格。
  2. lib/notify.ps1 手寫 ToastGeneric 載荷(標題 = 狀態,正文 = 會話名 + 詳情兩行),附加 <audio> 或靜音,用 ToastNotificationManager 發出;同時負責 AUMID 註冊與音效播放(WinRT MediaPlayer)。
  3. lib/install-shortcut.ps1 在開始菜單建一條帶 AUMID 的快捷方式——非打包 Win32 程序的 toast 點擊激活依賴它。
  4. 點擊走 dshnotify:// 協議 → bin/dshnotify.exe(lib/launcher.cs 編譯,lib/build-launcher.ps1 負責重建)→ POST /api/dsh-notify-sfx/settings 寫入待聚焦會話,並聚焦 DSH 窗口;瀏覽器半區輪詢到會話 id 後調用宿主的 uiWorkspace.openSession。
  5. 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
羽毛球分组比赛记分
小程序二维码

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

小夜