dsh-managed-workspaces:在可配置根目錄下自建工作區並關聯多文件夾

前言

在 DeepSeek Harness(DSH)裏,工作區通常對應側邊欄裏的一條路徑:會話的當前工作目錄(cwd)就落在該文件夾下。若你同時在多個倉庫或子項目間切換,要麼反覆改工作區路徑,要麼把代碼都拷貝到一個目錄裏,維護和檢索都不順手。

下面介紹的 dsh-managed-workspaces 由社區維護者 CoraxEldridge 發佈,分類屬於工作流。插件在指定根目錄下由 DSH 自建工作區目錄,並允許把多個已有文件夾以鏈接形式掛到同一工作區,而不必把整個項目樹搬進單一目錄。

這是什麼

dsh-managed-workspaces 是 DSH 插件(npm 包名同爲 dsh-managed-workspaces,當前資料中版本爲 1.3.0,許可證 MIT)。它解決的是:工作區不必再必須指向一個已存在的單一路徑;可以在可配置根目錄下創建託管工作區,並通過 _roots/<別名> 關聯多個外部文件夾(Windows 上使用 NTFS junction,無需管理員權限)。

插件歸屬與源碼見 GitHub 倉庫;社區目錄頁爲 SkillHub 插件頁。DSH 生態以「一切皆插件」爲方向,SkillHub 等目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。

工作區模型

默認根目錄爲 <用戶目錄>/DSH-Workspaces,可在託管面板中修改。目錄結構示意如下:

<根目錄>/
  demo/                       ← 工作區主目錄,註冊進側邊欄,會話 cwd 即此目錄
    _roots/                   ← 固定目錄,存放關聯文件夾的鏈接
      web/                    ← junction → 例如 D:\repos\web
      api/                    ← junction → 例如 D:\repos\api

工作區主目錄由插件創建,並通過 ctx.workspaceRegistry 註冊;在側邊欄出現後,直接在該行新建會話即可。關聯路徑保留真實絕對路徑;解除關聯只刪除鏈接,不刪除被關聯的文件夾;從插件移出工作區只刪除註冊與插件記錄,不刪除文件夾或會話。

核心功能

新建與關聯

  1. 在託管面板設置工作區根目錄並保存。
  2. 輸入名稱點「新建」:創建 <根目錄>/<名稱>/ 並註冊到側邊欄。
  3. 展開工作區,填入要關聯的文件夾(可指定別名),點「關聯」。
  4. 在該工作區行新建會話開始工作。

接入已有工作區

側邊欄裏已有的工作區可「接入」插件,納入同一套管理(便於再關聯額外文件夾),不移動、不改名、不新建任何文件:

  • 界面:右鍵工作區 →「接入托管工作區」;或在託管面板「已有工作區(未接入)」中逐項或全部接入。
  • 工具:managed_workspace({ action: "adopt", all: true }),或 managed_workspace({ action: "adopt", folder: "路徑" })。

接入後的工作區在第一次「關聯」之前不會創建空的 _roots/。

側邊欄與「添加工作區」

插件以更高優先級接管側邊欄「+」流程,提供:新建託管工作區 / 選擇已有文件夾(保留宿主官方行爲)/ 接入已有工作區 / 打開託管面板。已託管工作區右鍵可打開託管面板、關聯文件夾、遷移、修復、移出插件等。卸載插件後官方選擇器自動恢復。

遷移工作區

通過「遷移…」或 managed_workspace({ action: "migrate", destination: "目標路徑", workspace: "名稱" }) 將整個工作區目錄移動,並重建 _roots 下鏈接。若工作區仍有會話,會自動採用 anchor 模式:原路徑保留爲指向新位置的目錄鏈接,以便會話頭中不可變的 cwd 仍有效;無會話時可用 clean 模式直接遷址並重新註冊。

managed_workspace 工具

未指定 workspace 時,工具以當前會話所在工作區爲上下文。常用 action 包括:status、list、create、adopt、attach、detach、register、forget(詳見倉庫 README 表格)。

狀態持久化

%DSH_HOME%\managed-workspaces\manifest.json(DSH_HOME 未設置時爲 ~/.dsh)記錄根目錄、工作區與關聯關係;寫入採用臨時文件加 rename,損壞時會備份並以空狀態繼續,界面會告警。

安裝與啓用

包已發佈到 npm:https://www.npmjs.com/package/dsh-managed-workspaces。

推薦用 DSH 插件命令(將 desktop 換成你的 profile 名):

dsh plugin --profile desktop add dsh-managed-workspaces

該命令會在 profile 中安裝包,並把新增 bundle 自動加入 dsh.profile.bundles;重啓 DSH 後生效。

也可通過 plugin_manager 安裝:

plugin_manager({ action: "install_bundle", target: "dsh-managed-workspaces" })

從 GitHub 或本地目錄安裝時,使用資料中的 install_bundle 目標 URL 或本地路徑。安裝後點側邊欄「+」可見託管工作區入口;若提示 restart-required,需重啓 DSH。更新時重複對應安裝命令即可。

插件在你的 DSH 進程權限下運行;安裝前建議查看 源碼 與 MIT 許可證,確認符合你的環境策略。

典型用法小結

經過上面的安裝步驟後,可按 README 中的順序:打開託管面板設根目錄 → 新建工作區 → 關聯 web、api 等別名目錄 → 在工作區下開會話。需要把現有側邊欄工作區納入管理時,用「接入」而非重建目錄。跨盤或換機整理目錄時,用「遷移」並注意有會話時的 anchor 與磁盤上原路徑鏈接是否可長期保留。

通過工具批量操作時,例如查看未接入列表:

managed_workspace({ action: "list" })

關聯文件夾示例:

managed_workspace({ action: "attach", folder: "D:\\repos\\web", alias: "web" })

適用場景與注意

適合:多倉庫並行、希望一個 DSH 工作區裏統一會話 cwd,又要把真實代碼留在原路徑的團隊或個人;需要在不改倉庫佈局的前提下給已有工作區加「虛擬多根」的場景。

務必留意的限制(均來自插件文檔):

  • 從工作區根做 glob/grep 時不會自動跟隨 _roots 下的鏈接;應對每個別名路徑顯式指定,例如 grep({ path: "_roots/web" })。
  • 在 workspace-write 沙箱下無法寫入關聯文件夾內容;修改關聯目錄中的文件需將會話切到 danger-full-access。
  • 不支持將 junction 指向 UNC 網絡共享。
  • 依賴宿主原生目錄選擇器時,「選擇已有文件夾」在部分宿主上可能不可用,可改用手動路徑輸入。
  • 會話不能跨工作區拖動;歸屬由會話頭 cwd 決定,整理位置應使用「遷移工作區」。
  • 工作區或鏈接被外部刪除後需點「修復」;_roots/<別名> 若被真實文件佔用,插件只報衝突不覆蓋。

卸載插件不會刪除磁盤上的工作區文件夾、鏈接或會話。

結尾

dsh-managed-workspaces 把 DSH 工作區從「必須指向單一已有目錄」擴展爲「根目錄下自建 + 多文件夾鏈接」的模型,並覆蓋接入、遷移、修復等日常運維。若你在 SkillHub 或 GitHub 檢索工作流類插件,可按本文命令安裝試用。

羽毛球分组比赛记分
小程序二维码

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

小夜