前言¶
在 DeepSeek Harness(DSH)裏跑長任務時,你往往會切到編輯器、文檔或別的標籤頁。任務跑完或卡在審批、計劃確認、提問上時,如果仍盯着別的窗口,很容易錯過 Harness 頁面上的狀態變化。本插件 dsh-desktop-notifier(維護者 lurejewel)在瀏覽器側用系統通知欄(Windows 上即操作中心)補這一環:頁面不在前臺或失焦時,把「任務完成」和「需要你操作」推到你當前正在用的環境裏,點擊通知可切回對應會話。
這是什麼¶
dsh-desktop-notifier 是面向 DSH Web 表面的客戶端插件,功能全部跑在瀏覽器裏,通過 Notification API 投遞提醒。它不新增宿主路由、不寫會話日誌、不改 agent 循環;狀態來自客戶端 runtime 已有的會話列表與 UI 會話狀態。
DeepSeek Harness 版本需 >= 0.1.7-rc.2(插件 0.2.0 已按 Session Controller 拆分後的客戶端契約適配)。Node.js 需 >= 20。瀏覽器以 Chrome / Edge 爲主(通知授權依賴用戶手勢;Safari 未在資料中驗證)。
核心功能¶
何時會提醒¶
| 時機 | 是否提醒 | 說明 |
|---|---|---|
| 任意會話任務完成 | 是 | 含你正在看的會話,只要 Harness 窗口/標籤已切走 |
| 會話運行時長低於閾值(默認 1 分鐘) | 否 | 避免極短任務頻繁彈窗 |
| 會話開始等待你操作 | 是 | 審批、計劃確認、提問等;不受時長閾值限制 |
| 子代理(subagent)會話完成 | 否 | 默認跳過;父會話完成時會提醒;可用 includeSubagents 打開 |
| 頁面在前臺(可見且持有焦點) | 否 | 人就在看頁面時不打擾 |
| 頁面可見但焦點在別的程序(含雙屏) | 是 | 由 document.hasFocus() 判定 |
| 另一個 DSH 標籤頁在前臺 | 否 | 經 BroadcastChannel 跨標籤抑制重複提醒 |
通知標題取自會話標題;正文示例爲「✅ 任務完成 · 用時 3 分 12 秒」或「⏳ 等待你審批」。同一會話的同類通知使用相同 tag,會替換而非無限堆疊。
與 Harness 版本的對應關係¶
| 插件版本 | 需要的 DSH | 說明 |
|---|---|---|
0.2.0 |
>= 0.1.7-rc.2 |
適配 Session Controller 拆分後的契約 |
0.1.0 |
0.1.0 – 0.1.5-rc.x |
在 0.1.7-rc.2 上部分失效:完成提醒仍可用,「等待審批/提問」與點擊通知切回會話可能不工作;應升級到 0.2.0 |
0.1.7-rc.2 起,邊沿判定讀 uiSession.sessionStatus;點擊通知經 uiWorkspace.openSession(sessionId) 切回會話。
安裝與啓用¶
官方安裝命令如下(包聲明瞭 dsh.bundle patch,dsh plugin 會自動掛進 profile 配置層,無需手寫掛載行):
dsh plugin --profile web add dsh-desktop-notifier
裝完後建議按順序做三件事:
- 重啓
dsh web——dsh.profile.bundles只在 boot 時讀取一次,裝到已運行實例裏不會被感知; - 瀏覽器硬刷新(
Ctrl+Shift+R); - 在 Harness 頁面任意點擊一次:Chrome/Edge 只允許在用戶手勢裏申請通知權限,這是資料中寫明的唯一授權入口。
快速自檢¶
在 DevTools 控制台執行:
__dshNotifyTest__() // 直接彈一條測試通知,繞過「失焦才提醒」規則
若返回 false 且控制台提示權限未授權,說明第 3 步尚未完成。
安裝狀態自檢¶
node scripts/verify-install.mjs <port> <token>
# 例:dsh web: http://127.0.0.1:3080/?token=XXXX -> node scripts/verify-install.mjs 3080 XXXX
腳本檢查 web boot graph 中是否有本插件行、對應客戶端 bundle 是否返回 200。npm 安裝用戶可在 ~/.dsh/profiles/web/node_modules/dsh-desktop-notifier 下執行。Web 表面含 /plugins 在進程令牌柵欄之後,裸 curl 拿不到結果。
從源碼 link: 安裝、以及從 link 切換到 npm 正式版時的清理步驟見 GitHub README;Windows 本地可用倉庫內 scripts/install-local.ps1,profile 用戶 patch 層熱應用時可不重啓 dsh web,硬刷新即可。
典型用法:localStorage 配置¶
不改源碼時,可在瀏覽器 localStorage 寫入鍵 dsh-desktop-notifier:config 的 JSON 對象,覆蓋 lib/client.js 中 DEFAULTS:
localStorage.setItem('dsh-desktop-notifier:config', JSON.stringify({
thresholdMs: 60000, // 只有運行超過該毫秒數的任務纔在完成時提醒
includeSubagents: false, // true = 子代理會話完成也提醒
pendingInteraction: true, // 等待審批/提問時提醒
silent: false, // true = 通知不出聲
debug: true // true = 控制台打印 [dsh-desktop-notifier] 判定日誌
}))
字段類型錯誤或 JSON 無效時會整段回退內置默認值;改完需刷新頁面。
開發者在倉庫根目錄可用 node test/client.test.mjs 跑客戶端邏輯測試(Node 內樁全局變量執行真實 lib/client.js)。
適用場景與注意¶
適合誰: 經常在 DSH Web 裏掛長任務、又需要切到其他應用或標籤的開發者;希望在 Windows 操作中心(或瀏覽器對應的系統通知)裏收到完成與阻塞類事件提醒的用戶。
權限與安全: 插件隨 DSH Web 在瀏覽器中運行,通知能力受瀏覽器與 OS 策略約束。安裝前可在 GitHub 倉庫 查看源碼與 MIT 許可證,確認符合你的環境要求。
已知限制(資料原文):
- 需要瀏覽器進程在運行;標籤頁關閉後不會有提醒(宿主側任務仍可繼續;原生 toast 需宿主側方案,本插件僅做瀏覽器通知)。
- 插件加載時已在運行的任務,耗時從頁面加載時刻起算(會話日誌無「本輪開始時刻」),可能少算,不會因此誤報長任務。
- Windows 操作中心裏顯示的是 Chrome/Edge 的應用身份,不是獨立 DSH 應用。
DSH 生態強調「一切皆插件」;社區目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-desktop-notifier 用最小侵入的方式補上了「人不在 Harness 頁面上」時的可見反饋:完成與等待你操作兩類邊沿、焦點與跨標籤抑制、可配置的閾值與子代理策略,都寫在客戶端 bundle 裏。若你已在 >= 0.1.7-rc.2 的 Web profile 上使用 DSH,可按上文命令安裝並做一次 __dshNotifyTest__() 與失焦場景驗證。
- 目錄頁:https://www.skillhub.cn/plugins/lurejewel/dsh-desktop-notifier
- GitHub:https://github.com/lurejewel/dsh-desktop-notifier