qgx1992/dsh-notify:DSH 通知顯示層插件

前言

DeepSeek Harness (DSH) 的通知機制由桌面殼處理。若桌面殼未響應或處於開發環境,通知可能無法在頁面內可見。dsh-notify 插件提供了 web 側的通知顯示層,通過訂閱桌面殼的 __dshExo 橋接事件來渲染全局 toast 棧,並支持點擊程序化激活會話。

安裝

使用以下命令安裝插件:

dsh plugin --profile web add github:qgx1992/dsh-notify

安裝後需要重啓 web 進程才能生效:

dsh web 重啓

頁面刷新即可加載 /plugins/dsh-notify/client.js。

核心功能

本插件提供以下能力:

  1. 全局右上角 toast 棧:在頁面右上角顯示通知列表,同屏上限 5 條,超出時淘汰最舊的通知。
  2. 訂閱桌面殼橋事件:默認訂閱 window.__dshExo 橋事件,包括對話完成、服務事件、更新就緒等。
  3. 程序化激活會話:點擊 toast 時,通過 ctx.sessions.open(id) 調用官方 runtime API 激活會話,替代對 DOM 的 hack 操作。
  4. 無殼降級模式:當檢測不到桌面殼(如直接用瀏覽器打開 web 頁面)時,自動降級訂閱 sessions store,自繪輪次完成 toast。
  5. 分級顯示:根據通知類型(信息/成功/錯誤/警告)顯示不同的樣式和左側豎色條。
  6. 自動關閉策略:根據類型自動關閉,信息 8s、成功 6s、錯誤與更新 15s、警告 12s。
  7. 自建容器:使用自建的 fixed 容器渲染,不搬動 DSH slot 節點,避免渲染卡死。
  8. 國際化:支持 zh 和 en 語言。

架構與工作流

插件運行在兩種互斥的數據源模式:

殼橋模式(默認)

桌面殼通過 __dshExo 橋接器向頁面投遞通知事件。插件檢測到橋存在後進行握手,訂閱 onEvent 回調,渲染 toast 棧。點擊 toast 後調用 ctx.sessions.open(id) 激活會話。

無殼降級模式

當頁面直接運行在瀏覽器中,沒有 window.__dshExo 時,插件訂閱 ctx.sessions.list,檢測會話狀態變化(如從 running 到 idle),自繪完成 toast。

橋契約

插件僅消費 window.__dshExo 的最小白名單 API,不依賴任意 IPC:

interface DshExoBridge {
  /** 訂閱殼推送的通知事件,返回取消函數 */
  onEvent(cb: (ev: NotificationEvent) => void): () => void
  /** 頁面 → 殼:點擊 / 已讀回執 */
  send(channel: 'notify:click' | 'notify:seen', payload: { id: string; sessionId?: string }): void
  /** 頁面 → 殼:握手 */
  ready(): void
  /** 殼版本探針 */
  appInfo(): { version: string }
}

事件類型包括:session-done(對話完成)、service-ready(服務就緒)、service-error(服務異常)、service-restarting(服務重啓)、update-ready(更新就緒)。

行爲細節

  • 點擊激活:點擊 toast 會調用 ctx.sessions.open(id)。插件會校驗會話 ID 是否在列表中,若 unknown id 會報錯;若會話處於 pending 狀態,每 500ms 重試至多 4 次。
  • 已讀回執:事件渲染即觸發 notify:seen 回傳給殼側。
  • 樣式與主題:toast 樣式使用 DSH 主題變量,自動適配亮/暗色模式。
  • 異常處理:所有異常均通過 try/catch 靜默降級,不向殼或頁面拋出。

注意事項

  • 本地分發:該插件默認不發佈 npm 也不上傳 GitHub,僅通過 dsh plugin --profile web add link:<本地路徑> 安裝。
  • 供應鏈策略:新發布 <24 小時內可能因 pnpm 供應鏈策略報錯,需將版本加入 minimumReleaseAgeExclude 白名單。
  • 本地開發:本地開發時,由於項目路徑可能含空格或中文,需使用無空格的 Junction 指向真實目錄,否則 link: 命令會失效。
  • 源碼修改:開發時修改 lib/client.js 後需運行語法檢查,然後刷新頁面即可生效。
羽毛球分组比赛记分
小程序二维码

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

小夜