dsh-session-notify:多項目工作流下,後臺會話完成不再靜默

前言

DeepSeek Harness(DSH)左側欄可以掛多個 workspace,每個項目下有多條會話。常見用法是:在項目 A 裏丟一個要跑一會兒的任務,馬上切到項目 B 繼續寫代碼或改別的倉庫。項目 A 被收起後,其下會話跑完時,界面不會主動告訴你——只能展開項目、逐條點進會話,才能看到「已完成」。
dsh-session-notify 是社區維護的客戶端插件(維護者 zach-bworld),在側邊欄底部補角標、在系統層補通知,並支持從列表一鍵跳進對應會話。下面介紹它做什麼、怎麼裝、怎麼用,以及和 DSH 能力邊界相關的限制。

這是什麼

一句話:DSH client plugin——當別的項目裏有後臺會話跑完時,在側邊欄底部顯示未讀角標,並可選發系統 Notification;點列表條目可直達會話,進入主視圖後自動清除該條未讀。

社區插件目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;安裝前建議自行瀏覽源碼與許可證。插件在當前 DSH 客戶端進程內運行,權限與你在用的 DSH 實例一致。

核心功能

側邊欄底部角標

按 workspace(項目) 分組統計「跑完且你還沒進主視圖看過」的會話數。項目收起或展開時,角標仍在側邊欄底部可見(README 說明:DSH 暫無 workspace 分組頭 slot,因此提示落點在 sidebar.footer.action,而不是每個項目行上的紅點)。

系統通知

每次符合條件的後臺會話從 running 變爲完成,觸發一條瀏覽器/Electron 通知;切到其他應用時也能收到。若用戶拒絕通知權限,會靜默降級爲僅角標。

點擊直達與自動清除

  1. 點角標 → 彈出按項目分組的完成列表
  2. 點某條 → 打開該會話;同時左側目錄會滾到 data-row-key="session:<id>" 對應行並短暫高亮(找不到會話行時退到所屬 workspace:<id> 行)
  3. 進入會話主視圖(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。

  1. 打開左側欄最下方 插件
  2. 點 安裝,粘貼安裝地址(不是 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 給出的可復現步驟:

  1. 在項目 A 裏發起一個需要跑一會兒的任務
  2. 立刻切換到項目 B
  3. 等 A 中會話跑完 → 側邊欄底部出現角標數字,並可能收到一條系統通知
  4. 點角標 → 選會話 → 跳轉;點進會話後該條未讀自動清除

若要長期跟進某次完成結果:打開角標列表,點行右側 ☆ 標記待辦,稍後再從同一入口處理。

工作原理(與 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,安裝前心裏有數):

  1. 無法在單個「項目行」上打紅點,提示集中在側邊欄底部。
  2. 僅展開項目不會清除未讀;須點進會話或該會話再次開始運行。
  3. 系統通知依賴通知權限。
  4. 若目標會話所屬項目被你手動收起,點列表條目時不會替你展開項目,只會滾到並高亮該項目行。

結尾

dsh-session-notify 把「後臺會話完成」從被動排查變成角標 + 通知 + 列表跳轉,並用手動待辦兜住「稍後再看」的場景。多項目並行用 DSH 時,可先按上文在 App 或對應 profile 安裝啓用,再用「A 跑任務、B 繼續幹活」走一遍驗證。

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

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

小夜