편집자 노트

3223698962/dsh-msys2-bash-executor

Standalone configurable MSYS2/UCRT64 and Git Bash executor for DeepSeek Harness, with global or per-preset activation

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.

dsh-msys2-bash-executor

English

这是一个面向 Windows 的独立 DeepSeek Harness Bash 执行器。它可以通过 MSYS2/UCRT64 Bash 或 Git Bash 执行 agent 的 shell 调用,并在 DSH Web 设置页提供可视化配置。

本包不依赖 dsh-anchored-standarddsh-anchored-standard-bash。插件会在隔离的 shell realm 中注册一个全局 Bash 工具,然后按全局开关或 preset ID 决定哪些新会话可以看到它。

功能

  • 通过 DSH 的受管 subprocess 服务直接传递 argv,不使用 Node 的 shell: true
  • 自动检测 MSYS2、UCRT64、Git Bash 和 PATH 中的 bash
  • 可配置 Bash 路径、参数、PATH 前置目录和环境变量。
  • 支持前台超时、取消、输出限制、溢出文件、后台任务、增量读取和进程树终止。
  • 可为 Standard、Code、Cordis、Minimal 和自定义 preset ID 分别启用。
  • 可用一个全局开关为所有预设启用 Bash。
  • Minimal 启用时会覆盖其内置持久 Bash 工具,绕过 Windows 不支持的 terminal inspection 路径。
  • 未启用 Bash 的预设仍保留 Host PowerShell provider。

安全说明

本执行器没有沙箱。命令以 DSH 进程的完整用户权限运行,等价于 danger-full-access,不具备默认 PowerShell 沙箱的 Windows ACL 隔离。

请只在可信提示词、可信仓库和可信工具环境中使用。

从本地压缩包安装

目前暂不发布到 npm,可在本地检查并打包:

npm.cmd run check
npm.cmd pack --cache .npm-cache
dsh plugin --profile web add "C:\path\to\dsh-msys2-bash-executor-0.1.1.tgz"

从 GitHub 构建:

git clone https://github.com/3223698962/dsh-msys2-bash-executor.git
cd dsh-msys2-bash-executor
npm.cmd install
npm.cmd run check
npm.cmd pack --cache .npm-cache
dsh plugin --profile web add "C:\path\to\dsh-msys2-bash-executor-0.1.1.tgz"

安装或更新后重启 dsh web。启用范围仅对新建会话生效,运行中的会话会保留创建时的工具集合。

在 DSH Web 中配置

打开“设置”,进入“插件”的可配置插件页,在 MSYS2 / Git Bash 卡片中设置:

  • 为所有预设启用 Bash:所有新会话显示 bash 并隐藏 pwsh
  • 按预设启用:关闭全局模式后,可分别控制 Standard、Code、Cordis、Minimal,或填写其他 preset ID。
  • Bash 可执行文件:例如 C:\msys64\usr\bin\bash.exeC:\Program Files\Git\bin\bash.exe
  • Bash 参数:命令之前传入的 JSON 数组,通常是 ["-c"]
  • PATH 前置目录:每行一个 Windows 路径。
  • 环境变量:值为字符串的 JSON 对象。

UCRT64 典型配置:

Bash 可执行文件:
C:\msys64\usr\bin\bash.exe

PATH 前置目录:
C:\msys64\ucrt64\bin
C:\msys64\usr\bin

环境变量:
{"MSYSTEM":"UCRT64","CHERE_INVOKING":"1"}

设置保存在插件独立的 msys2-bash 命名空间中,不会与 Host PowerShell provider 的 shell 设置冲突。由于 DSH 0.1.0-rc.6 的通用设置 API 只开放固定的内置命名空间,Web 卡片通过插件自己的类型化 Remote 读写该配置,因此无需修改 DSH 核心白名单。

启用机制

插件 bundle 在 Host 层挂载隔离的 Bash executor 和 @deepseek-ai/dsh-tool-bash。每个新 agent 创建时按实际 preset ID 应用策略:

  • 已启用的预设:显示全局 bash,隐藏继承的 pwsh
  • 未启用的预设:当全局 bash 原本可见时将其隐藏。
  • Minimal 已启用:在 agent 最近的工具层重新注册全局 Bash 定义,覆盖内置持久终端工具。
  • Minimal 未启用:保持原有持久 Bash 工具不变。

Minimal 的特殊规避意味着启用独立执行器后,cd、shell 变量等状态不会在多次调用之间保持。若以后需要 Windows 持久会话,需要单独实现基于 Windows PTY 的终端后端,不能继续使用当前报错的 dsh-subprocess-local terminal inspection 路径。

在预设中手动挂载

全局/逐预设机制通常不需要修改 preset。若要让某个可移植预设显式携带执行器,可在 agent.cordis.yml 中加入:

- id: shell-bash
  name: cordis:group
  group: true
  isolate:
    shell: true
  config:
    - id: msys2-bash-executor
      name: dsh-msys2-bash-executor/bash-executor
      disabled: !!js process.platform !== 'win32'

    - id: tool-bash
      name: '@deepseek-ai/dsh-tool-bash'

必须隔离 shell,否则会与 Host PowerShell provider 重复注册 ctx.shell

自动检测顺序

当 Bash 路径留空时,依次检查:

  1. DSH_BASH_PATH
  2. MSYS2_ROOTMSYS_ROOT
  3. C:\msys64\usr\bin\bash.exeC:\msys64\ucrt64\bin\bash.exe
  4. Program Files 和 Local AppData 中的 Git Bash。
  5. Windows PATH 中的每个目录。
  6. 命令名 bash

作用范围

本插件只调整 DSH Web profile 中 agent 的工具可见性,不会自动修改外部 Codex CLI 或 Claude Code 子进程 provider。后两者需要各自配置 shell 或环境,但也可以独立调用同一个 MSYS2/Git Bash 程序。

开发

npm.cmd run build
npm.cmd test
npm.cmd run check
npm.cmd run pack:dry

src/client.js 是浏览器端源码,scripts/build-client.mjs 会生成 DSH Web 使用的 lib/client.js

排障

  • 启动 DSH 时应优先使用 Windows 原生 Node;当前 DSH Windows 启动器与 MSYS2 构建的 Node 不兼容。
  • Bash 进入错误的 MSYS2 子系统时,请设置 MSYSTEM 并前置对应工具链目录。
  • 设置页应填写 Windows 路径,因为最终由 Windows Node 启动可执行文件。
  • 本执行器不会产生 Node DEP0190 警告,因为它不设置 shell: true

许可证

MIT,详见 LICENSENOTICE

REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

저장소가 MIT 라이선스를 선언했습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.