前言¶
在 DeepSeek Harness(DSH)裏同時開多個工作區會話時,左側會話目錄默認按時間或你手動拖過的順序排列。正在跑的那條對話一旦停手去改別的會話,列表裏它常常沉到中間甚至底部,切回來要反覆滾動。
社區插件 dsh-session-active-top(維護者 JohnshyCY)只做一件事:把處於 running 狀態的會話提到當前工作區會話目錄最上方,跑完以後也不自動落回去,只改顯示順序,不改會話內容。下面介紹它是什麼、怎麼裝、以及和內核排序方式的關係。
這是什麼¶
- 定位:純前端的 DSH 客戶端插件;Host 側(
lib/index.js)爲空實現,無後臺進程、不聯網、不碰會話數據。 - 包名:
dsh-session-active-top(npm 當前資料中的版本爲0.1.1,許可證 MIT)。 - 解決的問題:多會話並行時,正在運行的對話在目錄裏一眼找不到;本插件讓「運行即上浮」,並在停止後保留位置,方便隨時切回。
與手動置頂(圖釘、pinnedSessionIds)不同:本插件不寫置頂字段、不顯示圖釘圖標;用戶手動置頂的會話仍在圖釘分區裏更靠前,兩者互不干擾。
核心功能¶
以下能力均來自插件 README 與 package.json 說明,安裝後由瀏覽器側 Web UI 生效。
- 運行即上浮:會話進入
running後,立刻排到所在工作區目錄最上方。 - 停止不歸位:上浮後一直留在該位置,運行結束也不會自動掉回原來的時間序或手動序。
- 塊內按活躍度:多個上浮會話之間按真實
updatedAt降序;當前正在對話的那條排在最前。 - 保留手動順序:上浮塊之外的順序(含你自己拖過的部分)不動。
- 刷新 / 重啓仍在:排序狀態寫入內核側持久化(手動模式)或運行時快照包裝(時間模式),刷新頁面或重啓應用後位置仍有效。
- HMR:通過 npm 安裝後,在 DSH
0.2.2-rc.1上驗證過;裝完一般即時生效,必要時刷新一次 Web GUI。
上浮名單記在瀏覽器 localStorage 鍵 dsh-session-active-top:raised,按 profile 隔離;換 profile 或換機器不會同步。
安裝與啓用¶
前提:已安裝 DSH 桌面客戶端及 dsh CLI(隨 DSH 安裝,Windows 上常見路徑爲安裝目錄下 resources/runtime/cli/bin/dsh.cmd)。插件作用於瀏覽器 Web UI,無單獨構建步驟。
推薦:命令行從 npm 註冊到 profile
dsh plugin --profile desktop add dsh-session-active-top
--profile 指向你正在使用的 profile;若 CLI 已默認選中該 profile,可省略。profile 目錄一般在 $DSH_HOME/profiles/<profile>;若在工作區之外,安裝時需對目錄放開相應權限。
裝完後在 設置 → 插件列表 中確認 dsh-session-active-top 已啓用;/plugins/events 的 type: "graph" 幀裏應出現該插件條目。
其他方式(資料原文)
- 插件市場:在 DSH 插件市場搜索
dsh-session-active-top一鍵安裝(社區收錄審覈通過後可用)。 - 本地開發:
dsh plugin --profile desktop add link:<本插件目錄的絕對路徑>,改代碼可熱重載。
卸載
dsh plugin --profile desktop remove dsh-session-active-top
卸載不會還原已改寫的手動順序,也不會清掉 localStorage 裏的上浮名單。若要清空上浮記錄,可在 DevTools 執行:
localStorage.removeItem('dsh-session-active-top:raised');
典型用法與自測步驟¶
README 給出的驗證流程可直接復現:
- 設置 → 插件列表可見
dsh-session-active-top且爲啓用;graph 幀含該插件。 - 讓另一個會話進入 running(例如發一條消息),它應立刻跳到會話目錄頂部。
- 停止該會話:仍留在頂部,不回落。
- 其餘會話順序不變;手動置頂與會話圖釘不受影響。
若「當前對話沒在最前」:上浮塊內按 updatedAt 降序,給該會話再發一條消息刷新活躍時間即可。
實現原理(簡要)¶
內核包 dsh-client-ui-workspace 未提供正式的「會話列表排序」擴展點,插件在客戶端(lib/client.js)注入 sessions 與 slots,包裝快照並訂閱變化,按目錄排序模式分支處理:
| 目錄排序模式 | 順序來源 | 插件做法 |
|---|---|---|
時間(orderBy: "updated") |
orderByRecency 讀快照 updatedAt |
包裝 sessions.list.getSnapshot(),對上浮會話在運行時副本上使用遠大於真實值的合成 updatedAt(不回寫真實數據) |
手動(orderBy: "manual") |
reconcileManualOrder 回放 sessionOrderByAccount |
調用視圖 store 的 setSessionOrder,把上浮會話前置進已保存順序(等價於用戶拖動一次) |
手動模式下僅改快照無效,必須寫持久化順序,因此刷新、重啓後位置仍在,且停止運行不會自動歸位。
適用場景與注意¶
適合誰:經常在同一工作區裏並行多條 Agent 對話、又不願每次滾動找「正在跑」會話的 DSH 用戶。
安裝前應知:
- 插件隨當前 DSH 進程在瀏覽器側運行,會以你本機 DSH 的權限訪問 Web UI 與
localStorage;安裝前可在 GitHub 倉庫 查看源碼與 MIT 許可證。 - 實現依賴未寫入公開契約的內核內部 action;DSH 升級若改動 workspace 排序實現,插件可能需要跟進(倉庫
FEEDBACK.md有說明)。 - 手動模式下卸載不會還原順序;上浮名單僅存本機
localStorage。
故障排查速查
| 現象 | 處理 |
|---|---|
| 裝了沒反應 | 確認 --profile、刷新 Web GUI、插件已啓用、graph 幀含插件 |
| 置頂順序沒變 | 置頂在圖釘分區,本插件只動普通分區 |
| 清上浮名單 | localStorage.removeItem('dsh-session-active-top:raised') 後刷新 |
結尾¶
dsh-session-active-top 用最小客戶端補丁,把 running 會話釘在工作區目錄頂部,停止也不收回,和手動置頂分區並行不衝突。需要收錄信息或 issue 時,可看社區目錄頁與源碼倉庫: