dsh-virtual-workspace:爲 DSH 提供跨目錄虛擬工作區

前言

在 DSH 中處理多個項目時,agent 經常需要同時讀取、搜索和修改分散在不同目錄裏的文件。逐個目錄打開、逐個路徑查找,會讓跨項目任務變慢,也讓界面管理變得零散。

dsh-virtual-workspace 的做法是:先把多個項目目錄組成一個命名的虛擬工作區,再讓 agent 通過統一的路徑語法和工具來訪問這些目錄。

這是什麼

dsh-virtual-workspace 是 DeepSeek Harness(DSH)的一個動態 Cordis 插件,由 KevinWen7415 維護,許可證爲 MIT。

它把多個項目目錄組織成命名虛擬工作區,並提供 agent 工具 vws、側邊欄抽屜管理、內置工作區列表鏡像,以及和會話沙箱一致的寫入升級。

核心功能

虛擬工作區與虛擬路徑

插件維護“名字 → 多個項目目錄”的映射組,一次定義後可以在各會話中使用。

agent 可使用 名字:/相對路徑 的虛擬路徑語法訪問成員目錄。文件操作取首個命中,目錄操作取並集。

vws 工具

插件提供 agent 工具 vws,包含 13 個動作:

list
add
remove
add-dir
remove-dir
set-mirror
resolve
read
write
edit
ls
find
grep

工具與提示段註冊在根上下文,任何會話的 agent 都能調用 vws 並看到工作區清單。

側邊欄抽屜與列表鏡像

插件接管側邊欄頭部的“+ 添加工作區按鈕”。點擊後向下彈出抽屜,用於創建普通工作區、聯立虛擬工作區,以及管理既有工作區。

成員目錄會註冊爲內置工作區條目,標題格式爲“工作區名 · 目錄名”。插件只清理自己創建的條目。

沙箱一致

讀取不受限。

寫入和編輯遵循調用會話的沙箱邊界;越界被拒後,可使用 sandbox_permissions + justification 進行一次性審批升級。

持久化與語言

工作區定義保存在:

<部署工作區根>/.vws-workspaces.json

本機示例爲:

C:\Users\<用戶>\.vws-workspaces.json

重啓後會自動恢復。

界面支持簡體中文(zh)和英文(en)。zh 顯示簡體中文,其餘語言回退英文,語言切換即時生效。

安裝形態

該插件可以以 bundle 方式安裝,也可以作爲動態 Cordis 插件運行。

bundle 同時攜帶 Host 與 Client,進程重啓後自動加載,不依賴會話。

動態安裝無需構建。代碼約束爲純 JavaScript,不使用 import/require/JSX/TypeScript;Client 使用 React.createElement;文件操作必須經 ctx.fs 服務。

package.json 中的版本爲 1.2.2。依賴爲:

"@deepseek-ai/dsh-tools": "^0.1.0-rc.6"

peerDependencies 爲:

"@deepseek-ai/cordis": "^4.0.1"

安裝與啓用

bundle 安裝

先確認 DSH profile 名稱,然後執行:

dsh plugin --profile <name> add github:KevinWen7415/dsh-virtual-workspace
dsh --profile <name>

bundle 同時攜帶 Host 與 Client,進程重啓後自動加載,不依賴會話。

動態安裝

在 DSH 會話中發送:

請從這個倉庫自動安裝插件:https://github.com/KevinWen7415/dsh-virtual-workspace(讀取 src/host.js 與 src/client.js,用 cordis_define 定義後 cordis_run 激活)

如果 DSH 機器無法訪問 GitHub,需要先本地克隆:

git clone https://github.com/KevinWen7415/dsh-virtual-workspace

然後按本地路徑繼續安裝。

首次激活含瀏覽器 UI 的包需要頁面審批;審批被拒不會自動重試。

手動動態安裝

手動安裝分三步:

1、調用 cordis_define,plugin 設置爲:

{ "kind": "new", "idPrefix": "vws" }

將 src/host.js 與 src/client.js 的函數體分別填入 code.host 和 code.client。

2、記錄返回的 pluginId 與 packageId。

3、調用 cordis_run,使用 mode run。

審批通過並收到成功通知後,刷新頁面。

驗證安裝

1、點擊側邊欄頭部“+”,確認彈出 Virtual Workspaces 抽屜。

2、在抽屜中添加一個工作區。

3、在對話中發送:

用 vws list 列出虛擬工作區

agent 返回工作區狀態即表示安裝可用。

典型用法

用自然語言驅動

可以對 agent 說:

讀 EDB:/src/xxx
在 EDB 裏搜索 xxx
把 EDB 的 xxx 改成 yyy

如果寫入超出當前會話邊界,agent 會發起升級請求;批准後完成一次性寫入。

更新與回滾

更新版本:

對同一 pluginId 用 cordis_define(kind: existing)追加新包,再 cordis_run mode update

回滾:

cordis_run mode run 指定 currentPackageId

停用:

cordis_stop

卸載前需要先清理工作區或鏡像,再執行:

cordis_stop
cordis_undefine

卸載前清理方式是在抽屜中移除工作區,或關閉鏡像。如果卸載後內置列表仍有殘留條目,可以在官方側邊欄手動刪除。

進程重啓後

動態插件隨 DSH 進程存續。DSH 進程重啓後,需要對原 pluginId 再次 cordis_run 激活;工作區定義持久化,不會丟失。

適用場景與注意

適合以下場景:

  • 多個項目目錄需要一起讀取、搜索或修改。
  • 希望 agent 通過統一命名路徑訪問多個目錄。
  • 希望在側邊欄中創建、管理和鏡像虛擬工作區。
  • 需要保留 DSH 的會話沙箱邊界,並在越界寫入時走一次性審批。

注意事項:

  • 插件以當前 DSH 進程權限運行;安裝前應檢查源碼與許可證。
  • 許可證爲 MIT。
  • 讀取不受限;寫入和編輯受調用會話沙箱邊界限制。
  • 動態安裝依賴 DSH 進程;進程重啓後需要重新激活。
  • 如果 DSH 機器無法訪問 GitHub,需要先本地克隆倉庫。
  • 工作區定義保存在 .vws-workspaces.json,卸載或遷移前應瞭解該文件位置。

鏈接

  • GitHub:https://github.com/KevinWen7415/dsh-virtual-workspace
  • 目錄頁(獨立站點):https://www.skillhub.cn/plugins/KevinWen7415/dsh-virtual-workspace
羽毛球分组比赛记分
小程序二维码

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

小夜