DSH 在 Windows 上默认暴露 pwsh,禁用官方的 bash 工具。社区中常见的解决方案(如 Git Bash 或直接使用 WSL 发行版)存在隔离性差、状态残留或难以集成官方权限预设等问题。dsh-shell-wsl 插件通过在 disposable Docker 容器中运行 bash 命令,解决了这些痛点。它不需要模型感知任何新的工具,模型继续调用官方的 bash 工具,但底层执行环境被替换为真实的 Linux 容器。
核心功能¶
- 容器化执行:在 disposable Docker 容器中运行 bash 命令,每次调用后自动销毁容器,确保环境无污染。
- 真实 Linux 环境:提供真实的 Linux bash 执行环境(基于 WSL2 kernel + Ubuntu 24.04),支持 Linux 二进制和标准进程语义。
- 权限预设集成:自动集成官方权限预设,根据会话策略(如 read-only 或 workspace-write)自动配置挂载权限。
- 零工具层变更:模型继续使用官方 bash 工具,无需学习新的接口或工具定义。
- 宿主机运行:插件本身运行在宿主机进程中,不受 agent 工具沙箱影响。
前置条件¶
在使用此插件前,请确保满足以下条件:
- Docker Desktop:在 Windows 上运行 Docker Desktop(需使用 WSL2 backend),且
dockerCLI 命令可用。 - 镜像预热:需要先执行
docker pull ubuntu:24.04,以避免首次调用时的超时。 - WSL2 发行版:若使用
wsltransport,需在 WSL2 中安装至少一个发行版(如 Ubuntu)。
安装与启用¶
1. 安装插件
dsh plugin --profile web add dsh-shell-wsl
2. 启用预设
安装后,需要启用 WSL 容器预设以激活功能。在 Web UI 中,可以通过以下脚本启用默认预设:
powershell -ExecutionPolicy Bypass -File <plugin dir>\scripts\install-preset.ps1 -SetDefault
或者手动将 presets/wsl-container/ 目录复制到 ~/.dsh/.agent-presets/wsl-container/,并在 Web 设置页面切换默认预设为 WSL 容器模式。
配置¶
1. Bash 超时配置
在 ~/.dsh/settings.yaml 中设置 Bash 命令的超时时间:
bash:
timeoutMs: 120000
2. Shell 属性配置
在 cordis.patch.yml 中修改 shell-wsl 的配置项,例如切换传输方式或容器镜像:
- id: shell-wsl
config:
transport: docker-cli
image: ubuntu:24.04
适用场景与注意¶
此插件适合需要在 Windows 环境下进行 Linux 开发、测试或自动化任务,且对环境隔离和权限控制有要求的场景。
注意事项:
* 插件以宿主机进程权限运行,请确保安装前检查源码与许可证。
* 依赖 Docker Desktop 服务,无法在纯 WSL 内部通过原生 WSL 调用 Docker 时使用 wsl transport。