合并主分支
解决合并冲突
This commit is contained in:
@@ -1592,6 +1592,58 @@ V1.49 已经让 `agent-runtime-core` 能在不依赖 Provider 的情况下独立
|
||||
- core conformance 覆盖第三方 fake Provider 注册/调用、重复与未知 ID、能力不匹配零调用和 stream callback。`platform-llm` 覆盖三种 descriptor、request/response/tool-call/stream/error 双向转换与实例隔离;AGC 覆盖 interaction 实际走 registry 及原 fallback 语义。
|
||||
- 完成后运行 core conformance、`cargo test -p platform-llm --manifest-path server-rs/Cargo.toml`、AGC interaction/config 定向回归、Tauri `cargo check --tests`、`npm run ai-game-creator-shell:check`、`npm run check:encoding` 和 `git diff --check`;独立 core 生成的 `Cargo.lock/target` 交付前清理。
|
||||
|
||||
## V1.51 Codex CLI 节点执行模式
|
||||
|
||||
V1.51 在不替换现有 Provider、Runner 和 Runtime 事实源的前提下增加第二种节点 Agent 执行器。AppData `agentMode` 只接受 `codex_cli / provider`,默认 `codex_cli`;显式 `provider` 继续执行 V1.29-V1.43 的原 HTTP LLM 路径。Runner 不新增模式参数,每次节点请求从当前 AppData 配置解析模式。
|
||||
|
||||
### 执行与协议
|
||||
|
||||
- 每次 Runtime 节点的 tool-plan、格式修复、上下文压缩或 final-reply 请求仍先构建既有 `LlmRunRequest`、捕获同一 Provider snapshot,并进入原 started/completed lifecycle。`codex_cli` 分支启动一次 `codex exec`,把 prompt 经 stdin 输入,把当前函数目录转换为 structured-output schema,并把终态 JSONL 转回现有 `LlmRunResponse / LlmToolCall`。
|
||||
- Codex CLI 只充当推理 Agent,不充当第二个 ToolHost。调用固定使用空临时 cwd、`--skip-git-repo-check --ephemeral --ignore-user-config --ignore-rules --sandbox read-only --disable shell_tool` 和 never approval;不得加载项目 `AGENTS.md`、用户 MCP/plugin/hook 或执行项目命令。所有项目读写、命令、MCP、Canvas、权限、pending、receipt、revision 与 verification 继续由 AGC Runtime 执行。
|
||||
- prompt 和 schema 有界,prompt 只走 stdin,不进入 argv;stdout/stderr 有独立上限,持久审计只保存模式、版本、退出分类、字符数和指纹,不保存 prompt、函数参数、CLI 认证、本机路径或原始错误正文。CLI 非零退出、缺少终态 agent message、JSONL/schema 损坏和超限输出统一失败关闭并走既有安全错误摘要。
|
||||
|
||||
### 生命周期与恢复
|
||||
|
||||
- Codex child 绑定当前 request future 并设置 drop kill;steer、取消、暂停、Runner draining 和 GUI owner 丢失继续沿现有 Provider interruption 收束。started 后没有 completed 的请求继续进入 `needs-reconciliation`,不得重新启动同一 request slot。
|
||||
- 由于 CLI shell、MCP 和项目写入被禁用,Codex 请求本身没有项目副作用;但其响应交接仍可能处在未知窗口,必须继续使用 V1.41/V1.43 的 handoff 与零重放规则。`agentMode`、CLI 稳定身份和影响输出的 CLI 参数进入 `providerConfigFingerprint`,跨模式或 CLI 漂移必须作废旧 retry/handoff,不能当作同一请求恢复。
|
||||
- 同 wave 并发仍由现有 per-Agent lane 和 scheduler 决定;一个节点只启动一个 Codex 子进程,依赖节点只在原 manifest 终态门满足后启动。CLI 模式不新增 Codex 内部子 Agent,也不把 Codex session 当 AGC Session 或恢复事实。
|
||||
|
||||
### 配置与验收
|
||||
|
||||
- `check_game_creator_llm_config` 在 CLI 模式只检查固定 Codex 可执行文件可启动并返回受支持版本,不要求 LLM API Key;Provider 模式保持既有检查。配置 UI 显示全局模式,始终保留旧 LLM/逐 Agent/MCP/Editor 配置;切换模式不清空任何旧值。
|
||||
- fake Codex fixture 必须覆盖 argv/stdin、structured calls、final text、非零退出、挂起取消、损坏/超限 JSONL、无 shell/MCP 参数和并发节点;真实 smoke 只复用用户已有 Codex 登录态。旧 Provider smoke 继续作为回退模式门禁,不能被新 CLI smoke 替代。
|
||||
|
||||
## V1.52 Codex app-server 长期节点 Agent 模式
|
||||
|
||||
V1.52 保留 V1.51 一次性 `codex_cli` 和原 HTTP `provider`,新增 `codex_app_server` 并切为默认。External Runner 按实际 LLM 凭据、Responses 路由与 `projectId / agentId / sessionId / runId` 为每个权威节点隔离长期 `codex app-server --stdio` 子进程;节点 run 在自己的进程内映射一个 ephemeral Codex thread,每次权威 `LlmRunRequest` 快照映射一个串行 turn。Codex thread 不是持久恢复真相,Runner 重启后仍只依据 AGC lifecycle、retry/handoff、manifest、Agent DB 与 finalization 重建工作。
|
||||
|
||||
### 配置、认证与安全边界
|
||||
|
||||
- `apiKind` 在有无 API Key 时都必须为 `openai_responses`;非空 Key 由 app-server 启动参数注册隔离 model provider,base URL 和 `wire_api=responses` 显式生效,Key 仅通过专用环境变量传入,不进入 argv、日志、项目或指纹明文。`openai_chat / anthropic` 不伪装兼容,配置检查明确要求切换 `provider`。API Key 为空时只使用用户现有 Codex `auth.json` 登录态,model 与 reasoning effort 仍取当前有效 Agent LLM 配置;继承的 `CODEX_API_KEY` 必须移除,避免实际账号与池/账本身份不一致。
|
||||
- app-server 使用带空 `.git` 边界的临时 cwd、隔离 `CODEX_HOME` 和隔离 OS `HOME / USERPROFILE / APPDATA`,让仓库发现停在临时 workspace,并只桥接用户已有 `auth.json`;不得沿临时目录父级加载配置/skills,也不加载用户 `config.toml`、用户 skills、MCP、hooks 或项目 rules。启动前显式设置 `web_search="disabled"`、`agents.enabled=false`,并关闭 shell、unified exec、浏览器、插件、图像、workspace dependency 等原生能力;thread/turn 固定 never approval、read-only、network disabled,并只发送当前 Codex CLI schema 声明的字段。任何 server→client 审批/交互请求失败关闭,任何非被动 item 在 `item/started` 即中止。AGC Runtime 继续是唯一 ToolHost,因此 `webSearchEnabled` 在本模式必须为 `false`;需要原 Provider 联网检索时切换 `provider`。
|
||||
- Pool key 绑定本次实际凭据快照指纹、base URL、API kind、Codex CLI 版本与权威节点 run 身份:非空 AppData Key 指纹绑定实际注入的专用环境变量字节,空 Key 则先一次性读取有界 `auth.json`、按同一份字节生成指纹并复制进隔离 `CODEX_HOME`,登录态变化后不得复用旧池连接。最多保留 32 个节点进程,仅淘汰没有外部 lease 的 LRU 连接。每个连接最多保留 128 个 inactive LRU thread,但正常只服务自己的节点身份。Provider 配置指纹另外绑定模式、CLI 版本、app-server 协议、model/effort、安全参数和 output schema 合同。逐 Agent override 与不同节点不得共享进程。
|
||||
|
||||
### turn、取消与恢复
|
||||
|
||||
- JSON-RPC stdout 使用有界 NDJSON 行,stderr 按固定块排空并对无换行单条记录设置硬上限;两条路径在没有换行时都不得无限增长。stderr 原文不进入错误、Runner 日志或持久记录,只累计固定分类、总字节数与 SHA-256,并同时记录可取得的 exit status。协议继续使用单调 request ID、有界 pending RPC map 与 turn event router;initialize 每个进程 generation 只执行一次。`stream=true` 的 final-reply 把 `item/agentMessage/delta` 转成现有 `LlmStreamDelta`,半句仍只是可丢失展示缓存;只有 `turn/completed` 且最终 agent message 满足 output schema 后才转换为 `LlmRunResponse / LlmToolCall`,随后仍走既有成功 handoff 原子写入和回读。
|
||||
- 当前 request future 被取消、暂停或 drop 时只发送对应 `turn/interrupt`;取消状态从 `turn/start` 写出前就建立,若取消与 turn ID 回包乱序,双方通过共享槽位恰好一次补发 interrupt。异常路径立即删除本地 turn router,orphan pending RPC 在 30 秒后自清理。app-server EOF、损坏 JSON、`turn/start` 回包丢失或已开始 turn 的等待超时属于终态未知,必须进入 `needs-reconciliation`,仅关闭当前节点进程且不得作为瞬态错误自动重放同一 request slot;其它节点进程继续运行。明确 `failed / interrupted` 是确定失败,不做 transport retry。
|
||||
- 执行模式与 Provider 配置指纹必须来自同一次配置快照;不能先捕获 executor、再重新读取 `agentMode` 生成 durable identity。Runner 正常/强制/watchdog 退出都会显式关闭池;Linux 子进程额外设置 parent-death signal,Runner 被 SIGKILL 时也不能遗留持有凭据的 app-server。
|
||||
- 每个 turn 输入仍是 AGC 构建的完整权威消息快照,因此复用 thread 会累计完整轮次历史;这只影响进程内推理上下文和 token,不改变 AGC durable owner。后续若改为增量消息协议,必须另行版本化 request fingerprint 与恢复合同,不能静默改变本模式输入语义。
|
||||
|
||||
### 验收
|
||||
|
||||
- fake app-server 覆盖 initialize、thread/start、turn/start、structured output、delta、turn-start 回包前取消、凭据只进专用环境变量、隔离 OS HOME、原生能力关闭和跨配置/CLI 版本 pool 隔离;定向测试覆盖三态默认/round-trip、unknown terminal reconciliation 与旧 `codex_cli/provider` 回归。真实模型 smoke 为 ignored/显式 opt-in,避免自动消耗用户 Provider。
|
||||
|
||||
## V1.53 Supervisor 运行中非终态回复与 LLM 条件中断
|
||||
|
||||
V1.53 把根 Project Supervisor 的 same-run steer 从“收到消息立即中断”改为“先回复并判断、按需中断”。用户消息仍先进入原 run 的 durable steer ledger 与 conversation;公开确认明确说明正在判断且当前任务继续运行。随后由独立 LLM turn 调用严格 `runtime_steer_decision`,一次返回自然语言 `reply`、`interruptCurrentProvider` 与安全原因。该回复按 steer 身份持久幂等,是制作过程中的非终态对话,不调用 `respond_to_user`,也不关闭 task、Goal、Run 或 finalization。
|
||||
|
||||
- 命令层在 durable 入队后不得先通知或唤醒 External Runner,避免 Runner 抢先消费 steer 后让判定快照漂移。判定为 `false` 或判定失败时,才发送只校验 ledger 并唤醒任务的 `runtime.steer`;该 RPC 必须固定返回 `providerInterrupted=false`。判定为 `true` 时直接发送 `runtime.interrupt_for_steer_decision`,由该 RPC 完成条件中断并唤醒同一 run。本地进程内路径遵循同一顺序。
|
||||
- 状态询问、解释、鼓励、确认和不冲突补充默认不中断;只有明确停止、改向,或继续当前方案会产生明显过期结果时才允许 `true`。判定使用当前有效 `provider / codex_cli / codex_app_server` 模式;app-server 以独立 synthetic 节点运行,不能等待主节点的 turn gate。
|
||||
- 条件中断必须先读取已持久化 decision,并只允许中断注册时 `appliedSteerCursor < steer.sequence` 的旧 planning/final-reply Provider。若旧请求已自然结束,或新 Provider 已消费该 steer 后启动,则返回 `providerInterrupted=false`,不得误杀新规划。工具、外部副作用、确认、process session、Git、receipt 和 finalization 始终不强杀,在下一安全边界消费 steer。
|
||||
- LLM 判定、解析或持久化失败时写入关联的非终态 fallback 回复,保持当前任务运行,并在下一安全边界应用已排队 steer;失败不能退回“默认中断”。判定与回复按 `agentId / runId / steerId` 幂等,冲突终态失败关闭。
|
||||
- 验收必须覆盖判定 LLM 的 `true / false` 协议、公开回复幂等、入队本身不中断、`runtime.steer` 有活动 Provider 时仍不中断、缺失 decision 拒绝条件中断、`false` decision 不中断、`true` decision 只中断旧 cursor,以及判定失败后同一 run 继续。
|
||||
|
||||
## 验收命令
|
||||
|
||||
- `cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml structured_plan_ -- --nocapture`
|
||||
|
||||
@@ -84,6 +84,33 @@
|
||||
|
||||
## Runtime 边界
|
||||
|
||||
### 2026-08-10 Codex CLI Agent 执行模式
|
||||
|
||||
- 模式合同:客户端 AppData 配置新增全局 `agentMode`,只接受 `codex_cli / provider`。缺省和新安装默认使用 `codex_cli`,原有 HTTP LLM Provider 路径完整保留并可显式切回 `provider`;切换只影响下一次节点请求,不新增 Runner、任务图、会话库、配置库或业务事实源。
|
||||
- 调度边界:正式 DAG、manifest、Agent task/session/run 身份、队列、锁、委派、all-join、完成门、Provider lifecycle、持久 retry/handoff 与 `needs-reconciliation` 继续由现有 AGC Runtime 掌控。每个被调度节点在 `codex_cli` 模式下直接启动一次非交互 `codex exec` 充当该节点的推理 Agent;Codex 返回当前 Runtime 广告函数的结构化调用,Runtime 仍是唯一 ToolHost,不允许 CLI 自己写项目、执行命令、调用 MCP 或形成第二套 revision / verification 真相。
|
||||
- CLI 安全边界:CLI 固定使用 argv 启动,禁止 shell 拼接;工作目录使用本次请求专用的空临时目录,不把游戏项目绝对路径写入 prompt、stdout、stderr 或持久记录。调用固定使用 ephemeral、忽略用户配置和 exec rules、read-only sandbox、never approval,并关闭 Codex shell tool;只继承 CLI 运行和认证所需的最小环境,显式移除宿主 `CODEX_API_KEY`。用户级 Codex 登录态继续由本机 Codex 自己读取,API Key、auth 文件、Cookie、Token、`CODEX_HOME` 私有内容不得复制到项目配置、Runtime sidecar、Agent DB、conversation 或日志;stdout / stderr 无换行时也受硬上限约束,stderr 诊断只记录固定分类、字节数和 SHA-256。
|
||||
- 协议边界:Runtime 把既有 `LlmRunRequest` 的消息和当前函数目录编码为有界 prompt,并从同一函数 JSON Schema 生成 Codex structured-output schema。CLI 输出转换为现有 `LlmRunResponse / LlmToolCall` 后,继续经过 native tool / MCP 参数校验、动作上限、权限、pending、receipt、验证与格式修复链;最终回复仍走现有脱敏和唯一提交路径,不新增平行响应协议。
|
||||
- 取消与恢复:Codex 子进程绑定当前 Provider request lifecycle,取消、暂停、Runner draining 或 GUI owner 丢失时终止并回收当前进程;started 后没有可信终态仍沿现有 Provider reconciliation 处理。`agentMode`、CLI 可执行身份和影响输出的 Codex 参数进入 `providerConfigFingerprint`,模式切换不得消费另一模式遗留的 retry/handoff。
|
||||
- 可用性与兼容:`check_game_creator_llm_config` 在 `codex_cli` 模式检查 Codex 可执行文件和版本,不再要求 HTTP API Key;在 `provider` 模式保持原有 API Key、base URL、model 和逐 Agent override 校验。设置面板始终保留旧 Provider 配置,模式切回后不得丢失既有密钥或逐 Agent设置。配置向导若写入 HTTP Provider 凭据,必须显式把模式切到 `provider`。
|
||||
- 验收:覆盖缺省模式、显式 Provider 回退、配置 round-trip、CLI 缺失/非零退出/损坏 JSONL/超限输出、structured tool calls、普通最终回复、进程取消、模式指纹漂移和旧 Provider 回归;同时执行 AGC 定向 Rust 测试、前端配置测试与 typecheck、配置门禁、编码检查和 `git diff --check`。
|
||||
|
||||
### 2026-08-10 Codex app-server 长期 Agent 执行模式
|
||||
|
||||
- 模式升级:`agentMode` 扩为 `codex_app_server / codex_cli / provider`,新默认为 `codex_app_server`;V1.51 的一次性 `codex exec` 保留为显式兼容模式,HTTP Provider 保留为非 Responses 配置及故障回退模式。
|
||||
- 进程与节点:External Runner 按“有效 Agent LLM 凭据/Responses 路由 + `projectId/agentId/sessionId/runId`”隔离长期 `codex app-server --stdio`,即每个权威节点 run 直接持有自己的 Codex CLI 子进程与 ephemeral thread,每次完整权威请求映射 turn。同一节点 turn 串行,节点之间进程级隔离;单节点连接失败不得使其它节点同时失去终态。Codex thread 不写 durable recovery;节点完成、重启、retry、handoff 和 finalization 仍只认 AGC 账本。
|
||||
- LLM 配置:`apiKind` 始终只接受 `openai_responses`;非空 Key 转换为 app-server model provider,base URL 生效,Key 仅走专用环境变量;空 Key 只桥接用户 Codex `auth.json`,不继承环境 `CODEX_API_KEY`。设置面板在 app-server 模式继续显示并保存 model、effort、stream、全局/逐 Agent Key 与路由配置;`openai_chat / anthropic` 明确提示切 `provider`,不得悄悄忽略。`stream=true` 接入 app-server 文本 delta;`webSearchEnabled=true` 因唯一 ToolHost 边界明确拒绝。
|
||||
- 安全与取消:临时 cwd、隔离 `CODEX_HOME` 与 OS HOME、read-only、network off、never approval,并在启动前关闭 web/multi-agent/shell/browser/plugin/image 等原生能力;取消从 turn-start pending 阶段就跟踪且只 interrupt 当前 turn。已发送 turn 后连接断开或终态丢失进入 reconciliation,只关闭当前节点进程且不重放同一 request slot;明确 failed/interrupted 不按 transport 重试。
|
||||
- 资源与退出:app-server pool 按实际凭据快照/base URL/API kind/CLI 版本和节点 run 身份隔离并做有界 LRU;空 AppData Key 必须读取同一份有界 `auth.json` 字节来生成池指纹并桥接隔离登录态,继承的 `CODEX_API_KEY` 始终移除,node thread 也只淘汰 inactive LRU。Runner 正常、强制和 watchdog 退出都显式关池,Linux child 绑定 parent-death signal,防止强杀 Runner 后遗留带凭据孤儿进程。stdout NDJSON 与 stderr 无换行记录均有硬上限;stderr 原文不写入诊断,只记录固定分类、总字节数、SHA-256 和可取得的退出状态。
|
||||
- 旧配置迁移:既有 AppData 若没有 `agentMode`,只有全局和逐 Agent 路由均为 `openai_responses` 时迁移到 `codex_app_server`;存在 `openai_chat / anthropic` 时显式保留 `provider`,避免打开项目自动恢复时把所有节点批量写成 `invalid-config`。用户确认端点支持 Responses 后,可在设置中显式切换并保留原 model/base URL/API Key。
|
||||
- 验收:fake JSON-RPC fixture、三态 UI/config、配置指纹、unknown-terminal 零重放、旧两种模式回归和显式 ignored 真实 smoke 全部通过后,才可视为模式切换完成。
|
||||
|
||||
### 2026-08-10 Supervisor 边做边聊与条件中断
|
||||
|
||||
- 根 Project Supervisor 的运行中消息继续进入当前 `taskId / sessionId / runId`,先持久显示“正在判断、当前任务继续”,再由独立 LLM 生成非终态语义回复并给出 `interruptCurrentProvider`。过程回复不能调用终态 `respond_to_user`,不能把制作 Run、Goal 或 task 提前完成。
|
||||
- steer 入队后不得先通知 Runner。判定为无需中断或判定失败时,`runtime.steer` 只校验 durable ledger、唤醒同一 Run 并固定保持 `providerInterrupted=false`;判定为需要改向时,只有 `runtime.interrupt_for_steer_decision` 可以读取持久 decision 后条件中断旧 Provider。已经消费该 steer 的新 Provider、工具和外部动作不得被中断。
|
||||
- 状态询问、解释和不冲突补充默认继续当前 Provider;明确停止、改向或会让在途方案过期时才允许请求中断。判定失败时继续任务,并在下一安全边界消费消息,不得把失败等同于需要中断。
|
||||
- UI 通过持久 conversation 展示关联回复,刷新后仍可见;返回的 `assistantReply / interruptDecision / decisionReason` 只用于本次命令结果与诊断,不形成第二个会话或第二个 Run。
|
||||
|
||||
V1.11 的受保护仓库控制目录同时包含 `.git / .agent / .agents / .codex / .hermes`;其中 `.agent` 对项目命令隐藏,其余控制目录只读。
|
||||
|
||||
2026-08-04 起,Runtime 的公共工具规划指令、Supervisor 协作编排 playbook、条件 overlay 和编译期静态 Agent 节点目录统一由版本化 Prompt Bundle 驱动,位于 `apps/ai-game-creator-shell/src-tauri/prompts/runtime/`。`manifest.json` 是 section 路径、组合顺序、平台 / Editor 变体、role overlay、Provider 协作 fragment,以及 Supervisor 与六组专业 Agent 静态目录的单一来源;role overlay 只允许 `rootSourceKind` 强类型语义 selector,构建期拒绝未知 kind,运行期把权威 source 常量映射为生成 kind。`build.rs` 同时监听 Bundle 每一级目录、manifest 和已登记 section,保证任意嵌套目录新增孤立 Markdown 都会触发增量构建,并以失败关闭方式校验 schema、引用、路径 / symlink、孤立 Markdown、selector、节点身份、旧 alias 和生成标识符,再生成 `'static + Copy` Rust 定义并编译进发布二进制。公共 runtime system header 保持身份中立;生成的 Supervisor planning composition 必须复用 `supervisorChat.identity`。每个 section 只能属于 runtime composition、Supervisor composition、chat 字段、platform variant、visual variant、role overlay 或 Provider fragment 中一个语义所有者;唯一例外是同一 identity section 由 Supervisor planning 与 `supervisorChat.identity` 显式复用,从而同时阻断 Supervisor 指令外泄和动态 variant 与静态 composition 的重复注入。专业节点 taskId / group / role 还必须在构建期与 `shared-contracts::new_game_creation_app_seed_tasks()` 强一致,防止身份合同、静态目录和正式 seed DAG 漂移。Bundle 承载公共指令、隔离 Agent 合同、平台差异、角色选择、并行委派、all-join、视觉返工、claim gate,Supervisor 共享核心身份、interaction / final-reply 专属合同及其组合,以及首批协作、delivery 收敛、manifest wait、试玩后续委派等 repair 自然语言合同;background planning 在 system composition 复用核心身份,所有 user context 都不再重复注入 Supervisor 身份合同正文。`agent_runtime_native_executable_tools()` 仍是原生可执行工具的权威源列表,同时供 Prompt 工具目录与 native capability registry 使用,MCP 工具只从当前请求的动态 catalog 暴露。最终 Provider 请求必须通过生成的 section、composition、overlay 与 provider fragment API 构建,禁止恢复直接 `include_str!("prompts/runtime/...")`、在 Provider 或 `prompt.rs` 源码中复制协作 graph 文案,或依赖自然语言精确 `.replace()` 注入工具合同、平台规则或角色规则。Bundle 不是完整可执行 graph:正式 DAG 依赖边、权限、沙箱、委派容量、持久 all-join 状态机、完成门和身份校验仍由 Rust、`shared-contracts` 与经校验的 `.agent/collaboration-policy.json` 强制执行,不允许通过 Skill、外部配置或任意运行时 Prompt 覆盖绕过。
|
||||
@@ -788,7 +815,7 @@ game-project/
|
||||
- 开发模式可通过本地项目文件面板执行 `file.list/read/write/delete`,普通用户界面不暴露文件面板。
|
||||
- 2026-07-17 起,同一 Runtime 文档的“V1.32 Runtime 强制 Supervisor 协作合同”作为 mixed swarm 可靠性事实源。项目可用 `.agent/collaboration-policy.json` 约束首波 static/isolated 模式、数量和 required static Agent;Runtime 在任何 child 副作用前整批校验并把合同指纹固化进 Provider batch v2。当前父 run 一旦形成 delivery/group,正式 `project-supervisor` 默认只负责编排、状态认领和验证,不再直接执行项目 mutation;专业 Agent/isolated child 权限与唯一 Supervisor 最终回复边界保持不变。
|
||||
- 2026-07-17 V1.32 最终代码已完成独立真实 Provider PASS:首批 mixed batch、三 isolated child、Runner 强杀恢复、专业返工、宿主验证、唯一最终回复与零重复/残留/泄漏同时成立。真实报告计数、隔离重试配置和仍待收敛的 tool-plan repair 成本统一以 Runtime 文档 V1.32 章节与共享决策记录为准。
|
||||
- 2026-08-03 恢复执行补充约束:整个 pending action continuation、它进入的后台主循环,以及完成、取消或失败后 drain 同 Agent 后续队列时,都必须跨越独立 Tokio task 轮询边界,不能让 pending executor、task queue 与 Agent 主循环的大型 async poll frame 在同一 worker 调用栈连续嵌套。边界输入必须先装箱,避免泛型 helper 在真正 spawn 前仍把大型 future 保留在调用方 async frame;边界同时必须随父 continuation 取消子任务并保持 durable action、batch、run/session 身份及恢复防重语义,当前使用 boxed future 与 `JoinSet` 承担该约束。CI 和生产均使用默认 worker 栈验证,不以提高 `RUST_MIN_STACK` 代替代码边界。
|
||||
- 2026-08-03 恢复执行补充约束:整个 pending action continuation、它进入的后台主循环,以及完成、取消或失败后 drain 同 Agent 后续队列时,都必须跨越独立 Tokio task 轮询边界,不能让 pending executor、task queue 与 Agent 主循环的大型 async poll frame 在同一 worker 调用栈连续嵌套。边界输入必须先装箱,避免泛型 helper 在真正 spawn 前仍把大型 future 保留在调用方 async frame;边界同时必须随父 continuation 取消子任务并保持 durable action、batch、run/session 身份及恢复防重语义,当前使用 boxed future 与 `JoinSet` 承担该约束。2026-08-10 起,Provider、Codex CLI 与 Codex app-server 的组合分发也必须在持久重试 helper 或非持久压缩路径内构造完整物理请求后、进入下层泛型 control/lifecycle helper 前装箱;不能靠逐个扩大 queue worker 栈掩盖模式分支放大的 future。CI 和生产均使用默认 worker 栈验证,不以提高 `RUST_MIN_STACK` 代替代码边界。
|
||||
- 2026-07-18 起,同一 Runtime 文档的“V1.34 动态隔离子 Agent writeScopes 命令绕过封堵”作为 isolated child 的现行能力事实源。在 scope-aware OS sandbox 完成前,动态 child 无条件禁用 `project.verify / project.git_commit / command.exec / command.start / command.stdin / preview.start / agent.delegate / agent.spawn_isolated / project.restore / agent.schedule_ready / canvas.asset_generate / task.create / task.update / blackboard.write` 和全部 MCP;原生工具策略统一显示 `denied`,模板、项目 policy 与用户确认均不能放宽。保留固定只读 `command.run_limited`、同身份 `command.output_read / command.poll / command.terminate`、既有预览的 `preview.validate`,以及严格位于 `writeScopes` 内的 `file.write / file.patch / file.delete / project.patchset`。
|
||||
- V1.34 的新单动作在 confirmation 和 OS launcher 前拒绝;新多 action 原生 batch 只要含一个 denied member 就在独立 pending-action sidecar、confirmation、OS spawn、revision 和任何成员项目副作用前整批 abort,只保留 `aborted / nextActionIndex=0` batch 事实。旧 pending / approval / batch 真正进入执行器时仍重新应用当前 child 边界,旧 executing 未知结果继续进入既有 reconciliation。该安全收紧由恶意 sibling 写入、策略快照、batch、旧 pending 执行器重验和 isolated/mixed/collaboration/provider-batch 回归证明;不因本切片重跑已通过且 isolated mutation 为 0 的 V1.31/V1.32 外部 Provider suite。通用命令只有在后续 scope-aware OS sandbox 对所有后代强制同一 `writeScopes` 并通过独立决策与测试后才可重新评估开放。
|
||||
- 2026-07-18 起,同一 Runtime 文档的“V1.35 多 ready isolated all-join 原子认领与恢复”作为 `agent.run_status` 同父 run 多 group 认领的现行事实源。Runtime 按 `delegationGroupId` 排序并一次性预取全部 join 锁;任一后续锁忙时保持零 delivery mutation、零 claim sidecar。全锁就绪后,同一 action 的 durable claim journal 按 `prepared -> committed -> observed` 推进;部分 commit 或 Runner 恢复只能复用该 journal 幂等补齐。只认领可完整放入优先 `readyIsolatedJoins` 观察预算的有序前缀,未观察旧 claim 可由后续 action 完整重放,但不创建第二份 isolated claim。每个 claimed delivery 必须由匹配原 action/group 的 journal 覆盖;无 journal 的旧 delivery 每轮只迁移一个原 action,已有 journal 不得扩写或状态倒退,跨 action group 归属冲突失败关闭。成功 observation 写入 pending sidecar 后只能把本轮完整输出的 claim 标记 `observed`,任一未观察或无 journal claim 继续阻断 finalization;每个 group 审计按 `actionId + delegationGroupId` 唯一,并在 Agent DB 锁内修复 torn tail、全量核对后幂等追加。
|
||||
|
||||
Reference in New Issue
Block a user