前言¶
在 Windows 上跑 DeepSeek Harness(DSH)时,内置 Agent 预设默认走 PowerShell(pwsh)。不少脚本、教程和 CI 片段是按 Bash 写的;若不想为终端单独装 WSL,又希望 Agent 能直接执行 Bash 命令,就需要在 DSH 里把 shell 提供方换成 Git for Windows 自带的 Git Bash。
社区插件 dsh-bash-windows(维护者 Very12345,GitHub 仓库 Very12345/dsh-bash-windows)在 DSH 设置页提供「Git Bash」开关:开启后,标准、Code、极简、Cordis 四种内置模式中的 pwsh 工具由 bash 替代;关闭后恢复 PowerShell。插件不再新增独立模式,只替换终端类工具。
这是什么¶
dsh-bash-windows 是 DSH 的 客户端 类插件:通过已安装的 Git Bash 作为 ctx.shell 执行器,让 Windows 上的 Agent 预设可以在不依赖 WSL 的情况下提供 Bash 工具。当前 package 版本为 0.2.5,许可证 MIT。社区目录页:skillhub.cn/plugins/Very12345/dsh-bash-windows。
核心功能¶
设置页开关与按 profile 持久化¶
更新插件并重启 DSH 后,在「设置 → Git Bash」点击开关。开关默认关闭。状态按当前 profile 独立保存到:
$DSH_HOME/git-bash-windows/profile-<hash>.json
切换开关时仅原位更新已有 Agent 的终端工具,不通过宿主 ConfigEditor 重载整个 profile。旧版 cordis.patch.yml 中的 enabled 在尚无独立状态文件时仍可作为初始值。已有四种模式的会话和后续新建的会话都会使用该设置。
四种内置模式下的终端行为¶
只替换终端工具,其他工具不变。
| 模式 | 开启 Git Bash 后 |
|---|---|
| 标准 | Git Bash,逐次执行 |
| Code | 保留原有 run_code 与 PTC SDK;SDK 中的 pwsh 换为 bash |
| 极简 | 单个持久 Bash 终端,工作目录及环境变量可跨调用保留 |
| Cordis | Git Bash,其他 Cordis 配置与工具保留 |
关闭开关只移除 Bash 工具并恢复 PowerShell,不取消已经派发的命令;执行资源在会话结束时清理。极简模式中 PowerShell 与 Bash 各自保留终端状态,切换时不迁移变量或工作目录。
权限与安全提示¶
Git Bash 不能在 Windows ACL 受限 token 下启动。启用后,该终端使用当前用户权限执行,不提供 Windows ACL 文件沙箱;设置页会明确提示。其他工具的权限、审批和执行仍由 DSH 管理。安装或使用前,应自行查看仓库源码与 MIT 许可证,确认是否符合你的安全策略。
与 SSH 插件并存时的切换方式(0.2.5)¶
在 DSH 0.2.0-rc.2 同时启用 SSH 插件时,旧版开关若走 settings.update 并触发 ConfigEditor 整套 profile 协调,可能导致会话服务异常(例如 command directory warmup failed / session/follow)。新版开关独立持久化、原位换工具,不触发该重载链;保存失败会恢复原开关和工具。若宿主已进入失效状态,需完整退出并重启 DSH,仅更新插件无法修复已失效的旧服务实例。
安装与启用¶
环境要求(来自 README):Windows、Git for Windows、DSH 0.2.0-rc.2 或兼容版本;开发环境需 Node.js >= 22。npm 公共仓库尚未发布该 scoped 包,也可 npm pack 后通过 DSH 插件管理器安装本地包。
在 desktop profile 下执行官方安装命令:
dsh plugin --profile desktop add github:Very12345/dsh-bash-windows
安装完成后重启 DSH,在设置中打开 Git Bash 开关即可。从旧版独立「Bash 模式」迁移时,请在四种内置模式中使用新开关;插件不改写旧对话的历史和模式记录。
典型用法:在 Bash 里调用 Windows 命令¶
工具里提交的是 Bash 源码。Bash 双引号会展开 $变量、$_ 和命令替换;从 PowerShell 传入的 $_ 需要先保护好。README 给出可复现示例。
调用 PowerShell,并避免 MSYS 误转换参数:
MSYS2_ARG_CONV_EXCL='*' powershell.exe -NoProfile -Command 'Get-Process | Where-Object { $_.ProcessName -match "Wei" }'
复杂或多行脚本可用带单引号分隔符的 here-doc;非 ASCII 脚本也可用 UTF-16LE base64 的 -EncodedCommand,减轻 Windows PowerShell 输入编码差异:
powershell.exe -NoProfile -NonInteractive -Command - <<'PWSH'
1,2,3 | ForEach-Object { $_ * 2 }
PWSH
MSYS2 可能把 Windows 原生命令的 /FI、/c 等识别成 POSIX 路径。仅对需要的那条命令关闭转换:
MSYS2_ARG_CONV_EXCL='*' tasklist.exe /FI "IMAGENAME eq Weixin.exe" /FO CSV /NH
MSYS2_ARG_CONV_EXCL='*' cmd.exe /d /c "echo ok"
0.2.2 起,上述边界说明会写入四种模式的 Bash 工具描述(含 PTC SDK 与极简持久终端);执行器原样传递命令,不猜测或改写用户的 $ 表达式。
适用场景与注意¶
适合:在 Windows 上使用 DSH desktop,已安装 Git for Windows,希望 Agent 在标准 / Code / 极简 / Cordis 预设里统一用 Bash,而不引入 WSL。
注意:
- 插件以当前 DSH 进程及启用 Bash 后的用户权限运行终端命令,无 ACL 沙箱;敏感环境请先审源码。
- 极简模式在 PowerShell 与 Bash 间切换时,目录与环境变量不会互相迁移。
- 社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系;安装命令与行为以 GitHub README 为准。
结尾¶
dsh-bash-windows 把「Windows + DSH + Git Bash」收成设置里的一键开关,覆盖四种内置模式,并针对 MSYS 与 PowerShell 互调给出了文档化示例。若你在 Windows 上维护 Agent 工作流,可从目录页或仓库 README 安装,按 profile 打开 Git Bash 后再开新会话验证终端工具是否为 bash。
- 目录页:https://www.skillhub.cn/plugins/Very12345/dsh-bash-windows
- GitHub:https://github.com/Very12345/dsh-bash-windows