前言¶
用 DeepSeek Harness 桌面端跑長任務時,窗口最小化或縮到托盤後,會話完成、卡在審批或報錯往往要你自己切回去看。瀏覽器 profile 裏可以用 dsh-sysnotify 做系統通知;桌面端(Electron,~/.dsh/profiles/desktop)若仍依賴渲染器裏的 Web Notification,在 Windows 上還可能被靜默丟棄。下面介紹社區插件 dsh-desktop-notify(維護者 wxy123-ctrl,MIT),它在 desktop profile 裏監聽會話事件,用與 web 版驗證過的同類通道彈出原生氣泡,並支持點擊回到對應會話。
這是什麼¶
dsh-desktop-notify 是 DSH 客戶端類插件(非官方)。當前版本 1.4.0(以倉庫 package.json 爲準)。一句話:在桌面端當會話完成工作、阻塞等待批准、阻塞等待回答、plan 模式計劃待審批、出錯或定時提醒到期時彈出 Windows 系統通知;點擊通知會聚焦 DSH 桌面窗口並切換到觸發通知的會話(含從最小化、托盤隱藏恢復)。
插件只在 dsh-app: 桌面環境生效:client.js 帶桌面守衛,非桌面 profile 全程 no-op,與 web profile 的 dsh-sysnotify 互不干擾。
核心功能¶
六類通知場景¶
宿主半邊監聽會話與相關事件,文案與防抖(同類事件 2.5 秒)與 sysnotify 對齊,標題與正文如下(資料原文):
| 場景 | 標題 | 正文要點 |
|---|---|---|
| 完成工作 | ✅ <會話標題> |
最近一條用戶指令 + 耗時 |
| 等待批准 | ⏸️ <會話標題>:等待批准 |
操作、原因、正在執行的任務 |
| 等待回答 | ❓ <會話標題>:等待回答 |
問題原文 |
| 計劃待審批 | 📋 <會話標題>:計劃待審批 |
計劃首標題、任務、批准/完善提示 |
| 出錯 | ⚠️ <會話標題>:出錯 |
錯誤信息 |
| 定時提醒到期(v1.3.0) | ⏰ <會話標題>:定時提醒 |
schedule 注入會話時的到期內容 |
通知在 Windows 通知中心歸組爲 Windows PowerShell(桌面端未設置 AUMID,無法歸組到 DSH 應用名——README 說明了原因與後續 delivery: renderer 預留)。
投遞與點擊鏈路(默認 powershell)¶
v1.1.0 起默認不用渲染器 new Notification(),改爲 spawn PowerShell 執行 toast-notify.ps1(NotifyIcon 氣泡)。點擊後腳本 POST 到 notify-click,宿主入隊 click 事件,渲染器長輪詢收到後調用 uiWorkspace.openSession(sessionId),並按進程名 DeepSeek Harness 聚焦 Electron 窗口。
審批類通知在 v1.2.0 起同時使用會話事件 approval/asked 與 waterfall approval/request(prepend: true)兩條路徑,避免排在 GUI 審批應答者之後導致觀察者永不執行的問題。
子代理默認靜音(v1.3.0)¶
子 Agent 會話(存在 parentSession 或 delegationDepth ≥ 1)默認六類通知都不彈,避免一次任務連彈多條完成氣泡;主會話默認開啓。提權/工具審批的 GUI 彈窗不受影響。若需要子代理也通知,在 profile 補丁里設置 muteSubagents: false。
會話級開關¶
Composer 輸入區「工作區內修改」芯片右側有鬧鐘按鈕(conversation.input.left 槽位),經 POST /plugins/dsh-desktop-notify/notify-pref 切換該會話全部六類通知靜音;偏好寫入插件目錄 notify-prefs.json({"muted":[sessionId…]},缺席表示開啓)。
安裝與啓用¶
適用 desktop profile,Node >=18。資料中的啓用流程如下(勿使用未在 README 出現的 dsh plugin add github:… 拼接命令)。
- 將本插件以 link 或桌面端 Plugins 頁絕對路徑安裝到 desktop profile(與編輯
package.json等效)。 - 編輯
~/.dsh/profiles/desktop/package.json:在dependencies增加"dsh-desktop-notify": "link:<本倉庫絕對路徑>",在dsh.profile.bundles增加"dsh-desktop-notify"。 - 在 desktop profile 目錄執行:
pnpm install --dir <desktop profile>
- 重啓桌面端(應用菜單 →「重啓應用與 Host」)。
- 驗證:任一會話輸入框右側出現鬧鐘按鈕;觸發一次阻塞 → 通知彈出 → 點擊 → 窗口置前並切到該會話。
卸載:從 package.json 移除依賴與 bundle 後重新 pnpm install,或在 Plugins 頁移除,再重啓桌面端。
可選:在 profile 的 cordis.patch.yml 按插件 id 覆蓋投遞通道(默認 powershell):
- id: desktop-notify
config:
delivery: renderer # 默認 powershell
升級前可在插件倉庫目錄運行 node selftest.mjs(README 稱 129 項斷言,無 UI 依賴)。
典型用法¶
日常無需額外配置:保持 desktop profile 已註冊 bundle 並重啓後,後臺跑會話即可收到氣泡。需要安靜處理某一對話時,點該會話輸入區右側鬧鐘設爲靜音。子代理噪音過多時保持默認靜音;若你希望 fork 出來的子會話完成也提醒,在 profile 補丁里設 muteSubagents: false。
排障時按 README「投遞鏈三環」查看同目錄 desktop-notify.log:宿主是否 spawn toast、PowerShell 退出碼、點擊是否出現 notify-click 或退出碼兜底;渲染器控制台應能看到 [dsh-desktop-notify] 長輪詢與 click 事件。
適用場景與注意¶
適合:主要在 Windows 上使用 DSH 桌面端,希望離開窗口時仍收到完成/審批/提問/plan/錯誤/定時提醒,並一鍵跳回會話的開發者。
注意:
- 插件以當前 DSH 宿主進程權限運行;安裝前請閱讀 GitHub 倉庫 源碼與 MIT 許可證,自行評估信任邊界。
- 應用完全退出時宿主停止,不會有通知;關閉 GUI 仍要通知的場景請用 web profile 的
dsh-sysnotify。 - 會話須落在安裝了本插件的同一棵 cordis 宿主樹上;其他工作區的會話點擊通知無法
openSession(與 sysnotify 同限)。 - 誤裝進瀏覽器 profile 時客戶端 no-op,氣泡可能仍由宿主彈出但點擊無法定位桌面窗口。
- 社區目錄 SkillHub 插件頁 與 GitHub 爲獨立生態入口,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-desktop-notify 把 desktop profile 裏關鍵會話狀態接到 Windows 原生氣泡,並補上點擊回會話與按會話/子代理靜音,彌補桌面端 Web Notification 在 Windows 上的投遞缺口。目錄與源碼: