Repository navigation
v0.39.1 — 私有执行器服务隔离(#19/#20)+ gb_glob 数组 pattern 守卫修正(#21)
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的 globpattern是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 的「静默当全部文件」实测即单一探针结论)。