前言¶
DeepSeek Harness(DSH)的主界面一次只展開一條對話。當你同時開多個 session 並行改代碼、跑測試、等審批時,側欄只能告訴你「某條會話在跑或在等」——具體問到哪一步、排隊裏還有什麼 prompt,必須點進那條會話才能看見。多標籤來回切,既慢也容易漏掉「等你點選分支」這類 pending 問題。
下面介紹社區客戶端插件 dsh-session-monitor(維護者 icrefin)。它在左側邊欄 Plugins 下方增加 Session Monitor 入口,用網格卡片把活躍與近期用過的 root session 攤在同一塊面板裏:實時 transcript、待答問題、下一 turn 隊列和 composer,不必離開當前視圖也能介入任意一條會話。
這是什麼¶
dsh-session-monitor 是 DSH 的 客戶端(browser-only) 插件:只註冊一條側欄項和一個 main 面板,不掛 host 路由、工具或事件監聽;所需數據都來自客戶端已有的 session / workspace / UI 投影。
- 倉庫:github.com/icrefin/dsh-session-monitor
- 社區目錄頁:skillhub.cn/plugins/icrefin/dsh-session-monitor(獨立社區站點,與 DeepSeek / 幻方無官方從屬關係)
- 當前 package 版本:0.9.1(以倉庫發佈爲準)
- 許可證:MIT
- 運行要求:Node.js ≥ 22.17,dsh ≥ 0.2.1-rc.5 且 < 0.2.2-0(見
package.json的engines)
一句話定位:爲每個被監控的 session 提供一張「迷你控制台」——你在不看該會話主視圖時,仍能讀流式 transcript、答 pending、發 prompt、停 turn、改權限與模型,並管理 next-turn 隊列。
核心功能¶
側欄入口與網格卡片¶
安裝並重啓後,在左側 Plugins 下點擊 Session Monitor,中央區域變爲固定高度的網格(非整頁滾動文檔),每張卡片對應 catalog 裏的一條 非空 root session(子 agent 行和側欄裏的 provisional New Session 行默認不進網格;工具欄剛創建的空白 session 除外,直到首輪對話賦予標題)。
每張卡片在「你當前未打開該會話」時仍提供:
- 實時 transcript:你的 prompt、助手流式文本、工具調用及結果、審批/重試提示;隨 session 寫入更新。展示爲緊湊摘要(工具行一行摘要;用戶/助手消息全文;窗口約 60 行,更久歷史仍在主對話視圖)。
- Pending 問題或審批:可在卡片內直接作答(
InteractionCard)。 - Composer:向該 session 發送內容;若 session 正在運行,消息進入 next-turn inbox(無 Queue/Steer 切換)。
- Stop:運行中顯示,通過該 session 的
cancel()停止當前 turn。 - 可點擊標題:跳轉到該 session 的主對話(
ctx.uiWorkspace.openSession(id);無導航服務時標題僅爲普通標題)。 - 完成提醒:一輪運行結束且未讀時顯示綠色
done點;點擊卡片任意處恢復爲灰色 idle,下次運行再亮。 - 權限 preset:卡片上切換 Read Only、Workspace Write、Full access 等(
binding.session.command('/permission ')),無需打開主會話。 - Next-turn 隊列:與 dock 一致的 Steer(運行中)、Edit、Discard。
- 模型:與 composer、
/model共用 model 目錄,可在卡片同一行切換。 - 用量讀數:token、prompt-cache 命中比例、上下文佔用(與原生 composer footer 同源投影)。
- Remove:僅從監控網格移除;session 仍在側欄運行,歷史不受影響。
工具欄:密度、恢復與新建¶
- Card budget:同時展示 3–16 張卡片(默認 9),針對 idle/running;正在等用戶的 session 不會被 budget 裁掉。
- Per row:每行 2–6 張,或 Auto(按約 260px 卡片寬度填滿列);偏好寫入瀏覽器
localStorage(鍵dsh-session-monitor:prefs)。 - Restore removed:把此前 Remove 的 session 全部加回網格。
- New Session:選擇 Workspace 後創建 session(
ctx.sessions.create({ workspaceId })),監控頁保持打開且不會重排已有卡片;有空間則新卡片在末尾,滿格則佔用最舊卡片格位。下拉默認最近使用 session 的 Workspace;末行 Choose a folder… 可調宿主文件夾選擇器,將目錄接納爲新 Workspace(ctx.workspaces.create({ path }))再建 session。取消選擇器無變化;啓動失敗在工具欄顯示宿主返回信息。
網格順序(重要行爲)¶
首次繪製時按 waiting → running → 最近活躍等規則 種子排序一次,之後順序 凍結 並持久化到 localStorage:狀態變化只更新卡片內容,不會因「剛變活躍」跳到前排;關閉面板或重啓應用仍保持同一格位。新 session 佔滿時頂替最舊格,被擠出的卡片排到順序尾部。沒有任何控件會手動重排網格;縮小 budget 只是隱藏順序尾部,放大後原格位恢復。
安裝與啓用¶
插件以 tarball 形式安裝(README 未提供 dsh plugin add github:… 一類一鍵命令)。若你從發佈包或本地源碼目錄獲得 dsh-session-monitor,在目錄內執行:
cd dsh-session-monitor
pnpm install
pnpm check
scripts/install.sh # 構建、打包,並打印 tarball 路徑
install.sh 會輸出 tarball 路徑。接着:
- 桌面 Electron profile:在應用內 Settings → Plugins 安裝該 tarball(README 寫明這是桌面 profile 受支持的路徑)。
- CLI 管理的 profile:使用
dsh plugin --profile add <tarball路徑>(將<tarball路徑>換爲install.sh打印的實際路徑)。 - 重啓應用。README 說明:向運行中的 profile 添加 bundle 時,會在下次啓動導入。
安裝前請自行查看倉庫源碼與 MIT 許可證;插件邏輯在瀏覽器端執行,但仍依賴你當前 DSH 進程與 profile 的權限邊界——與任何 DSH 插件一樣,只安裝你信任的來源。
典型用法¶
- 並行開多條 session(例如一條跑測試、一條寫 release notes、一條等分支選擇)。
- 打開 Session Monitor,在網格里掃一眼:哪條是
waiting、哪條在working、transcript 停在哪句。 - 對 waiting 卡片直接在面板裏答 pending(例如選題
( ) main / ( ) next),無需切標籤。 - 對仍在跑的 session,在卡片 composer 裏追加指令(進入 next-turn inbox);需要時用 Steer 調整隊列裏尚未發送的消息。
- 點擊卡片標題進入該 session 主視圖做長文閱讀;或留在網格里用 Stop 中止 runaway turn。
- 卡片過多時用 Remove 隱藏不關心的 session,需要時用 Restore removed;調 Card budget / Per row 適配屏幕。
開發調試時,倉庫提供 scripts/dev-profile.sh:隔離 profile 啓動側欄項並伺服 /plugins/dsh-session-monitor/client.js(見 README「驗證結果」一節)。
適用場景與注意¶
適合誰
- 經常在 DSH 裏 多 session 並行、且會被 pending 審批打斷的開發者。
- 希望 少切對話頁、但仍要看到各 session 最新幾輪 transcript 和隊列的人。
需要注意
- 插件 僅客戶端行爲;不替代側欄 session 列表,Remove 隻影響監控網格。
- 網格順序凍結是產品設計:不要期待「最活躍 session 自動置頂」。
- README 寫明 未在自動化裏驗證實際像素(淺色/深色、窄寬度佈局等),視覺細節需你在本機確認。
- 修改行爲前,維護者在倉庫 HANDOFF.md 中記錄了架構、數據源與坑點,二次開發應先讀該文件。
結尾¶
dsh-session-monitor 把 DSH「一次只看一條對話」的限制補成「一屏多張 live 卡片」:transcript、pending、隊列與 composer 集中在一個 Session Monitor 面板裏,適合多路並行又不想到處點側欄的場景。