dsh-session-notify:多工作區並行時的會話回覆 Toast

前言

在 DeepSeek Harness(DSH)裏同時開多個工作區、多個會話時,當前窗口以外的會話結束一輪迴答,你往往要手動切過去才能知道「那邊已經回完了」。下面介紹社區插件 dsh-session-notify:在 Web UI 頂部居中彈出可堆疊、可關閉的 Toast,標出工作區與會話名,預覽回覆摘要,點擊即可跳轉到對應會話;後臺會話若在等待提問或工具審批,會用琥珀色卡片提示問題文案。

這是什麼

dsh-session-notify 由維護者 platinum952 發佈,分類爲客戶端插件。它面向 DSH 的瀏覽器端:Host 側僅保留空的 Loader 條目,邏輯幾乎全部在瀏覽器半部完成。插件監聽 Host 上各會話狀態,在非當前正在閱讀的會話完成回答時推送類似微信風格的頂部通知;當前窗口已打開的會話以及 internal subagent 子會話不會彈 Toast。

生態上,DSH 強調「一切皆插件」;SkillHub 目錄頁 是社區站點,與 DeepSeek / 幻方無官方從屬關係。安裝前請自行查看 GitHub 源碼 與 MIT 許可證,並理解插件隨當前 DSH 進程與用戶權限運行。

核心功能

卡片內容與交互(與 README 一致):

  • 標題:<工作區文件夾>-<會話標題>,單行省略。
  • 正文:回覆開頭字符,兩行省略;最長摘錄由配置 maxBodyChars 控制(默認 200),可見行數由 CSS 決定。
  • Attention:後臺會話因 user-questions/request 或 approval/request 阻塞時,同款卡片呈琥珀色並顯示問題文本;該會話再次運行後卡片自行消失。
  • 堆疊:最多保留 6 張(默認 maxToasts),新的在上,舊的需手動關或從底部擠掉。
  • 關閉:每張卡片右上角有 ×。
  • 跳轉:點擊卡片打開對應會話。
  • 外觀:淺色卡片、寬軟陰影、18px 圓角、上下漸變與淡入淡出;樣式使用公開的 --dsw-alias-* 主題 token 與 --dsh-frame-overlay-top,隨明暗主題與 Windows 標題欄繼承,而非自繪一套皮膚。

工作機制概要:瀏覽器半部訂閱轉發的 api-session/status,在會話停止 running 時讀取 session/projections 的水印( durable 標題與工作目錄),再通過 session/page 拉取一頁消息並對齊水印,取該頁最後一條 assistant 消息;若該消息是結束本輪的回覆,則寫入 frame 級 shell.overlay 槽位。Attention tone 來自上述兩個 waterfall,插件從 listener 作用域解析 asking session、展示問題並始終 next(),不阻斷真實應答流程。插件不持久化狀態:刷新頁面後堆棧清空,僅頁面打開期間完成的回覆會被通知。

兼容性:針對 DeepSeek Harness 0.2.x(@deepseek-ai/dsh-*)構建,依賴瀏覽器 wire API(轉發的 api-session/*、session.projections / session.page、shell.overlay)。這些接口屬 pre-stable,Harness 若更名需插件跟進。Remote 命名空間應使用 ctx.get('remote.session'),而非插件上下文中可能爲 undefined 的 ctx.remote.session。

安裝與啓用

包爲 DSH bundle(Host 行 + 瀏覽器半部)。在持有本倉庫 package.json 的目錄下,安裝到正在運行的 profile:

plugin_manager install_bundle  target: /absolute/path/to/dsh-session-notify

或在 profile 內的 shell 中:

pnpm add /absolute/path/to/dsh-session-notify

然後將 dsh-session-notify 寫入 profile 的 cordis.patch.yml(或在 Plugin Manager 中啓用對應行)。刷新頁面一次:瀏覽器半部由已安裝包提供,新加載頁面纔會激活。

卸載:plugin_manager remove_bundle(或移除對應行)。

當前 package 版本爲 0.2.0(見倉庫 package.json)。

配置

瀏覽器半部不讀 Loader 行配置,可調項在 client.js 文件頂部常量,改完後刷新頁面:

選項 默認值 含義
maxToasts 6 屏幕上保留的卡片數;超出時最舊的從底部消失。
ttlMs 0 自動關閉延遲;0 表示直到手動關閉;正數在窗口隱藏時暫停計時。
pageMessages 8 單次 tail 讀取請求的消息條數。
maxBodyChars 200 回覆摘錄最長字符數。
includeActiveSession false 爲 true 時也對本窗口已打開的會話彈 Toast。

典型用法

  1. 按上一節將 bundle 裝進 profile 並啓用,刷新 Web UI。
  2. 在多個工作區或多標籤中並行跑會話;當你盯着的不是某個後臺會話時,該會話結束一輪迴答,頂部會出現帶工作區與會話名的 Toast。
  3. 需要處理時點擊卡片進入會話;不需要時點 × 關閉。若某後臺會話在等你答問題或點審批,琥珀色卡片會顯示問題文案,處理並繼續運行後會自動消失。
  4. 若希望當前窗口正在看的會話也通知,編輯 client.js 將 includeActiveSession 設爲 true 後刷新。

開發側可運行 npm test(node --test,通過假 Client 上下文測行爲)與 node --check client.js;無構建步驟、無額外依賴。

適用場景與注意

適合:經常在 DSH 裏並行多個 workspace / session、又不想頻繁切 tab 確認「那邊是否已回覆」的開發者。

注意:

  • 僅頁面打開期間、且會話在後臺完成的事件會被 Toast;刷新後歷史不會補發。
  • 安裝路徑必須使用你本機 clone 或下載後的絕對路徑,資料未提供 dsh plugin add github:... 一類命令,請勿憑插件名拼接。
  • 插件與 DSH 0.2.x 及上述 wire API 綁定,升級 Harness major/minor 時需覈對兼容性說明。
  • 再次強調:安裝前閱讀源碼與 MIT 許可,並評估在當前 profile 權限下運行第三方 bundle 的風險。

結尾

dsh-session-notify 用輕量瀏覽器邏輯補上「並行會話時的可見性」:命名工作區與會話、預覽回覆或待答問題、一點即跳轉。目錄與討論見 SkillHub,源碼與 README 見 GitHub。

羽毛球分组比赛记分
小程序二维码

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

小夜