Skip to content

Releases

v0.1.3 - rewrite bash at the spawnSpec choke point

Choose a tag to compare

@Fishquito7 Fishquito7 released this 24 Sep 06:11

v0.1.3 — 修复 dsh 0.1.7-rc.1 之后 bash 工具失效

根因

  • dsh 0.1.7-rc.1 把 dsh-bash-local 的子类缝从 run/start + runArgv/startArgv 换成了 execute/executeArgv。
  • 旧版插件只覆盖了旧名字,于是基类的 execute()(写死 ["bash", "-c", …])被执行;裸 bash 在 Windows 上命中 C:\Windows\System32\bash.exe(WSL 启动器),报 WSL2: 找不到指定的路径 / HCS/ERROR_PATH_NOT_FOUND(默认发行版的磁盘文件已不存在)。

修复

  • 替换点上移到 spawnSpec:无论上游走 execute → executeArgv 还是 run/start → runArgv/startArgv,argv 最后都要经过 spawnSpec(spec, argv, …) 落成 spawn 配置。只依赖这个收口点,上游再改入口名字也不会退回裸 bash。
  • 入口方法仍覆盖一层(execute / run / start)作为第二道保险。
  • 首次执行自检:走一遍工具层同款的公开路径(resolve → execute → result),确认 shell 是 Git Bash 并把身份写进日志;万一上游连收口点都换掉,日志里会出现 self-check FAILED,而不是让命令输出一片乱码。
  • 只读解析:只读注册表并反推 PATH,不改 PATH、不改注册表、不改 DSH 自身,升级 DSH 后不需要任何重新配置。

升级(重要)

pnpm 不会重新拉取同名依赖,必须先移除再安装:

dsh plugin --profile web remove dsh-git-bash
dsh plugin --profile web add "https://github.com/Fishquito7/dsh-gitbash/releases/latest/download/dsh-git-bash.tgz"

然后重启 DSH。

验证

test/harness.mjs(真实 cordis + 真实 dsh-bash-local,22 项全过),其中:

  • 直接调用基类 execute(模拟上游入口再次改名)仍然命中 Git Bash:base=/usr/bin/bash、MINGW64_NT-10.0-26200
  • spawnSpec 只替换裸 bash,git、绝对路径原样透传,cwd / stdio / graceMs 保留
  • 自检日志:self-check ok
  • 行 config.bashPath 覆盖仍生效

资产

  • dsh-git-bash-0.1.3.tgz —— 带版本号,便于归档与校验
  • dsh-git-bash.tgz —— 稳定别名,已更新为 0.1.3;README 里的在线安装命令始终指向它

两者的 sha256 相同:ebe5868bfd7f331dda8da8d6b51ab0bc5dd354cca910f6e115bf936cad1e3286

v0.1.1 - auto-locate Git Bash

Choose a tag to compare

@Fishquito7 Fishquito7 released this 20 Sep 14:19

v0.1.1 — 自动定位 Git Bash

修复

  • 不再假设 Git 装在 C:\Program Files\Git。 Git for Windows 的安装位置因安装方式与用户习惯而异(机器级 / 用户级 / scoop / chocolatey),现在按多级解析链自动定位:
    1. 行 config 的 bashPath
    2. 环境变量 DSH_GIT_BASH
    3. 注册表 HKLM / HKCU 下 SOFTWARE\GitForWindows 的 InstallPath(与安装位置无关的权威来源)
    4. %ProgramFiles%\Git\bin、%ProgramFiles(x86)%、%ProgramW6432%
    5. %LOCALAPPDATA%\Programs\Git\bin(用户级安装默认位置)
    6. scoop、chocolatey
    7. PATH:各项下的 bash.exe,以及 git.exe 同级的 ..\bin\bash.exe(Git 安装器默认只把 Git\cmd 放进 PATH,从不放 Git\bin)
  • 显式指定的路径会被校验:bashPath / DSH_GIT_BASH 指向不存在的文件时,报出可操作的错误,而不是裸 ENOENT 崩溃。
  • 找不到时不会退到 WSL 的 bash(另一个内核里的 Linux 进程,语义不对),而是列出所有尝试过的路径。
  • 挂载时记录实际使用的 bash.exe,便于排查。

升级(重要)

pnpm 不会重新拉取同名依赖,必须先移除再安装:

dsh plugin --profile web remove dsh-git-bash
dsh plugin --profile web add "https://github.com/Fishquito7/dsh-gitbash/releases/latest/download/dsh-git-bash.tgz"

然后重启 DSH。

资产

  • dsh-git-bash-0.1.1.tgz —— 带版本号,便于归档与校验
  • dsh-git-bash.tgz —— 稳定别名,已更新为 0.1.1;README 里的在线安装命令始终指向它

追加修复(同版本内更新)

  • 解析结果只在进程内缓存一次,但每次使用前都会复核:如果 Git 被卸载、搬到别处或路径失效,会自动重新走一遍解析链;解析到新位置就继续用,解析不到才报错。
  • 报错会指出「之前用的那条路径已经不存在」,并列出这次尝试过的全部候选,而不是裸 ENOENT。

v0.1.0 - dsh-gitbash

Choose a tag to compare

@Fishquito7 Fishquito7 released this 20 Sep 13:14

v0.1.0 — dsh-gitbash 首个版本

在 Windows 上给 DSH 一个真正的 bash 工具:命令直达 bash -c,不再经过 PowerShell 转义。

亮点

  • 无需新增或切换预设:装到 profile 层,ptc / standard / cordis 都不用动,所有会话直接生效
  • 直接进入可调用工具列表:native 下多一个 bash 函数定义,PTC 下自动多一个 tools.bash(...) 绑定
  • 无额外转义:$(...)、通配符、单引号字面量、反斜杠全部按 bash 规则解释
  • bash 与 pwsh 由模型自选:两者并存、互不影响
  • 零依赖:工具与渲染完全复用上游 @deepseek-ai/dsh-tool-bash,进程能力复用 dsh-bash-local,本插件只换 argv

安装

dsh plugin --profile web add "https://github.com/Fishquito7/dsh-gitbash/releases/latest/download/dsh-git-bash.tgz"

重启 DSH 后生效(新模块根不在热重载范围)。

验证

bash -c 'echo "$0"; uname -s; echo "$BASH_VERSION"'
# /usr/bin/bash · MINGW64_NT-... · 5.3.9(1)-release

已知限制

  • 不接文件沙箱:Git Bash 是 MSYS2 进程,Windows 受限令牌下不可靠,故以 DSH 进程权限执行
  • 依赖上游 dsh-bash-local 的 argv 替换缝,DSH 大版本改动该接口时需同步更新
  • 仅 Windows 需要(POSIX 上 DSH 自带 bash 工具)

资产说明

  • dsh-git-bash-0.1.0.tgz —— 带版本号,便于归档与校验
  • dsh-git-bash.tgz —— 稳定别名,README 里的在线安装命令永远指向它