dsh-workspace-categories:DSH 桌面版工作區分類樹

前言

DeepSeek Harness(DSH)桌面版左側欄默認提供工作區與會話列表。工作區一多,平鋪列表裏找目錄、找歷史會話的成本會明顯上升。社區插件 dsh-workspace-categories(維護者 Knight-Zjy)把同一槽位換成 VS Code 風格的三級樹:分類 → 工作區 → 會話,分類與摺疊狀態保存在本機瀏覽器側,不改動 host 上的工作區數據模型。

這是什麼

dsh-workspace-categories 是面向 DeepSeek Harness 桌面版 的客戶端插件:接管側邊欄 sidebar.workspaces 槽位,用可摺疊的分類樹替代官方 ui-workspace 的默認瀏覽器 UI。官方工作區服務(ctx.uiWorkspace、workspaces、sessions 等 Cordis 服務)仍照常掛載;本插件以 priority: -100 註冊,高於官方默認的 priority: 0,因此無需禁用官方插件即可顯示分類樹,卸載或 dispose 後原生列表會立刻恢復。

樹的大致結構如下(摘自項目 README):

分類 A                     ← 自建分類(可拖動工作區歸類)
  └ 工作區 A-1             ← 會話數 / 新建會話 / 歸入分類
      └ 會話 1
      └ 會話 2
  └ 工作區 A-2
未分類                     ← 未歸類的工作區落在這裏
  └ 工作區 B

npm 包名:dsh-workspace-categories(當前資料中版本 0.1.1,許可證 MIT)。要求 DSH >=0.2.0-rc.2。

如何接管左側欄(與官方 UI 共存)

DSH 側邊欄的 sidebar.workspaces 是 single 槽位:同一槽位可註冊多條,按 priority 決定誰渲染,priority 最小者獲勝。

本插件與官方 ui-workspace 的關係可以概括爲:

  1. 本插件 priority: -100,官方瀏覽器 priority: 0 → 安裝啓用後顯示分類樹。
  2. ui-workspace 仍在 bundle 中,ctx.uiWorkspace 及其實它擴展點可用。
  3. 切換視圖不需要改配置、不需要重啓:樹頂欄右側的列表圖標,或側邊欄底部(sidebar.footer.action)的文件夾圖標,可在「分類樹 / 原生列表」之間切換;選擇寫入 localStorage 鍵 dsh.workspace-tree.state.v1。

數據全部來自客戶端 Cordis 服務,無 RPC。分類名、工作區歸屬分類等是純 UI 元數據,存在瀏覽器 localStorage,沒有 host 側狀態;host 半 lib/index.js 僅爲空 apply(),供 Loader 發現 ./client。

核心功能

下面能力均來自項目 README 中的功能表與說明。

能力 說明
分類管理 頂欄 + 新建;分類行鉛筆重命名、× 刪除(刪除後工作區回到「未分類」)
歸類 工作區行右側下拉框,或把工作區行拖到分類行上
摺疊 分類行 / 工作區行點擊摺疊,狀態持久化
會話 展開工作區時默認顯示 5 條,「顯示更多」每次 +10;點會話行打開該會話
運行中標記 會話行右側脈衝點
新建會話 工作區行的 +,調用 ctx.uiWorkspace.startSession(workspaceId)
新建工作區 頂欄文件夾按鈕、各分類行 +、「未分類」行 +:系統目錄選擇器選中目錄後立即成爲工作區;從分類行發起時自動歸入該分類
篩選 頂部輸入框同時匹配工作區(標題/路徑)和會話(標題/路徑/id)
排序 置頂會話優先,其餘按 updatedAt 倒序(與官方瀏覽器一致)

新建工作區與官方走同一條鏈路:優先 globalThis.__DSH_DIRECTORY_PICKER__?.pick(),否則 ctx.get('uiWorkspace').pickDirectory();採納爲 await ctx.get('workspaces').create({ path })。用戶取消選擇時不做任何操作;失敗時在樹頂顯示可關閉的錯誤條。

側邊欄摺疊爲窄軌(wide === false)時,本插件會退化爲圖標軌道,與槽位 props 約定一致。

安裝與啓用

包已發佈到 npm,包名 dsh-workspace-categories。推薦通過 profile 包管理器安裝,會自動寫入該 profile 的 dsh.profile.bundles:

dsh plugin --profile desktop add dsh-workspace-categories

也可以在應用內 設置 → 插件 中添加,填寫包名 dsh-workspace-categories。

安裝後重啓桌面應用。cordis.yml 爲生成物,不要手改。

卸載:

dsh plugin --profile desktop remove dsh-workspace-categories

卸載後同樣需要重啓。

從源碼開發時,可按 README 將目錄軟鏈到 ~/.dsh/profiles/desktop/node_modules/dsh-workspace-categories,並把包名追加到該 profile 的 package.json 的 dsh.profile.bundles 末尾;開發結束後應切回 npm 安裝,避免軟鏈版與 npm 版並存。

典型用法

  1. 按項目或主題建分類:樹頂欄點 + 創建分類,例如「客戶端」「文檔倉庫」。
  2. 把工作區歸入分類:在工作區行右側下拉框選分類,或把工作區行拖到目標分類行上。
  3. 在同一工作區下切換會話:展開工作區,點擊會話行打開;需要更多歷史時點「顯示更多」。
  4. 快速新建:在工作區行點 + 新建會話;在頂欄或某分類行點 + / 文件夾按鈕,用系統目錄選擇器添加已有目錄爲新工作區。
  5. 臨時回到官方列表:點樹頂列表圖標或底部文件夾圖標,無需卸插件;歸檔會話等官方列表獨有能力可在原生視圖中操作。

頂部篩選框輸入關鍵詞後,工作區與會話列表會同步過濾;展開工作區時會話也按同一關鍵詞過濾。

適用場景與注意

適合誰:長期在 DSH 桌面版維護多個磁盤目錄作爲工作區、且希望用自建分類組織列表的開發者。與 DSH「一切皆插件」的生態一致;插件目錄頁在 SkillHub,與 DeepSeek / 幻方無官方從屬關係,安裝前仍建議查看 GitHub 源碼 與 MIT 許可證。

已知限制(README 原文):

  • 拖拽僅支持「工作區 → 分類」,不支持分類排序、不支持工作區在分類內手動排序。
  • 新建工作區使用系統目錄選擇器,只能選已存在的目錄;未實現官方 browse 式應用內瀏覽。
  • 歸檔會話不出現在樹中;恢復歸檔需切回官方列表。
  • 分類僅存本機 localStorage,不換機同步;清緩存會丟失分類。

安全與權限:插件在 DSH 客戶端進程內運行,讀寫本機 localStorage 並調用與工作區、會話相關的 Cordis 服務;安裝前應確認包來源(npm 包名或你信任的源碼路徑)。

若你的插件要在同一棵樹中擴展 UI,README 提到可在 priority: -100 之下繼續註冊,或直接 fork 本插件作爲 sidebar.workspaces 實現;槽位 props 爲 { wide, expandSidebar }。

結尾

dsh-workspace-categories 在不替換官方工作區服務的前提下,用分類樹重組左側欄瀏覽體驗,並支持一鍵切回原生列表。安裝命令爲 dsh plugin --profile desktop add dsh-workspace-categories,啓用後重啓桌面應用即可。

  • 目錄頁:https://www.skillhub.cn/plugins/Knight-Zjy/dsh-workspace-categories
  • GitHub:https://github.com/Knight-Zjy/dsh-workspace-categories
羽毛球分组比赛记分
小程序二维码

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

小夜