前言¶
DeepSeek Harness(DSH)左側欄可以掛多個 workspace,每個項目下有多條會話。常見用法是:在項目 A 裏丟一個要跑一會兒的任務,馬上切到項目 B 繼續寫代碼或改別的倉庫。項目 A 被收起後,其下會話跑完時,界面不會主動告訴你——只能展開項目、逐條點進會話,才能看到「已完成」。
dsh-session-notify 是社區維護的客戶端插件(維護者 zach-bworld),在側邊欄底部補角標、在系統層補通知,並支持從列表一鍵跳進對應會話。下面介紹它做什麼、怎麼裝、怎麼用,以及和 DSH 能力邊界相關的限制。
這是什麼¶
一句話:DSH client plugin——當別的項目裏有後臺會話跑完時,在側邊欄底部顯示未讀角標,並可選發系統 Notification;點列表條目可直達會話,進入主視圖後自動清除該條未讀。
- 倉庫:github.com/zach-bworld/dsh-session-notify
- 目錄頁:skillhub.cn/plugins/zach-bworld/dsh-session-notify
- 分類:客戶端(純前端 bundle,
index.js側 Host 僅apply() {}用於激活 bundle) - 許可證:MIT(
package.json當前版本 1.1.1)
社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝前建議自行瀏覽源碼與許可證。插件在當前 DSH 客戶端進程內運行,權限與你在用的 DSH 實例一致。
核心功能¶
側邊欄底部角標¶
按 workspace(項目) 分組統計「跑完且你還沒進主視圖看過」的會話數。項目收起或展開時,角標仍在側邊欄底部可見(README 說明:DSH 暫無 workspace 分組頭 slot,因此提示落點在 sidebar.footer.action,而不是每個項目行上的紅點)。
系統通知¶
每次符合條件的後臺會話從 running 變爲完成,觸發一條瀏覽器/Electron 通知;切到其他應用時也能收到。若用戶拒絕通知權限,會靜默降級爲僅角標。
點擊直達與自動清除¶
- 點角標 → 彈出按項目分組的完成列表
- 點某條 → 打開該會話;同時左側目錄會滾到
data-row-key="session:<id>"對應行並短暫高亮(找不到會話行時退到所屬workspace:<id>行) - 進入會話主視圖(
retainedBy.mainView > 0)即視爲已讀,該條從未讀裏去掉
只統計你自己發起的會話;子 agent(subagent)內部會話不計入,避免內部任務把角標刷滿。
待辦(☆ / ★)¶
「已完成」列表點進去就清未讀;若跑完了但暫時沒空處理,可在列表行右側點 ☆ 釘成待辦(變爲 ★),再點一次取消。待辦存在瀏覽器本地(key dsh-session-notify.todos.v1),刷新或重開窗口仍保留;會話從列表裏被刪掉後,對應待辦會自動剔除。角標會同時體現未讀(鈴鐺)與待辦(圖釘);未讀清完但仍有待辦時,角標呈描邊樣式。
安裝與啓用¶
桌面端 App(推薦)¶
桌面端的 profile 由 Electron App 獨佔管理,不要在 PowerShell 裏對 desktop profile 執行 dsh plugin add,否則會報 profile "desktop" is managed exclusively by the Electron application。
- 打開左側欄最下方 插件
- 點 安裝,粘貼安裝地址(不是 shell 命令):
https://github.com/zach-bworld/dsh-session-notify
等價寫法還包括 github:zach-bworld/dsh-session-notify、git@github.com:zach-bworld/dsh-session-notify.git,或本地 clone 後的絕對路徑。
3. 在列表裏啓用插件
4. 刷新頁面(Ctrl+R)或重開窗口——客戶端 bundle 需刷新纔會加載
命令行 / Web 端¶
將 web 換成你實際使用的 profile 名(常見 web、tui、headless):
dsh plugin --profile web add github:zach-bworld/dsh-session-notify
裝指定版本示例:
dsh plugin --profile web add github:zach-bworld/dsh-session-notify#v1.0.0
裝完同樣刷新頁面。
卸載¶
在 App 插件頁移除;或命令行:
dsh plugin --profile web remove @…/dsh-session-notify
| 現象 | 處理 |
|---|---|
命令行報 managed exclusively |
改用 App 內插件頁安裝 |
| 裝完沒反應 | 刷新頁面加載 bundle |
| 找不到包 | 覈對 github:zach-bworld/dsh-session-notify 拼寫 |
典型用法:先跑任務,再切項目¶
README 給出的可復現步驟:
- 在項目 A 裏發起一個需要跑一會兒的任務
- 立刻切換到項目 B
- 等 A 中會話跑完 → 側邊欄底部出現角標數字,並可能收到一條系統通知
- 點角標 → 選會話 → 跳轉;點進會話後該條未讀自動清除
若要長期跟進某次完成結果:打開角標列表,點行右側 ☆ 標記待辦,稍後再從同一入口處理。
工作原理(與 DSH API 的銜接)¶
| 環節 | API / 機制 |
|---|---|
| 運行狀態基線 | ctx.sessions.list(byId[id].running、retainedBy.mainView) |
| 狀態翻轉 | remote.$on('api-session/status', (sessionId, running) => …) |
| 項目歸屬 | ctx.workspaces.list.items[].sessionIds |
| UI 注入 | slot sidebar.footer.action;inject 提供 hooks.sessionNotify / openSession |
| 文案 | client locale(zh / en) |
適用場景與已知限制¶
適合:同時在多個 DSH workspace 間切換、依賴後臺 agent 跑長任務、又不想反覆展開收起項目查「有沒有跑完」的開發者。
限制(來自 README,安裝前心裏有數):
- 無法在單個「項目行」上打紅點,提示集中在側邊欄底部。
- 僅展開項目不會清除未讀;須點進會話或該會話再次開始運行。
- 系統通知依賴通知權限。
- 若目標會話所屬項目被你手動收起,點列表條目時不會替你展開項目,只會滾到並高亮該項目行。
結尾¶
dsh-session-notify 把「後臺會話完成」從被動排查變成角標 + 通知 + 列表跳轉,並用手動待辦兜住「稍後再看」的場景。多項目並行用 DSH 時,可先按上文在 App 或對應 profile 安裝啓用,再用「A 跑任務、B 繼續幹活」走一遍驗證。