前言¶
DSH 開新會話時默認只認 Windows 目錄。如果你的項目構建、測試、運行都在 WSL 發行版裏(Windows 10/11 + WSL2 環境),常見做法是把工程路徑寫進 Windows 側,然後手動切到 Linux 終端裏執行,agent 的 bash 一類工具跑在 Windows 上,和真實的構建環境對不上。下面介紹的插件 dsh-remote-wsl 就是解決這件事的:它在 DSH 的「添加 workspace」流程里加了一個 Connect WSL 入口,讓你直接在 WSL 發行版裏瀏覽目錄、選一個 Linux 路徑作爲 workspace。插件由 MFJip612 維護,倉庫地址 https://github.com/MFJip612/dsh-remote-wsl ,許可證 MIT。它只使用 DSH 官方服務,不依賴也不調用任何第三方 WSL 插件。
這是什麼¶
一句話:讓 DSH 的 workspace 指向 WSL 發行版內的目錄,並把該 workspace 的終端和 agent 工具放到 Linux 一側執行。
已有做法的問題在於,Windows 路徑下的 workspace,agent 執行 bash 時用的是 Windows 側的工具鏈;而 WSL 項目的工具鏈在發行版裏,兩邊路徑、環境變量、文件系統視圖都不同。這個插件不需要你在項目里加任何包裝腳本,裝好之後在挑選目錄的對話框裏多一個選項。
核心功能¶
入口。 側欄 workspace 頭部的「+」和新會話頁的「Add workspace」共用同一個添加流程。對話框先問文件夾從哪裏來,第一項 Local folder 是原有的 Windows 目錄選擇,行爲不變;第二項 Connect WSL 是新加的行,展開後選擇發行版。
選發行版。 Connect WSL 對話框列出本機所有發行版(包括已停止的),並顯示運行狀態,右上角可以刷新。列表通過 wsl.exe -l -v --all 枚舉,自動識別 UTF-16LE 輸出,* 標出默認發行版,列表緩存 5 秒。
選項目。 選定發行版後,瀏覽從該發行版的默認用戶 $HOME 開始。麪包屑(如 Ubuntu / home / me)可點擊;搜索框過濾當前層級,也可以直接輸入 Linux 路徑跳轉;可以切換是否顯示隱藏文件夾;選中當前目錄後點 Confirm。
註冊爲 workspace。 Linux 文件系統上的項目註冊爲 \\wsl.localhost\<distro>\<path>(會自動探測 \\wsl$ 兜底形式)。/mnt/<drive>/... 下的項目則註冊爲真實 Windows 路徑(如 D:\work\proj),因爲 WSL 的 9P 共享不允許訪問 /mnt,只有真實盤符路徑可讀可寫,插件會記住它來自哪個發行版。註冊完成後,新會話裏它就是一個普通 workspace,只是執行平面不同。
發行版內的終端。 該 workspace 打開側欄終端時,實際執行的是 wsl.exe -d <distro> --cd <linux path>,即發行版的登錄 shell,起始目錄就是項目目錄。
發行版內的 agent 工具。 該 workspace 的會話中:
| 工具 | 行爲 |
|---|---|
bash |
在發行版內執行 bash -lc,workspace 爲默認目錄,每次調用都是新的 shell |
read / write / edit |
使用 Linux 路徑;寫入和編輯通過臨時文件加 rename 原子發佈(WSL 的 9P 共享不支持 DSH 原生的硬鏈接發佈) |
glob / grep |
在發行版內用 globstar / GNU grep 搜索 |
WSL workspace 裏會隱藏 Windows PowerShell 工具;普通 Windows workspace 不受影響。
安裝與啓用¶
從 DSH 的 Plugins 頁面安裝本地目錄,或者用命令安裝:
dsh plugin --profile web add github:MFJip612/dsh-remote-wsl
倉庫裏只有 TypeScript 源碼。安裝本地目錄前先執行 npm ci(會自動構建)或 npm run build。通過 GitHub 安裝時構建由 prepare 觸發;如果 pnpm 阻止了構建腳本,按安裝器提示在對應 profile 的 pnpm-workspace.yaml 裏放行那個確切的包鍵後重試。也可以執行 npm pack,安裝包含編譯產物的 tarball。
也可以在會話裏讓 agent 用插件管理器安裝該目錄。link: 只保證目錄中的文件可讀,不保證正在運行的 Host 會重載代碼。默認配置下,Host 側代碼改動需要完全退出並重啓 DSH,瀏覽器側改動只需刷新頁面。DSH 默認 HMR 配置是 root: [],只監聽配置文件。如果退出提示說有正在運行的任務,等它結束再重啓。
另外,運行要求 Node >= 24.9.0(見 package.json 的 engines),對 @deepseek-ai/cordis 的 peer 依賴是 >=4.0.5 <5。
配置項¶
在 profile 的 cordis.patch.yml 裏覆蓋插件行的 config:
- id: dsh-remote-wsl
name: 'dsh-remote-wsl'
config:
terminal: true
tools: true
| 字段 | 默認值 | 說明 |
|---|---|---|
terminal |
true |
WSL workspace 的側欄終端是否在發行版內打開 |
tools |
true |
是否爲 WSL workspace 會話啓用 Linux 側工具 |
execTimeoutMs |
15000 |
單次 wsl.exe 調用超時(毫秒) |
distroCacheMs |
5000 |
發行版列表緩存時長 |
maxEntries |
2000 |
選擇器單層目錄返回的最大條目數 |
maxReadBytes |
2000000 |
單次 read 返回的最大字節數 |
defaultDistro |
'' |
預留:默認發行版覆蓋(空 = 用 WSL 默認) |
mountRoot |
'' |
automount 根目錄(空 = 讀發行版的 /etc/wsl.conf,回退 /mnt) |
remote |
false |
是否允許非 loopback 客戶端調用插件路由 |
文件變更與交付卡片¶
發佈前,WSL write / edit 會先進入官方 fs/write-intent / fs/edit-intent,讓 DSH 抓到編輯前內容,成功後記錄 fs/observed。工具結果複用原生 write/edit 的輸出格式、元數據與 diff 呈現;官方 workspace-changes 會在回合結束時生成修改文件列表和對比。只讀、越界、未觀察、版本過期的寫入仍然會被拒絕。
present 繼續使用官方執行器和 deliverables/presented 事件,插件把 Linux 絕對路徑、相對路徑、~/、掛載盤路徑轉換成 Windows 可訪問的路徑,保留描述、文件數上限、普通文件校驗和點擊預覽/打開行爲。指向其他發行版的 UNC 路徑會被拒絕。
修改文件列表會自動彙總文件工具成功改動的內容;單獨的文件卡片仍由模型調用 present 發出,插件不會爲每次源碼改動自動髮卡片。如果文件只通過 bash 改動,非 Git 目錄缺少文件工具的預抓取,需要單獨卡片時應顯式讓模型調用 present。
實現要點¶
入口占用官方 workspace 組件聲明的兩個單例槽位:sidebar.workspaces.directoryFlow 和 conversation.hero.workspace.directoryFlow,渲染自己的 Local folder / Connect WSL 選擇器,priority 比官方佔用者低,對話框畫在 shell.overlay。選擇 Local folder 時調用官方 ctx.uiWorkspace.pickDirectory()(或桌面端注入的 __DSH_DIRECTORY_PICKER__),原生選擇行爲不變。
Host 側路由:GET /dsh-remote-wsl/{status,distros,warm,list} 和 POST /dsh-remote-wsl/connect,均爲同源 JSON,拒絕跨站請求,默認只允許 loopback;connect 通過官方 workspaceRegistry.create() 註冊 workspace。目錄瀏覽直接走 \\wsl.localhost 共享,共享拒絕訪問時回退到發行版內執行 find。終端包裝官方 subprocess.spawnTerminal,僅當 cwd 落在 WSL workspace 內時替換 argv,其他終端原樣透傳。
適用場景與注意事項¶
適合 Windows 10/11 + WSL2 上開發、且項目實際在 Linux 側構建和運行的用戶,想讓它以當前 dsh 進程權限運行:插件的 Host 路由、subprocess 調用都以啓動 DSH 的賬戶權限執行,remote: true 還會把路由暴露給非 loopback 客戶端,開啓前需要確認網絡邊界。
安裝前應先檢查源碼與許可證(MIT),確認它調用的 wsl.exe 子命令和網絡路由與你的部署環境相符。插件當前在社區目錄標記爲未驗證(status: unverified),倉庫 1 顆星,屬於早期項目,接入生產流程前建議先在隔離環境試運行。
結尾¶
dsh-remote-wsl 解決的問題很具體:讓 DSH 的 workspace、終端和 agent 工具都落在 WSL 發行版一側,而不是在 Windows 和 Linux 之間手工切換。目錄頁:https://www.skillhub.cn/plugins/MFJip612/dsh-remote-wsl ;源碼與文檔:https://github.com/MFJip612/dsh-remote-wsl 。