dsh-desktop-notifier:Harness Web 失焦時的桌面任務提醒

前言

在 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

裝完後建議按順序做三件事:

  1. 重啓 dsh web——dsh.profile.bundles 只在 boot 時讀取一次,裝到已運行實例裏不會被感知;
  2. 瀏覽器硬刷新(Ctrl+Shift+R);
  3. 在 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
羽毛球分组比赛记分
小程序二维码

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

小夜