前言¶
在 DeepSeek Harness(DSH)裏用「按工作區」分組時,視圖選項裏的「最近更新」只會對每個工作區內部的 Session 排序。工作區這一層在 Host 裏仍按拖拽文件夾得到的 workspaceIds 順序展示——某個工作區裏剛開了新對話,分組位置不會跟着往上走。工作區一多,側邊欄就要靠記憶或滾動去找「剛動過的那個文件夾」。
dsh-workspace-recent-sort 是維護者 easychen 發佈的 Web 客戶端側邊欄插件(npm 包名 dsh-workspace-recent-sort,MIT 許可證)。它在不改動 Host 持久化順序的前提下,在瀏覽器裏對工作區分組做「最近更新」投影,並附帶對話行簡約顯示、重排後滾回當前選中項等行爲。插件已發佈到 npm,GitHub 倉庫當前約 9 stars。
這是什麼¶
一句話:DeepSeek Harness sidebar plugin——工作區分組按組內最新對話的 updatedAt 排序、展開工作區時默認只露最新一行並在懸停時展開更多、重排後把當前選中的對話滾回視口。
實現上通過 Cordis patch 包裝側邊欄註冊的 WorkspaceBrowser,不寫入 Host 狀態、不髮網絡請求;工作區選擇器、搜索、Session 行、歸檔篩選、固定與 Session 拖拽等仍走原生邏輯。
生效條件與要解決的問題¶
DSH 原生 Order by → Last updated(最近更新) 不改變工作區分組順序。本插件只在同時滿足下面兩項時改變側邊欄裏的分組順序投影:
- Group by = WorkSpace(按工作區)
- Order by = Last updated(最近更新)
切換到 Manual(手動排序)、Workspace Tree(按工作區樹) 或扁平列表時,會立刻恢復原生順序。持久化的工作區順序不變;在 Last updated 生效期間會抑制工作區拖拽提交(否則 durable 重排在投影下不可見),需要改文件夾順序時應先切到 Manual。
核心功能¶
按最近更新排序工作區分組¶
- 各工作區分組按組內真實對話中最新的
updatedAt排序,新的在上。 - 已歸檔但仍可見的行仍算真實對話;臨時的「New Session」佔位、隱藏的 subagent 子 Session 不計入活動。
- 沒有已加載對話的工作區沉底;
updatedAt相同則保持 Host 相對順序,結果確定。 - 僅包裝
WorkspaceBrowser;其他 UI 保持原生。
工作區對話簡約顯示¶
在 Group by → WorkSpace 下,展開的工作區默認只顯示最新一條對話,以及必須保持可操作的行。
- 懸停工作區標題或可見行時,用動畫再露出後續三條(最新一條再加三條;若有 New Session 佔位行會保留可見)。
- 當前選中的對話即使不是最新,也會一直顯示。
- 正在跑 turn、正在跑的 subagent 子任務、或待審批 / 計劃審閱 / 提問等 pending 交互的行,簡約模式下不會被藏,多條並行時亦然。
- 展開其餘 xx 個會話 / Show remaining … conversations 按鈕默認隱藏,懸停或鍵盤聚焦工作區後纔出現;鍵盤焦點在工作區內會展開該工作區已渲染的全部行;點擊「展開其餘…」會拉起該工作區的原生 watermark,渲染超過六行後懸停可看到全部。
- 摺疊的工作區、工作區樹模式、扁平列表仍爲原生行爲。
重排後滾回選中對話¶
工作區分組順序因自動最近排序、排序模式切換或手動拖拽工作區而改變後,插件會把側邊欄滾到當前選中的對話;若該行已在視口內,使用 block: "nearest",不強行改滾動位置。
設置¶
路徑:Settings → 工作區 / Workspaces。兩項開關默認均爲開啓,存在瀏覽器本地 localStorage 鍵 dsh.workspace-recent-sort.settings.v1,換瀏覽器可各用各的配置,切換後立即生效,無需刷新頁面。
| 開關 | 默認 | 作用 |
|---|---|---|
| 按最近更新排序工作區 | 開 | 啓用工作區按最近更新的投影排序 |
| 工作區對話簡約顯示 | 開 | 啓用單行簡約與懸停展開 |
安裝與啓用¶
面向 Web profile 安裝已發佈的 npm 包:
dsh plugin --profile web add dsh-workspace-recent-sort
也可從 GitHub 直接安裝:
dsh plugin --profile web add https://github.com/easychen/dsh-workspace-recent-sort.git
包聲明瞭 dsh.bundle.patch,會作爲 profile 的 active bundle 安裝。若提示需要重啓,請重啓 dsh web 並刷新 Web 頁面。
本地開發時可在 profile 目錄鏈接 checkout(路徑換成你的絕對路徑):
cd ~/.dsh/profiles/web
pnpm add link:/absolute/path/to/dsh-workspace-recent-sort
並確認 profile 的 package.json 裏 dsh.profile.bundles 包含 dsh-workspace-recent-sort。
卸載:
dsh plugin --profile web remove dsh-workspace-recent-sort
DSH 插件頁 / bundle 安裝器提供等價的安裝與移除操作。
典型用法¶
- 安裝並刷新 Web 客戶端後,側邊欄 Group by 選 WorkSpace,Order by 選 Last updated。
- 在某個工作區裏更新或新建對話,該工作區分組應隨組內最新活動時間上移(開關「按最近更新排序工作區」爲開時)。
- 展開工作區時默認只見最新一行;鼠標懸停標題或行可臨時看到後續幾條;有任務在跑或待交互的 Session 會一直露在外面。
- 若分組順序變化導致當前選中行被擠出視口,側邊欄會自動滾回該行。
- 需要長期調整工作區文件夾順序時,先把 Order by 切到 Manual,再拖拽;不需要簡約顯示時在設置裏關閉「工作區對話簡約顯示」。
適用場景與注意¶
適合誰: 經常在多個 WorkSpace 之間切換、依賴「最近更新」找活躍項目,但又希望工作區這一層也跟着「誰剛動過」排序的 DSH Web 用戶;工作區裏 Session 很多、希望側邊欄默認更短、用懸停按需展開的人。
兼容性: README 寫明針對 DSH 0.2.1-rc.2 構建;package.json 中 engines.dsh 爲 >=0.2.0-0,當前發佈版本爲 0.2.1。原生視圖選項菜單沒有公開的分組排序擴展點,插件走 sidebar 註冊組件接縫;若識別不了側邊欄結構,會保留原生組件以免應用無法啓動。
安全與權限: 插件隨當前 DSH Web 客戶端在瀏覽器中運行,設置僅存本地 localStorage。安裝前建議閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認符合你的使用環境。
結尾¶
dsh-workspace-recent-sort 補的是 DSH 在「按工作區 + 最近更新」視圖下分組層不跟最近活動走的空檔,並用簡約行與滾回選中項減少長列表裏的來回找。社區插件目錄見 SkillHub 條目;源碼、Issue 與 npm 說明見 GitHub:easychen/dsh-workspace-recent-sort。