Changelog

August 16, 2026 · View on GitHub

本插件采用语义化版本(SemVer)。

[0.1.0] - 2026-08-17

首个可用版本:Windows 上所有 pwsh 命令执行改道 Git for Windows bash。

新增

  • 执行器改道:实例级替换已挂载 SandboxPwshExecutorargv()[gitBash, '-c', 翻译后命令],前台 / 后台 / 沙箱链三条路径全部生效;
  • 原生 bash 工具:镜像官方 dsh-tool-bash 注册 bash 工具(win32 上官方行被禁用, 名字空闲),含沙箱升级面、后台任务、终端卡片;
  • pwsh 工具禁用:tools registry 全部层(每个 agent 预设各一份)的 pwsh 定义直接 删除——模型工具面只剩 bash,不会先调 pwsh 报错再换 bash;卸载/关开关时原样恢复;
  • Linux 对齐净化:bash 工具描述与提示词段落逐字对齐官方 Linux 版(无 pwsh / PowerShell / MSYS / Git for Windows / $env: / /c// 字样);官方 tool:pwsh 提示词 section 一并删除;翻译兼容层仅执行层生效、不进模型提示;
  • 双路径心智收敛:提示词建议 forward-slash path form(中性措辞,Linux 无感)—— 盘符:/... 是 Node fs 与 MSYS bash 两域交集语言,模型写路径一步到位;
  • 一键开关:settings 命名空间 dsh-all-gitbash.enabled + Web 设置面板 General 页 滑块开关(client 半区注入 settings.general.item 插槽,经 /api/dsh-all-gitbash 读写);
  • 命令翻译:剥离 dsh-pwsh-local UTF-8 preamble、$env:NAME${NAME}C:\.../c/...(整 token,含后续反斜杠);
  • 沙箱门控:受限模式(read-only/workspace-write)快速失败并给出 danger-full-access 单次升级指引(MSYS 在受限令牌内无法启动 signal pipe);
  • PATH 垫片~/.dsh/dsh-all-gitbash/bin/{pwsh,powershell} → git bash 脚本, git bash 会话内敲 pwsh 也进 git bash;
  • 提示词段落:order 120 声明命令工具 = Git Bash,模型原生写 bash。

修复

  • createToggle 重构:装配/拆卸收进同一 disposer 列表,关开关 / 热重载 / 卸载三路共用清理;
  • client 设置行 inject face 契约修正(无 hooks 键时 face 整体即 props,勿再包一层);
  • 设置行读写改走插件自有 webServer 路由(apiproxy 白名单不暴露插件命名空间);
  • 注入器 pkgMeta 缓存污染修复(refreshClientRow 每次重新解析包元数据)。

踩坑记录(给后来的自己)

  1. tools registry 按 agent 预设分层pwsh 工具在每层各一份,全局 get() 看不到, 需遍历 layers.scoped 全层 patch;
  2. ctx.shell 属性访问需 inject:bash 工具 execute 报 cannot get property "shell" without inject
  3. client 设置行的 inject face{ props: {...} } 会被 cachedSlotInject 原样当 props, 组件收到 props.props.scope → scope undefined → 渲染崩溃 → 条目被标 abdicated 不显示;
  4. settings 白名单:apiproxy exposedNamespaces() 只暴露白名单命名空间, 插件命名空间 describe 被过滤、mutate 被拒 → 自建 webServer 通道;
  5. 垫片脚本内层 s/// 会重置捕获变量(外层 /e 丢空格)→ 用 tr
  6. MSYS 受限令牌:git bash 在 workspace-write 沙箱内无法启动(signal pipe), 必须门控到 danger-full-access。