前言¶
DeepSeek Harness (DSH) 爲 Agent 開發提供了一個統一的 ctx.shell 接口。在 Windows 環境下,開發者經常需要調用 Git Bash 或 WSL 來執行特定的 Linux/MSYS 命令。dsh-win-multi-bash 插件通過引入 shell-select 執行器和額外的模型工具,解決了單一 Shell 接口無法直接調用這些環境的問題,同時保持了對原生 PowerShell (pwsh) 的兼容性。
插件定位¶
這是一個由 Dinosaur-MC 維護的客戶端插件,開源協議爲 MIT。它擴展了 DSH 的 Shell 能力,支持在同一個 ctx.shell 上下文中路由請求至 Git Bash、WSL 和 PowerShell。
核心功能¶
插件主要提供以下能力:
- 模型工具:新增
git_bash和wsl_bash兩個模型工具,分別對應 MSYS 和 Linux 兩種方言。 - 執行器:引入
shell-select執行器,負責將request.shell或默認路由分配給具體的後端。 - 路由策略:默認路由保持爲 pwsh,確保在不調用特定 bash 家族工具時,現有行爲不變。
- 自動檢測:支持自動檢測 Git Bash,檢測順序包括 PATH、註冊表、Git 安裝根目錄佈局等。
- 沙箱支持:支持多種沙箱機制(
auto、bwrap、windows-acl),並支持requireSandbox配置項。
安裝與啓用¶
當前源文本未提供具體的安裝命令字符串。建議通過以下鏈接查看倉庫或插件目錄獲取安裝指引。
- GitHub: https://github.com/Dinosaur-MC/dsh-win-multi-bash
- 技能目錄: https://www.skillhub.cn/plugins/Dinosaur-MC/dsh-win-multi-bash
典型用法¶
配置沙箱要求¶
在 cordis.patch.yml 中,可以爲後端配置 requireSandbox 以拒絕未限制的運行:
# cordis.patch.yml
config:
backends: [git-bash, wsl-bash, pwsh]
default: pwsh
gitBash: { requireSandbox: true }
wslBash: { requireSandbox: true }
啓用 WSL 沙箱¶
wsl_bash 的沙箱機制依賴於發行版內的 bubblewrap。在 Ubuntu/Debian 發行版中安裝:
wsl.exe -d Ubuntu-24.04 -e sudo apt-get install -y bubblewrap
wsl.exe -d Ubuntu-24.04 -e bash -c "command -v bwrap && bwrap --version"
安裝後,必須重啓 dsh web 進程(或觸發 Shell 設置重建)以重新探測沙箱狀態。
路徑轉換處理¶
Git Bash 會自動將 POSIX 路徑轉換爲 Windows 路徑。如果需要將命令原樣傳遞給 Windows 原生程序(如 wsl.exe),需設置 MSYS_NO_PATHCONV=1:
MSYS_NO_PATHCONV=1 wsl.exe -e ls /root
適用場景與注意¶
- 沙箱限制:
git_bash通常無法在 Git for Windows 部署中完全沙箱化,沙箱機制有時會退化爲無限制運行;wsl_bash的沙箱依賴發行版內的bubblewrap。 - 拒絕分類:沙箱拒絕行爲僅在命令退出碼非零時被分類。
- 沙箱範圍:沙箱僅限制文件操作(
workspace-write/read-only),不限制網絡及其他資源。 - 版本要求:插件依賴
@deepseek-ai/cordis及相關 DSH 組件,要求 Node.js 版本爲^22.19.0 || >=24.0.0。 - 路徑兼容:在使用 Git Bash 工具時,MSYS 路徑需轉換爲 Windows 路徑(如
/d/WorkSpace/foo轉D:\WorkSpace\foo)供 DSH 的文件工具使用,反之在 Bash 內部則使用 MSYS 路徑。
總結¶
dsh-win-multi-bash 爲 Windows 下的 DSH Agent 開發提供了靈活的 Shell 路由能力,支持 Git Bash 和 WSL 的集成,並提供了基礎的沙箱防護機制。對於需要在 Windows 環境下混合使用多種 Shell 的開發者,這是一個實用的工具補充。