dsh-all-gitbash:把 Windows 上的 PowerShell 执行改道 Git Bash

前言

DeepSeek Harness (DSH) 在 Windows 平台默认使用 PowerShell 作为执行环境。AI 在编写涉及路径、管道、变量 $VAR 和条件判断的 POSIX 语法时,使用 Bash 通常比 PowerShell 更顺手。然而,DSH 的默认配置 (dsh-base) 在 Windows 上会禁用 Bash 栈,迫使模型必须写 PowerShell。dsh-all-gitbash 插件通过运行时改道,让模型从第一轮对话起就只看到 bash 工具,实际执行的是 Git for Windows 的 MSYS 环境,从而解决这一适配问题。

核心功能

该插件主要实现以下功能:

  1. 运行时改道,免重启:不修改 composition 或 profile patch,通过注入方式替换执行器,热重载/卸载即可还原。
  2. 模型侧原生 bash:从工具注册表中移除 pwsh 工具,注册原生 bash 工具。模型看到的工具描述与 Linux 会话完全一致,无 Windows 或 MSYS 字样。
  3. 命令翻译兼容层:自动处理模型偶尔习惯的 PowerShell 语法。包括 $env:NAME → ${NAME}、C:\... → /c/...,确保命令在 Git Bash 中正常运行。
  4. 诚实的沙箱门控:MSYS 在受限令牌沙箱内无法启动(signal pipe)。插件在受限模式下会快速失败,并给出升级指引,不会绕过沙箱边界。
  5. 一键开关:通过 Web 设置面板的滑块或 ~/.dsh/settings.yaml 配置文件,可以随时开启或关闭 Git Bash 模式,重启后保持状态。

安装与启用

持久安装(推荐)

通过 DSH 的插件系统安装,重启后会自动装配:

dsh plugin --profile web add @icelily/dsh-all-gitbash

临时注入(开发测试)

无需重启 DSH,在会话内直接注入:

# 1. 构建(零依赖)
npm run build

# 2. 在 DSH 会话内注入
dev_inject_plugin {"dir": ".../dsh-all-gitbash"}

典型用法

启用后,模型会直接编写 Bash 命令。你可以直接运行标准的 npm 脚本:

npm run build
npm run test

配置说明

插件的配置主要在 ~/.dsh/settings.yaml 中管理,核心字段如下:

dsh-all-gitbash:
  enabled: true            # 总开关:false 时还原为原装 pwsh
  sandboxGate: true        # 受限沙箱下快速失败并提示升级
  translateEnvVars: true   # 启用 $env:NAME -> ${NAME} 转换
  translateDrivePaths: true # 启用 C:\... -> /c/... 转换
  registerBashTool: true   # 注册原生 bash 工具
  disablePwshTool: true    # 从模型工具面移除 pwsh 工具

注意事项与兼容性

  1. 平台限制:仅支持 Windows 平台。
  2. 依赖要求:依赖 Node.js >= 20。
  3. 沙箱限制:MSYS 在受限令牌沙箱内无法启动,建议在 Git Bash 会话中使用 danger-full-access 权限以获得最佳体验。
  4. 兼容性:与 dsh-gitbash-preset 兼容,两者可同时安装。本插件主要作用于完整模式的 Web 会话,而 preset 主要作用于极简模式。

结语

dsh-all-gitbash 通过将 Windows 上的 PowerShell 执行栈重定向到 Git Bash,解决了模型在 Windows 环境下编写 POSIX 代码的阻抗不匹配问题。它通过运行时改道、命令翻译和工具面重构,为 Windows 上的 DSH 开发提供了一个接近 Linux 原生体验的解决方案。

羽毛球分组比赛记分
小程序二维码

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

小夜