前言¶
在使用 DeepSeek Harness (DSH) 進行開發時,左側工作區的順序直接影響交互效率。默認情況下,工作區列表是靜態的,隨着會話增多,最近使用的工作區容易沉底。dsh-workspace-recency-order 插件通過 Host 側的底層操作,解決了工作區順序無法自動更新的問題。
插件介紹¶
這是一個 Host 側插件,由開發者 dgmico 維護。它的核心作用是:按工作區內最新會話活動時間自動重排左側工作區順序(Host 側,寫入官方持久工作區順序,不覆蓋官方 UI)。
核心功能¶
- Host 側插件:直接操作 Host 側的工作區註冊表,而非注入 DOM 或替換組件。
- 按最新會話活動時間自動重排:工作區會根據其名下會話的最新活躍時間(
updatedAt)進行排序。 - 持久化排序:重啓 DSH 後順序保持,並繼續自動維護。
- 實時更新:通過監聽事件,在用戶發送消息時實時調整順序。
- 不覆蓋官方 UI:利用官方渲染邏輯,只需修改 Host 側數據,UI 會自動跟隨。
- 冪等重排:計算出的順序若與當前一致,則不寫入,避免無效操作。
- 支持配置:提供多種配置項以調整排序行爲。
安裝與啓用¶
插件支持通過絕對路徑安裝。
dsh plugin --profile <profile> add /絕對路徑/dsh-workspace-recency-order
安裝後,插件會自動處理配置。如果需要手動干預,可以在 profile 的 cordis.patch.yml 中添加配置項。
配置說明¶
在 profile 的補丁層(~/.dsh/profiles/<profile>/cordis.patch.yml)中按 id 重述整行。補丁按行替換 config,因此只需寫入想修改的鍵。
- id: workspace-recency-order
name: 'dsh-workspace-recency-order'
config:
sweepMs: 0 # 關掉兜底巡檢
debounceMs: 1000 # 防抖放寬到 1 秒
| 配置項 | 默認值 | 說明 |
|---|---|---|
enabled |
true |
插件啓用開關。 |
direction |
'desc' |
排序方向,desc 爲最近活躍在最上,asc 爲最久未動在最上。 |
emptyWorkspace |
'createdAt' |
空工作區的排序策略:createdAt 按自身創建時間參與排序,bottom 固定沉底,top 固定置頂。 |
countSubagentSessions |
false |
是否將子代理會話(origin: 'subagent')計入活躍度。 |
debounceMs |
400 |
事件合併防抖窗口(毫秒)。 |
sweepMs |
300000 |
兜底巡檢間隔(毫秒),0 表示關閉。 |
skipWhenSessionListEmpty |
true |
當無法讀取會話列表時,放棄本輪排序。 |
注意:本插件不依賴
@deepseek-ai/schemastery,因此 DSH 的配置頁無法顯示錶單。改配置需直接編輯cordis.patch.yml。
開發與維護¶
該插件採用零依賴、純 ESM 模式編寫。
- 測試:包含 54 個測試用例,覆蓋了 24 種工作區全排列和隨機打亂的寫入計劃正確性校驗。
- 開發文件:
lib/order.js:核心排序邏輯。lib/index.js:插件本體,處理事件、防抖和生命週期。
- 熱重載:插件本身支持熱重載,但修改
lib/下的源碼需要重啓 DSH。
注意事項¶
- 全局持久:順序是全局持久的,對 profile 下所有客戶端生效。
- 子代理處理:子代理會話默認不參與活躍度計算。
- 時間基準:排序依據的“最新時間”取的是最後一次用戶消息時間,而非助手回覆時間。
- 重啓需求:修改
lib/下的代碼後必須重啓 DSH。 - UI 限制:目前 DSH 暫未提供手動拖拽排序 UI,插件不會與手動操作衝突。