修复内置插件跨进程开关与不确定执行阻断

让 Runner 和 CLI 查询持久化开关并即时感知 GUI 状态更新
让隔离 MCP 经现有工具桥获取可用工具,并将开关纳入会话缓存标识
在执行入口复查禁用状态,固定原生函数缓存构建使用的工具快照
修复损坏开关文件保存成功后仍保持关闭的状态
保留插件执行结果不确定的结构化回执和宿主适配器阻断,拒绝并发积压与自动重发
新增跨进程工具目录、热切换、坏文件恢复及不确定执行回归测试并同步文档
This commit is contained in:
2026-09-10 21:37:51 +08:00
parent dd36de3aa6
commit 02ff914bd3
14 changed files with 564 additions and 47 deletions
@@ -64,6 +64,8 @@ DirectProject 的现役 `agc_tools` 目录通过 Windows `cocos-editor-execute`
Rust 客户端在写入前通过 `GetNamedPipeServerProcessId` 验证 pipe 属于目标 PID,读写使用 overlapped I/O 和 deadline。execute 开始写入后遇到断线、超时或无可信回执,返回 `ExecutionUncertain`,Runtime 进入 `needs-reconciliation`,不得自动重放。客户端超时不等于 JavaScript 已取消,bootstrap 保持同一串行队列直到原执行结束;同步死循环仍可能阻塞 Creator,需要真实集成阶段提供运行时中断方案。
插件 `EditorAdapter` 将执行结果不确定保留为结构化 `status=needs-reconciliation / retryAllowed=false / ok=false`,并在适配器实例中阻断后续 execute;断开连接、重新连接、插件进程重载或切换项目均不清除此阻断。必须由用户核对编辑器状态后重启客户端,不能自动恢复或重试。发送前的校验/连接失败仍为可修正的普通失败。插件入口同样在宿主 RPC 超时、断线或收到不确定结果时停止发送后续 execute,并保留结构化状态。
## 安全与失败关闭
- PowerShell 查询脚本为固定常量,用户输入不拼接进 shell。
@@ -76,6 +76,8 @@ OpenAI 的标准模型是“Plugin 作为可安装包,组合 Skills、可选 M
唯一的开关入口是 Tauri 命令 `set_agc_plugin_enabled`,它只接受登记过的内置插件 id;导入扩展继续使用既有 `set_client_extension_enabled`。
开关文件是跨进程权威:GUI、Runner 与 CLI 在查询和执行时读取其绑定 AppData 下的当前文件;未知配置根、文件损坏或版本不支持时关闭能力,成功保存有效开关后立即恢复。隔离的 MCP 子进程通过现有客户端工具桥查询可用工具,不获得 AppData 路径或目录权限;查询失败按空插件工具集处理。开关变化进入 app-server pool identity,使后续回合重建工具目录;已发给模型的上下文不回撤,执行入口仍实时拒绝已禁用工具。
## 运行和 RPC
宿主以已安装插件目录为 cwd 启动入口;JavaScript 入口使用系统 `node` 执行,其它入口直接执行。环境先清空,再保留 PATH、Windows 系统目录和临时目录等必要变量,并注入插件身份和协议版本;不继承客户端凭据。Windows 复用进程模块的 Job Object,Unix 使用独立进程组,停止/卸载时回收自有进程。