Skip to content

v0.39.1 — 私有执行器服务隔离(#19/#20)+ gb_glob 数组 pattern 守卫修正(#21)

Choose a tag to compare

@KannaKuron KannaKuron released this 13 Oct 05:03
· 11 commits to main since this release

v0.39.1 — 2026-10-13

类型:fix(route B 私有执行器的真实服务隔离与读取授权) / test / ci。

  • 根因:普通 ctx.plugin() 子 fiber 只隔离副作用所有权,不隔离服务命名空间。
    GitBashSandboxExecutor 仍经 SandboxBashExecutor → LocalBashExecutor → ShellExecutor → Service
    注册 shell,与 route B 保留的 SandboxPwshExecutor 冲突,报
    service "shell" has been registered at <SandboxPwshExecutor>;bash 工具尚未注册即中断。
    Git Bash 路径已成功解析时同样发生,不是工具发现或路径探测问题。
  • 修复:mountPrivateExecutor 仅对 shell 调用 ctx.isolate('shell'),其余宿主依赖原样继承;
    类插件仍走官方 plugin() 通道,Config/volatile/static inject 与生命周期不变。
    空 scope 通过 get('shell') 读取活跃私有实例,工具就绪检查用 get('tools'),避免
    缺少 inject 声明的属性访问再度中断补位。失败时销毁已建 scope,成功/失败均清理挂载计时器。
  • 边界:不撤官方 PowerShell 执行器、不改 bundle patch、不改 shell 执行/沙箱/后台协议,
    不抬 Core 兼容下限,不发版、不触发 npm 发布。
  • 回归:新增 5 项真实 Cordis 测试,覆盖普通子 scope 冲突、显式隔离后的 Config/inject 与
    根 shell 保留、卸载、构造失败清理/再挂载、缺服务失败与挂载超时清理;不是仅正则源码检查。
    既有 minimal PTY 测试的非 Windows 断言现在显式模拟 Linux,不再在恢复 win32 后误断言 /bin/bash。
    首轮远端 CI 发现两项独立 error-content 测试误嵌套在父测试中,Node 22 会取消未等待的子测试;
    恢复独立结构并保留全部断言,不跳过测试、不移除 Node 22 矩阵。
  • 验证入口:npm test 合并 smoke 与真实 Cordis 回归;新增 npm run test:preview,通过
    显式 DSH_PREVIEW_HOST_DIR 只读解析目标宿主包,在新 Context + 临时 cwd 做无头运行时 preview。
    Windows 本机已通过:Core 0.2.1-alpha.2,宿主 Cordis 4.0.5-alpha.1,Node 24.13.0;
    原路径真实重现服务冲突,修复后 bash 出现在实际 ToolRuntime schema 中并执行
    command -v bash/uname -s/sentinel(退出码 0),官方 pwsh 执行 Get-Process,
    pwshTool 开/关两态与卸载恢复均通过。不等同于完整 GUI、PTY、后台任务或受限模式验收。
  • CI:新增非发布 ci 工作流(push 修复分支 / PR / 手动触发),Windows/Linux × Node 22/24,
    锁定依赖、禁止生命周期脚本与可选载荷、完整测试及 npm pack --dry-run --ignore-scripts。
    本机完整测试 127/127 通过,打包预检与 git diff --check 通过;远端矩阵结果见对应 PR 检查。
    复验命令和覆盖边界见 tests/README.md。
  • gb_glob 守卫封杀了上游主用法(#21,同日报告):
    上游 tools/list 的 glob pattern 是 string | string[] 的 untagged enum——数组才是主形态
    (schema 示例本身就是数组),v0.38.5 的只认字符串守卫把它一并拒绝;且模型常把数组 JSON 序列化后
    传入(实测 25 次调用 24 次为 ["*.txt"] 字符串),上游按一个字面 glob 匹配 → 静默返回空
    ——恰好是守卫要防的「静默错误答案」。修法(validateFastctxPattern,提取为纯导出函数):
    glob 接受非空字符串或非空字符串数组;字符串化数组响亮报错并给出正确形状(绝不代模型反序列化
    ——那会掩盖错误);replace 维持单正则字符串契约;其他类型报错带类型名。gb_glob 的 description
    增补 pattern 形状声明(模型侧修正源)。教训:给上游加防御守卫必须从 tools/list 的
    inputSchema 原文出发,单一探针会误判(v0.38.5 的「静默当全部文件」实测即单一探针结论)。