Skip to content

修复:route B 工具接线、动态配置与异步卸载回归 - #22

Merged
KannaKuron merged 1 commit into
KannaKuron:mainfrom
KouzakiUmi:fix/route-b-runtime-review
Oct 13, 2026
Merged

KannaKuron merged 1 commit into
KannaKuron:mainfrom
KouzakiUmi:fix/route-b-runtime-review

Conversation

@KouzakiUmi

@KouzakiUmi KouzakiUmi commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

摘要

对 route B 做全面审查后,修复本轮复现并确认的 16 项既有功能/逻辑问题,覆盖预设执行器接线、动态工具面、异步卸载、路径扫描、FastCtx 协议和客户端状态转换。没有新增功能或切换架构。

这是已合并 PR #20 / 已完成 Issue #19 的后续修复,不是重新打开原服务隔离问题。基于上游 v0.39.1 / 521be01,保留 #21 的 glob real-array 契约,不改已发布版本号或发布流程。

提交:6b26ded。

确认的问题与修复

# 触发与实际问题 修复方向
1 Windows 开启三个全工具 Git Bash 变体时,官方 tool-bash 实际委派根 PowerShell,行内补位因已有 bash 跳过 保留官方平台工具门控,Windows pwsh 工具面经同一行内通道补入私有 Git Bash;minimal persistent PTY 不改
2 存活 agent 翻转 pwshTool,schema 与执行/prompt 面不一致 volatile 更新解除并重建自身 restrict,不解除其他 owner 的 mask
3 行内补位等待模块导入时卸载插件,迟到注册失效 bash;调用报 inactive context 生命周期关闭/取消、在途去重与 drain;scope 及时拥有并在失败/退役时清理
4 jobs 服务卸载后,自有 bash 被撤下而前台工具不恢复 按真实 Cordis ACTIVE=2 状态恢复前台工具,卸载/重加不重复登记
5 模块解析降级分支:plain definition 的嵌套 required:true 被真实 ToolRuntime 拒绝 输入/输出递归转换 required 为标准 JSON Schema,保留必填约束
6 模块解析降级分支:审批 helper 不可用时,丢掉会话 standing policy,错误使用部署默认 standing policy 独立解析;缺 helper 只收窄升级能力
7 preset 异步 register 跨越 owner dispose,晚到登记无人注销 closed gate、串行 drain、晚到 unregister 并等待;退役失败可重试且不替代注册
8 动态关闭变体后,部署默认仍指向已退役 preset 先经官方 settings/roster/read-back 迁回官方默认再退役;失败保留当前登记,钉住会话不迁移
9 adoptSidebar 动态 OFF 不恢复接管前值 实例级串行监听与恢复;初始同值不冒领,用户后来手选不覆盖
10 run_code 扫描将关键字后的正则内容误当路径字符串改写 按完整 keyword token 识别;slash/引号不确定时整份 no-op
11 gb_* 入参/全文回显缺少一致的当前 execution 方言门控 两回调传 execution,共用总开关/委托 gate;虚拟挂载关闭时只翻盘根
12 MCP 子进程 spawn 失败无 error 监听,ENOENT 绕过初始化 Promise 子进程和 stdin error/exit 进入 #fail,拒绝 pending、清计时器并关闭失败启动
13 上游 MCP isError:true 被包装成宿主成功 value 对齐官方 MCP 桥:失败抛错,真实 ToolRuntime 标记失败
14 并发 agent 发现/懒连接互相覆盖 client,卸载遗漏连接 discovery/connection single-flight,拥有 starting 集合,closed + drain,不覆盖活跃 lazy client
15 GitBashCard pending→ready 经过 early-return,Hooks 数变化,卡片被边界隐藏 所有 Hooks 前置,pending/ready/unavailable 调用序列恒定
16 工具链进度轮询单次网络/HTTP 错误后永久停顿 暂态失败重试;失效/卸载取消计时器,在途结果不更新失效组件

第 5、6 项通过受控模块解析失败分支复现,不声称当前生产宿主发生导入失败。其余问题有源码链与隔离/真实宿主 API 证据;并非仅修改正则断言取得绿灯。

不变的产品取舍与边界

  • 保留根官方 PowerShell 执行器,不修改 bundle patch,不对 bash 失败做 PowerShell/WSL fallback。
  • 不改变 Windows 受限模式明确标注 unconfined 的既定取舍,也不声称这些修复提供 OS confinement。
  • FastCtx 成功全文路径回显保持原契约;仍是额外 gb_* 文件工具,不替代官方沙箱工具。
  • minimal 的 persistent Git Bash 通道、官方 autoTerminalShell OFF 只停止未来写入的语义保持。
  • 不新增依赖、降低兼容门槛、删断言、跳过 Node 22,或触发 npm 发布。
  • 保留上游 [v0.38.5 / v0.39.0] gb_glob 的 pattern 数组被 v0.38.5 的守卫封杀:合法多 glob 用法报错或静默返回空 #21 的 real string-array glob 用法和 stringified-array 响亮拒绝,并新增执行级回归防止基线合并误退回旧守卫。

验证

检查 实际结果
完整 npm test 156 tests / 156 pass / 0 fail / 0 cancelled / 0 skipped
目标实际 Core 无头 preview 14 tests / 14 pass / 0 fail / 0 cancelled / 0 skipped
语法、diff 与 npm pack --dry-run --ignore-scripts 通过
Windows/Linux × Node 22/24 CI 四组合全部成功:运行记录

真实目标宿主:DSH Core 0.2.1-alpha.2 / Cordis 4.0.5-alpha.1 / Node 24.13.0,Windows;普通可移植回归使用锁定 Cordis 4.0.4。

验证分层:

  • 原 preview 使用真实宿主执行器/ToolRuntime/进程验证 command -v bash、uname -s、sentinel 和官方 Get-Process,原 PowerShell provider 身份不变。
  • 三个全工具变体通过真实 ToolRuntime dispatch 执行 Git Bash uname,返回 MINGW、exit 0,卸载撤下 bash。
  • 新 runtime preview 使用真实 Core/Cordis/dsh-scope 和内存 subprocess,覆盖 schema/dispatch、延迟导入取消、失败重试、plain schema、会话 policy、jobs 前台恢复及 deadline/cancel/provider failure。
  • preset preview 使用真实 Registry/Cordis,activation 为受控延迟;MCP preview 使用真实 ToolRuntime 与受控传输,确认 isError 失败面。
  • UI/并发连接回归是确定性 Hook/网络/传输夹具;不等同于真 Electron GUI、完整生产 PresetTree、真 MCP exe 并发或受限模式端到端验收。

首轮全量测试的三项失败来自旧源码正则仍锁定被修正的实现细节;更新为同一保护意图的精确守卫,并新增侧栏同值不冒领、手选不覆盖两项行为用例。未删除保护断言。两名 Sol 分区实现;Grok 对修复 diff 的只读反证未发现确定遗漏,最终结论仍由实际测试与主代理裁定。

回归入口与文档

检查清单

@KannaKuron

Copy link
Copy Markdown
Owner

已 squash 合并并随 v0.39.2 发布。

Review 结论:16 项全部通过,特别是三处触碰既有产品裁决的地方都处理对了——#8 迁移失败宁可不退役(与「宁多不可少」同源)、#9 用户后来手选不覆盖、#10 不确定即整份 no-op(§4c 铁律的更严格执行)。smoke 的守卫更新也确认是「同意图更精确」,python switch 那个混合世代竞态的锁是好发现。感谢这份持续高质量的审查——已经连续三份了(#20/#22)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants