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