重构 Direct 交付合同与租约机制 (#608)
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
当前 Direct 把交付合同作为操作准入条件,并在任意付费/执行失败后进入全局 Draining;一条无关的挂起命令可因此阻断后续代码编辑。本 PR 用于推进 #518、#529 的合同与租约机制重构。 当前仅提交草稿里程碑,运行时代码尚未修改,问题尚未修复。 - 已确认:普通操作成功或失败后返回真实结果,由 Agent 决定下一步;宿主保留回合活动状态、时间与并发控制,取消全局失败排空及返修批次门禁。 - 保留既有权限、旧回合写入归属,以及资源操作自身的幂等和不确定结果核对。 - 待细化:交付合同是否及在哪些产品场景保留、工具与提示词调整、已有配置与账本兼容;实现前同步主规范和单里程碑实现计划。 工作范围:`docs/project-memory/plans/【里程碑】Direct合同与租约机制重构-2026-10-03.md`。 验证:`npm run check:doc-index`、`npm run check:encoding`、`git diff --cached --check` 通过。本次未运行运行时测试。 关联 #518、#529;当前不关闭问题。 Reviewed-on: #608 Co-authored-by: lhk <ink29535@proton.me> Co-committed-by: lhk <ink29535@proton.me>
This commit was merged in pull request #608.
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# 【实施计划】Direct 交付合同简化
|
||||
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| Version | 0.3 |
|
||||
| Status | implemented(用户指令已授权实施;用户手动 GUI 检查已完成,专项验证边界见下文) |
|
||||
| Date | 2026-10-04 |
|
||||
| Milestone | [Direct 交付合同简化](./【里程碑】Direct交付合同简化-2026-10-04.md) |
|
||||
|
||||
## 实施前代码事实
|
||||
|
||||
- `codex_app_server/execution.rs::spawn_settlement` 和 `direct_patch.rs::apply` 在操作结算/补丁成功后调用 `try_seal`;`finish_model_attempt(successful=true)` 与 `direct_delivery.rs::review_reply` 是正常响应结束后的入口。
|
||||
- `direct_runtime/mod.rs` 在开始模型调用前通过 `requires_new_web_contract` 设置义务;`direct_execution.rs` 的 `requires_contract` 同时参与无合同结束、恢复和分析结果判定。
|
||||
- `direct_delivery.rs` 四类 Criterion 与 `direct_tools_mcp.rs` 的 schema 对应。新 Web 合同自动补入构建、入口文件、视觉、玩法;产物摘要函数也用于浏览器证据防篡改,不能整段删除。
|
||||
- 租约重构已允许无合同工具准入,但运行提示和随包技能仍有首次修改前登记、必需构建证明等冲突文案。
|
||||
|
||||
## 修改边界
|
||||
|
||||
允许修改:上述交付/执行/补丁/runtime 模块、工具 schema 与桥、运行提示、随包游戏工作流和浏览器技能中的合同说明、相关测试、主规范及共享记忆。托管验证仅在清除退役验收专属依赖确有必要时修改。
|
||||
|
||||
不修改:浏览器视觉/玩法算法、固定场景、原有双端和证据真实性判据、平台生成协议、Codex 调度、权限、预算值、普通命令返回协议和进程所有权。不新增合同类型或后台生图接口,不调用真实付费 Provider 做默认回归。
|
||||
|
||||
## 实现顺序与检查点
|
||||
|
||||
### 1. 收敛自动验收入口
|
||||
|
||||
- 删除操作结算与 AGC 补丁成功后的 `try_seal`,清理失去用途的 import。
|
||||
- 保留正常模型 `completed` 后的 `finish_model_attempt(true)` 与外层 `review_reply`,以及封口后的 `finish_sealing`;它们属于同一次正常收尾,不另造调度循环。
|
||||
- `agc_delivery_status` 保持只读评估。失败、取消、断连、预算耗尽仍走独立关闭,已有 terminal report 不重新尝试成功验收。
|
||||
- 检查点:已 ready 合同后仍执行第二次操作并输出最终响应;失败/中断模型终态不进入正常验收。
|
||||
|
||||
### 2. 解除宿主预设义务,统一 Agent 提示
|
||||
|
||||
- 从回合启动移除 `requires_new_web_contract` 的义务判定;删除运行模型中的 `requires_contract` 冗余门禁,正常结束只按实际有无合同分流;同步分析结果判定和测试夹具。
|
||||
- 保留宿主环境预检与可信脚手架准备本身的现有入口,解除它们与合同义务的耦合;不得因删掉条件顺带删除正常建项所需准备或恢复已退役 CLI。
|
||||
- 初次交付记录/可信脚手架事实仅在 Agent 主动注册时用于现有新 Web visual/gameplay 补充;重放注册复用冻结的 `newWebGame`,不重新计算或更改有效要求。
|
||||
- 系统提示使用明确条件:“当用户要求你制作、完成或交付游戏(例如‘做一个游戏’‘做一个可运行的游戏’)时,调用 agc_register_delivery_contract 登记本轮交付范围和验收项。”写明普通操作无需合同,提示不另设空项目或首次输入的免登记说明。宿主不新增词表匹配、分类器或缺合同兜底追问。
|
||||
- 同步 `prompts/runtime/texts/direct.json` 的 hostDelivery/deliveryFeedback、`direct-tools.json`、`resources/agc-skills/agc-game-production-workflow/{SKILL.md,references/workflow-contract.md}` 、`agc-web-game-development/SKILL.md` 与 `agc-browser-playtest/SKILL.md`。仅调整合同相关指导,保持原语言与浏览器使用说明。
|
||||
- 检查点:无合同可正常结束;只生图、不操作、普通修改均不被项目状态强制验收。真实模型是否遵循提示单独 smoke,不以字符串单测声称意图理解已验证。
|
||||
|
||||
### 3. 删除 artifact/command 合同要求
|
||||
|
||||
- 删除 Criterion 的两类变体、合同专属 CommandPurpose、规范化/标签/评估分支、initialArtifactHashes 和 host-entry/host-build 自动追加;同步 MCP oneOf schema、反馈、样例及相关专属测试。
|
||||
- 保留 scope/changeKind、非空要求、冻结和同参幂等;新登记仅有 visual/gameplay。旧类型新请求返回清楚的参数错误,禁止静默过滤成空合同。
|
||||
- 保留普通文件/命令/构建与 `agc_run_validation` 的结果和失败语义;删除合同对命令返回值的期待,不删除工具自身对真实退出码的报告。
|
||||
- 保留 visual/gameplay 共用的摘要读取、evidence_files_match、运行指纹、场景版本、双端证明及失败写入恢复围栏。仅清理没有其它现役消费者的产物/命令验收代码。
|
||||
- 保留主动登记后的新 Web 视觉/玩法补充规则,注册回包及工具说明列出有效要求;本次不重新设计这两类规则。
|
||||
- 检查点:schema/解析/提示一致,两类退役条件不会出现在新合同评估中,原有视觉/玩法正反证据测试不放宽。
|
||||
|
||||
### 4. 持久化版本与恢复
|
||||
|
||||
- 新合同使用 `agc-direct-delivery.v2`;执行账本移除 requiresContract 时升到 `agc-direct-execution.v3`,在已有解码入口对白名单旧版本迁移,不放宽未知字段校验。
|
||||
- 已 completed/exhausted/interrupted 的旧回合保持原终态和报告,不重新验收旧合同;含 v1 合同的非终态转为 Interrupted,保存旧要求作为历史,说明新用户回合可继续,不复活操作或自动重放。
|
||||
- 旧无合同账本只移除强制登记字段;保留时间、预算、身份和活动操作事实,按现有恢复规则决定是否可用。不能用迁移刷新本轮预算。
|
||||
- 不将 artifact-only 合同删成“空要求全部通过”,不将混合合同静默降级成剩余项通过;新用户回合按新提示重新登记。
|
||||
- 检查点:旧 schema 正反夹具与新回合继续测试通过;升级前后远端操作幂等和旧许可边界不变。
|
||||
|
||||
### 5. 定向验证与文档收口
|
||||
|
||||
- 回归覆盖里程碑全部条款,并更新仍使用退役合同的测试夹具;不要伪造浏览器证据来把普通聊天当成游戏成功验收。
|
||||
- 真实/协议驱动运行时 smoke 验证:证据 ready 后继续操作和输出、正常完成后收尾、空项目无合同请求。Linux 与 Windows 结果分开记录;无真实模型/浏览器/平台环境时明确保留未验证项。
|
||||
- 将主规范的待实现目标融合回现行条款,删除过时 artifact/command、首次强制登记及中途封口描述,更新共享记忆。验收完成后清理本里程碑及实施计划;用户已确认 PR 移除 WIP,视觉/玩法检查保持现状。
|
||||
|
||||
## 验证命令
|
||||
|
||||
Rust 定向过滤器分别执行 `direct_delivery`、`direct_execution`、`codex_app_server::execution`、`direct_patch`、`direct_validation`、`direct_tool_bridge`、`direct_tools_mcp`、`direct_analytics_tests`;新增跨正常/异常终态的用例运行其所属过滤器。命令模板:
|
||||
|
||||
```sh
|
||||
cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell <filter>
|
||||
cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --test runtime_prompt_bundle_build --test prompt_source_boundaries
|
||||
cargo check --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell
|
||||
npm run check:doc-index
|
||||
npm run check:encoding
|
||||
git diff --check
|
||||
```
|
||||
|
||||
对实际修改的 Rust 文件运行 rustfmt 检查;技能/schema 相关测试按实际消费者选择,不新增逐字复制提示词的断言。不得使用已退役、仓库不存在的 direct-execution-production-fixture 脚本作为验证证据。
|
||||
|
||||
## 时间盒、风险与回滚
|
||||
|
||||
规划按一轮代码核查、一轮文档与门禁完成;实现以步骤 1–4 每步约 30–60 分钟检查点推进,验证单独记录。若发现需改变视觉/玩法判据或 Codex 调度,停在该边界记录下一轮问题,不扩大本计划。
|
||||
|
||||
主要风险是新 Web 判定与强制义务混用、随包技能残留指令、摘要函数误删、异常终态误转成功、旧要求静默丢失。分别用入口/提示检查、证据负例、状态转移与迁移测试约束。
|
||||
|
||||
回滚以整体合同改动为单位,不回滚已提交的租约重构;新格式账本保留,不删除状态来恢复旧版本执行。旧二进制不能读取新版本时拒绝恢复该回合,保留产物并由兼容版本处理。
|
||||
|
||||
## 实施结果与验收证据(2026-10-04)
|
||||
|
||||
- 已移除操作结算和补丁成功后的自动封口,只保留正常响应结束后的入口及封口最终复核;状态查询不变更阶段。
|
||||
- 已移除回合启动的强制合同判定及 requiresContract 字段。正式入队侧 `direct_runtime/user_input.rs` 的工程准备仍保留;删除的是退役 CLI 留在回合内部、与合同义务耦合的重复准备分支。
|
||||
- 已移除 artifact/command 的 schema、解析、验收、初始产物摘要和宿主追加项;保留命令工具、构建结果与浏览器证据摘要。新增合同为 v2,执行账本为 v3,v1/v2 迁移不刷新预算、不将旧要求降级为成功。
|
||||
- 已同步系统提示、工具描述、游戏生产/浏览器/Web 开发三份随包技能及工作流参考;manifest 由正式同步脚本更新。
|
||||
- 主规范及共享决策已融合当前行为,无业务代码提交或推送。
|
||||
|
||||
| 验收面 | 证据 | 结果与边界 |
|
||||
| --- | --- | --- |
|
||||
| 操作完成不提前结束 | adapter 的命令、原生文件修改、第三方 MCP 协议回归;ready 后继续准入 | 通过 |
|
||||
| 完整响应先于宿主收尾 | Linux 真子进程模拟 app-server:已 ready→命令审批/完成→延迟→完整响应→正常终态 | 通过;仅验证协议与宿主链路,不等于真实 LLM 或 Windows Job smoke |
|
||||
| 无合同操作和结束 | 工具桥夹具不再登记合同;原有写入/图片 mock 回归、空项目 no-op/image-only 宿主结束用例 | 通过;未真实付费生成,不声称已验证模型意图理解 |
|
||||
| 新 Web 规则边界 | 未注册不生成义务,主动注册后仅补视觉/玩法,注册重放一致 | 通过 |
|
||||
| 类型/证据 | 两类退役要求单独及混合拒绝;visual/gameplay 双端、固定场景、版本、指纹及文件篡改反例 | 通过;浏览器判据未修改 |
|
||||
| 异常终止 | ready 后中断仍返回中断报告;原预算、取消、旧许可、清理回归 | 通过 |
|
||||
| 恢复 | v1/v2 旧合同及终态、v2 无合同强制标记、未知字段、预算与旧活动操作;旧终态合同只查询历史 | 通过 |
|
||||
| AGC 补丁成功 | Windows bundled patch 回归增加 ready 后无变化补丁不封口断言 | 已编写,Linux 环境未运行 Windows 用例 |
|
||||
| 提示一致性 | MCP schema、prompt bundle/source boundaries、技能 manifest 与内容校验 | 通过;用户已确认手动 GUI 检查完成,未提供多语言意图专项用例明细 |
|
||||
|
||||
定向结果:`direct_` 376 passed、1 ignored(既有辅助夹具);`codex_app_server::execution` 19 passed;完整响应协议回归 1 passed;`skill_pack` 7 passed;`runtime_prompt_bundle_build` 6 passed、`prompt_source_boundaries` 18 passed;Node 技能包测试 3 passed。`cargo check --locked`、修改文件 rustfmt、文档索引、编码与 diff 检查通过;编译仍有仓库既有告警。上述过滤器部分重叠,不相加为独立用例总数。初次沙箱运行的 loopback 绑定/Node 子进程失败已在具备对应权限的本地夹具中重跑;不把环境拒绝当作行为通过。用户手动 GUI 检查已完成;Windows 专项验证明细尚未提供,暂保留里程碑与计划。
|
||||
|
||||
## 用户手动检查与范围确认(2026-10-05)
|
||||
|
||||
- 用户确认已完成手动 GUI 检查,PR #608 已移除 WIP;这是用户提供的验收结果,本轮未重新运行 GUI。
|
||||
- 用户决定视觉与玩法检查保持现状,包括既有双端、固定场景及证据校验;不再将其调整列为本次重构的下一步。
|
||||
- 用户未提供检查平台或逐项用例明细,因此不将本次确认扩写为 Windows Job 完整子树退出、Windows 捆绑补丁用例或多语言意图专项测试全部通过。
|
||||
@@ -0,0 +1,142 @@
|
||||
# 【实施计划】Direct 操作控制与租约简化
|
||||
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| Version | 0.3 |
|
||||
| Status | implemented(2026-10-04 已实现;待 Windows 平台验收) |
|
||||
| Date | 2026-10-03 |
|
||||
| Milestone | [Direct 合同与租约机制重构:租约切片](./【里程碑】Direct合同与租约机制重构-2026-10-03.md) |
|
||||
| Parent Spec | [Direct 操作控制](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#direct-操作控制2026-10-04) |
|
||||
|
||||
## 交付与优先级
|
||||
|
||||
交付结果:普通操作由回合活动状态、时间、并发和原有权限决定能否开始,成功或失败如实返回 Agent;任何单次普通失败不再要求整轮排空或开启返修批次。
|
||||
|
||||
必须项是移除全局排空和合同准入耦合,并验证结束后的控制边界。风险项是原生后台进程归属、迟到写入、重复结算与远端付费结果不确定。诊断 UI 与新增可观测性不作为本切片工作。
|
||||
|
||||
本次仅规划一个可独立验收的租约切片。实施时每个步骤完成即检查对应边界,失败先定位本步骤,不扩展为合同或调度器重写;定向验证通过后做一次整体验收,额外发现仅在影响下列验收判据时扩大范围。
|
||||
|
||||
## 修改顺序与边界
|
||||
|
||||
### 1. 收敛操作状态与准入
|
||||
|
||||
涉及 `agent/direct_execution.rs`。
|
||||
|
||||
- 将操作跟踪保留为并发占用、开始时间、回合归属及取消所需的最小记录;移除具有返修批次和全局排空语义的租约模型。
|
||||
- 准入只核对原回合是否仍活动、预算、容量和调用自身限制;删除 contract-required 操作门禁、Draining 状态与 used_passes 返修控制。
|
||||
- 操作终结只结算一次;成功、失败、取消、异常均不能泄漏容量或重复计时。取消请求发出不等于本地进程已退出,尚在运行的自有工作仍须跟踪至退出或明确报告控制失败。
|
||||
- 保留累计执行时长和墙钟上限原口径,不增加 per-operation 租约期限。普通操作错误与宿主无法保持控制的错误分开处理。
|
||||
|
||||
检查点:无合同可准入;失败不影响其它在途操作及后续操作;容量和时间限制仍有效。
|
||||
|
||||
### 2. 接通现有工具与原生执行器
|
||||
|
||||
涉及 `agent/direct_tool_bridge.rs`、`agent/direct_patch.rs`、`agent/direct_validation.rs`、`agent/codex_app_server/execution.rs`。
|
||||
|
||||
- 内置、原生及第三方调用复用同一套简化控制;保留已有执行前审批、调用身份绑定与内外层不重复计时。
|
||||
- 工具真实成功/失败返回 Agent,不新增“先修复/释放租约才能继续”的反馈。验证失败返回失败,输入漂移使该证据不可复用,不切换全局阶段。
|
||||
- 原生命令已返回但仍有 processId 的情况继续按真实进程生命周期跟踪,不能提前释放归属。
|
||||
- 保留 MCP 并行受理与图片容量限制;不改工具等待结果的协议和 Codex 下一模型步的调度。
|
||||
|
||||
检查点:通过受控执行器夹具重现“长命令在途 + 图片失败”,随后无关写入和命令仍可准入。这证明宿主不阻塞,不宣称模型能在普通图片调用等待中开始新的推理步骤。
|
||||
|
||||
### 3. 保住关闭、写入与付费边界
|
||||
|
||||
涉及 `agent/direct_paid_submission.rs`、执行器 shutdown/drain、原写入许可及项目事务提交调用点。
|
||||
|
||||
- 回合正常关闭、用户取消或时间耗尽后,拒绝新调用并取消宿主拥有的工作,复用既有进程组 / Windows Job 清理与退出证明。保留结束时清理在途操作的行为,删除普通失败触发的全局 Draining 门禁。
|
||||
- 排队后的写入、原生操作审批及每次新增付费 POST 仍核验原回合;不能从“当前回合”重新取得新权限。关闭与准入/提交之间保留必要短临界区。
|
||||
- 远端已提交任务保留其 operation ID、幂等和对账;未知结果只限制对应资源操作,不阻断整轮无关工作。不要用删除本地记录表示远端已取消。
|
||||
- 控制状态持久化失败、执行器断连或无法确认自有进程退出仍报告真实控制问题,不伪装为可继续的普通工具错误。
|
||||
|
||||
检查点:关闭后零新增 POST/执行;锁等待后的迟到写入失败;取消不盲目重发付费任务;实际进程退出有证据。
|
||||
|
||||
### 4. 清理耦合、提示与持久状态
|
||||
|
||||
涉及 `agent/direct_delivery.rs`、`agent/direct_runtime/mod.rs`、`prompts/runtime/texts/direct.json` 和按引用搜索确认的状态消费者。
|
||||
|
||||
- 移除 delivery/validation 状态、报告和提示中的执行批次计数及“普通错误必须停止整轮”等旧语义;`maxRuns` 暂保留交付复核次数用途,不扩大为配置重设计。
|
||||
- 删除“操作前必须有合同”的提示前置条件;完整合同触发提示、artifact/command 移除、视觉/玩法设计留给合同工作。现有合同的收尾评估仍可调用简化后的关闭与进程清理。
|
||||
- 保留原回合预算及必要退出/恢复状态;逐项核对旧账本读取路径。旧活动记录不能恢复成新许可,已结束记录不重放;未结束记录确认执行器退出后按中断事实处理,同回合预算不清零,资源恢复沿用原 operation。
|
||||
- 只为确有跨版本读取需求的字段保留最小兼容,删除退役状态及专属测试,不建立双套运行模型。
|
||||
|
||||
检查点:状态消费者不再依赖 used_passes/Draining;同回合不刷新预算,新回合不承接旧权限;合同未讨论部分不变。
|
||||
|
||||
## 验证计划
|
||||
|
||||
| 场景 | 必须证明 |
|
||||
| --- | --- |
|
||||
| 图片/命令连续失败超过旧 maxRuns | Agent 得到错误;剩余时间足够时仍可执行无关工作 |
|
||||
| 长命令在途且图片失败 | 无关文件写入、新命令不被全局排空拒绝 |
|
||||
| 容量满、成功、失败、取消、异常、重复完成通知 | 上限有效、结算一次、无容量泄漏 |
|
||||
| 验证失败与验证期间源码变化 | 证据如实失败/失效,无全局副作用停顿 |
|
||||
| 取消、正常结束、两类时间预算耗尽 | 新调用被拒绝,自有进程退出得到核实 |
|
||||
| 等锁/等容量后发生关闭,旧回合结果迟到 | 无新增付费提交、无借用新回合的文件写入 |
|
||||
| 远端已受理后失败或连接断开 | 保留同一 operation 对账,无盲目重复付费,无无关操作门禁 |
|
||||
| 原账本恢复、同回合重试、新用户回合 | 预算不重置,旧权限不复活,确认旧执行器退出后可开始新回合 |
|
||||
| 没有合同、已有合同、ExternalClient | 普通准入解耦,交付复核与独立客户端边界保持 |
|
||||
|
||||
定向验证按实际修改选择以下过滤器;不得用真实付费生图作为默认自动化测试:
|
||||
|
||||
```bash
|
||||
cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml direct_execution
|
||||
cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml codex_app_server::execution
|
||||
cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml direct_paid_submission
|
||||
cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml direct_tool_bridge
|
||||
cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml direct_validation
|
||||
cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml direct_delivery
|
||||
npm run check:doc-index
|
||||
npm run check:encoding
|
||||
git diff --check
|
||||
```
|
||||
|
||||
必要 smoke 使用可控慢操作/失败响应与真实自有子进程,验证并行、取消和退出,不改模型循环。Windows Job 退出须由 Windows 环境提供证据;不可用时明确列为未验证项,Linux 夹具不替代该证明。
|
||||
|
||||
## 风险与回滚
|
||||
|
||||
- 移除计数和状态时容易遗漏原生审批、交付封口或恢复分支,必须按引用逐一核对,不能仅修改工具桥。
|
||||
- 资源级结果不确定与执行器整体失控必须区分;前者不触发全局停止,后者仍需要结束无法控制的执行器。
|
||||
- 同步修改状态消费者、报告及相关提示,不留下运行时已经允许、提示仍命令 Agent 停止的矛盾。
|
||||
- 实现按上述步骤保留可回退提交。回滚前结束自有回合并确认进程退出,核对账本版本可读性;不得通过删账本或重发远端请求完成回滚。
|
||||
|
||||
本计划已实施,主规范和长期记忆已同步。以下证据来自本次实际运行;尚无专项证据的平台条目保留在本计划;用户于 2026-10-05 确认手动 GUI 检查已完成,PR #608 已移除 WIP。
|
||||
|
||||
|
||||
## 2026-10-04 实施与验证记录
|
||||
|
||||
### 规范对照
|
||||
|
||||
| 条款 | 实现与证据 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 普通失败不触发全局停止/返修批次 | 移除 Draining、used_passes 和合同准入;`repeated_failures_do_not_consume_delivery_reviews_or_block_other_operations` | 通过 |
|
||||
| 在途长命令不阻塞失败后的无关调用 | 原生适配器保留 processId 在途事实,同时允许实际文件写入和新的命令审批;`failed_image_does_not_block_writes_or_commands_while_native_process_is_running` | 通过 |
|
||||
| 并发与操作终结 | 成功、失败、取消 future、异常展开释放占用,重复结算不重复计时;混合 MCP 并发回归 | 通过 |
|
||||
| 关闭与原回合边界 | Closing 先关闭准入,再核对清理;等锁迟到写入、关闭后付费排队、新回合下旧许可拒绝 | 通过 |
|
||||
| 时间预算与迁移 | 保留累计执行/墙钟口径;v1 预算及终态保留,旧活动记录不恢复权限,未知字段拒绝 | 通过 |
|
||||
| 验证失败与远端不确定结果 | 不再由通用操作结算中断整轮;证据仍不通过,资源幂等及对账路径保留;本地清理未确认仍关闭回合 | 通过 |
|
||||
| 合同范围与调度边界 | 仅解除操作准入前置条件、清除矛盾提示;视觉/玩法与 artifact/command 判据保留;未改 Codex 循环和图片返回协议 | 通过 |
|
||||
| 自有进程退出 | Unix 实际后台 writer 在 shutdown 后停止写入,退出证明仅声明 process-group 范围 | Linux 通过;Windows 待验收 |
|
||||
|
||||
### 自动化验证
|
||||
|
||||
| 验证范围 | 结果 |
|
||||
| --- | --- |
|
||||
| `direct_execution` | 31 passed |
|
||||
| `codex_app_server::execution` | 18 passed |
|
||||
| `codex_app_server::process_tree` | 3 passed;1 个仅供子进程启动的 fixture 保持 ignored,实际清理测试会显式启动它 |
|
||||
| `direct_paid_submission` | 6 passed |
|
||||
| `direct_tool_bridge` | 43 passed;首次沙箱禁止 loopback 导致 5 个测试失败,授予本地监听权限后全数通过 |
|
||||
| `direct_validation` | 9 passed |
|
||||
| `direct_delivery` | 6 passed |
|
||||
| `direct_patch` | 5 passed;Windows 捆绑补丁运行用例在 Linux 不编译 |
|
||||
| 混合 MCP 并发 dispatcher | 1 passed |
|
||||
| Direct analytics | 2 passed |
|
||||
| `runtime_prompt_bundle_build` / `prompt_source_boundaries` | 6 / 18 passed |
|
||||
| 生产二进制 `cargo check` | 通过 |
|
||||
| 修改文件 rustfmt、文档索引、编码、`git diff --check` | 通过 |
|
||||
|
||||
未调用真实付费 Provider,没有修改工具调度或图片异步协议。Windows Job 子树退出及 Windows 捆绑 Codex 补丁运行需在目标平台补验;当前 Linux 证据不替代该验收。原有编译警告未作为本次重构范围扩展处理。
|
||||
|
||||
## 用户手动检查(2026-10-05)
|
||||
|
||||
- 用户确认手动 GUI 检查已完成,PR #608 已移除 WIP;未提供平台及逐项用例明细,Windows 专项进程退出证明不据此标为通过。
|
||||
@@ -0,0 +1,34 @@
|
||||
# Direct 收尾与进程证明修复实施计划
|
||||
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| Version | 0.1 |
|
||||
| Status | implemented(Linux 定向回归通过;Windows 目标平台复核未运行) |
|
||||
| Date | 2026-10-05 |
|
||||
| Milestone | [Direct 收尾与进程证明修复](./【里程碑】Direct收尾与进程证明修复-2026-10-05.md) |
|
||||
|
||||
1. 两处适配器收尾用受控归属退役结果登记 executor_stopped,保留完整子树证明范围;通过实际子进程协议夹具检查最终回复和账本状态。正常关闭的迟到通知不能在 Working/Closing/Sealing 生成终态报告或改写 Completed,补充对应反例。
|
||||
2. Linux 扫描仅处理数字 PID,累积读取/解析不确定性,真实活跃成员优先;已确认消失可跳过。增加确定性目录、状态错误与真实进程回归。
|
||||
3. 无合同回复复核捕获收尾结果后读取终态报告;用测试时钟偏移触发收尾预算耗尽,同时覆盖非终态错误。
|
||||
4. 运行 process_tree、完整响应、direct_execution、direct_delivery、execution 适配器定向测试,cargo check、格式、文档索引、编码和 diff 检查。
|
||||
|
||||
优先完成三项行为及定向验证;检查点为代码完成、Linux 回归完成。风险为误认退出和遮蔽真实错误,均须负向用例。无真实模型或 Windows 环境时不宣称对应平台通过;不新增调度或视觉/玩法规则。
|
||||
|
||||
## 实施与验证结果
|
||||
|
||||
| 验收面 | 证据 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 无合同操作回合 | 实际 Unix app-server 协议子进程完成原生命令事件与回复后,复核得到 Completed、无终态报告、保留模型正文 | 通过 |
|
||||
| ready 合同 | 同一协议夹具验证操作后完整响应、进程组退役、Completed 和宿主验收报告;完整子树证明仍为 false | 通过 |
|
||||
| 关闭通知 | Working/Closing/Sealing 不产生报告,Completed 不被迟到通知改写,Interrupted 仍可追加说明 | 通过 |
|
||||
| Linux 扫描 | 僵尸、活跃与其他组、已消失 PID、目录枚举错误、不可读及格式错误 stat;真实未 wait 的僵尸仍被 kill(0) 发现但不算活跃 | 通过 |
|
||||
| 收尾预算 | 无合同回复复核内部触发预算 Exhausted,返回已持久化预算报告;有在途操作但无终态报告仍返回关闭错误 | 通过 |
|
||||
| 既有负向边界 | 未证明退出不能完成、冻结合同证据与失败/关闭准入等原有回归 | 通过 |
|
||||
|
||||
定向测试合并运行 75 passed、1 ignored(进程辅助夹具),覆盖 direct_execution、direct_delivery、execution 适配器、process_tree 和三个完整响应夹具。完整响应夹具使用本地 loopback 与实际子进程,不调用真实 LLM 或付费 Provider。
|
||||
|
||||
`cargo check --locked`、修改文件 rustfmt、文档索引、编码与 `git diff --check` 均通过。编译仍报告仓库既有告警;初次协议夹具运行因沙箱禁止 loopback 绑定而未进入行为验证,获准重跑后通过。
|
||||
|
||||
验证命令:`cargo test --locked --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml --bin genarrative-ai-game-creator-shell -- agent::direct_execution::tests agent::direct_delivery::tests agent::codex_app_server::execution::tests agent::codex_app_server::process_tree::tests no_contract_operation_completes ready_contract_allows direct_project_turn_does_not_forward`。
|
||||
|
||||
Windows 目标平台尚未运行;本次 Linux 结果不替代 Windows Job 子树及客户端专项验证,复核后清理本临时计划和里程碑。
|
||||
@@ -0,0 +1,43 @@
|
||||
# 【里程碑】Direct 交付合同简化
|
||||
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| Version | 0.3 |
|
||||
| Status | implemented(实现与定向验证完成;用户手动 GUI 检查完成,Windows 专项证据单列) |
|
||||
| Date | 2026-10-04 |
|
||||
| Parent Spec | [Direct 合同规则](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#宿主验收与执行许可合同) |
|
||||
| 关联 | PR #608(用户确认已移除 WIP);问题 #518、#529 |
|
||||
|
||||
## 交付结果与范围
|
||||
|
||||
交付由用户游戏制作意图驱动、只在正常响应结束后自动复核的合同机制,删除 artifact/command 验收要求,并保证无合同不阻断普通操作和正常结束。
|
||||
|
||||
必须项:触发时机、提示词与宿主义务解除、退役两类要求。风险项:正常/异常终态、旧合同恢复、与视觉/玩法共享的证据代码。可选项:无;不扩展诊断 UI 或合同生命周期。
|
||||
|
||||
基于已提交租约重构代码规划。租约 Windows Job 验收仍待补,不将其视为已通过,也不借本里程碑修改进程控制。用户本轮明确要求继续合同规划;实施与平台验收分别报告。
|
||||
|
||||
## 行为与边界
|
||||
|
||||
- Agent 在用户要求制作、完成、交付游戏时登记合同;仅提到游戏、只生图、只读代码、咨询或“什么也不做”不构成强制登记。宿主不解析关键词,不根据空项目/脚手架/创建入口强制合同。
|
||||
- 无合同的正常回合在清理后结束,不触发缺合同返修;普通文件、执行、生成和验证只遵循现有操作控制。
|
||||
- 操作结算、补丁成功、合同登记及状态查询都不能自动封口。只有模型正常完成本次响应后才允许自动进入合同复核。已满足合同的 Agent 可以继续处理本轮用户要求并写完回复。
|
||||
- 正常完成时,有合同则复用通过→最终复核→完成、未通过→有界反馈的流程;无合同不生成游戏验收成功报告。取消、耗尽、断连等保留自己的终态。
|
||||
- 新登记仅支持 visual/gameplay;artifact/command 参数明确拒绝,不静默忽略。删除宿主自动补入的 artifact/command;保留普通构建/命令工具及其错误。
|
||||
- visual/gameplay 的双端、场景、指纹、文件摘要和可信来源不变;仅在主动登记的新 Web 合同上保留原有视觉/玩法补充,不增加新默认项。
|
||||
- 单回合冻结、同参幂等、数量限制、禁止自报 passed 不变。已有终态不重开;旧合同未完成不自动迁成成功;同回合预算不重置。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [x] 证据已齐备,原生命令、文件修改、第三方 MCP 结算及 AGC 补丁完成后仍可继续操作,直到模型正常返回。
|
||||
- [x] agc_delivery_status 返回 ready 时仍不封口;正常响应结束后才进入既有复核/收尾。
|
||||
- [x] 空项目“什么也不做”“只生成一张图,不做游戏”无合同可正常完成;已有项目行为一致。
|
||||
- [x] 实际发送给模型的提示和工具 schema 条件一致;随包技能不再要求首次修改前登记。游戏制作意图由 Agent 判断。
|
||||
- [x] 无合同可写文件、运行命令、发起图片生成和验证;预算、取消、并发、权限和远端幂等回归通过。
|
||||
- [x] 新合同拒绝 artifact/command;无 host-entry/host-build、初始产物摘要或命令返回验收。
|
||||
- [x] visual/gameplay 原有通过、失败、漂移、截图/报告篡改及场景不匹配用例维持原判据。
|
||||
- [x] 正常验收失败仍有界反馈;异常中断或预算耗尽不能变成成功,下一条用户输入可新开回合。
|
||||
- [x] 旧终态、旧未完成合同、仅含退役要求、混合要求、旧无合同强制标记、活动操作及未知字段均有迁移反例;预算不刷新。
|
||||
|
||||
## 证据与剩余项
|
||||
|
||||
具体文件、顺序、命令见[实施计划](./【实施计划】Direct交付合同简化-2026-10-04.md)。实现已完成,自动化与 Linux 子进程协议夹具证据见实施计划。以上勾选表示代码/定向测试条款通过,不代表真实模型的意图理解或 Windows 完整进程子树已验收。用户于 2026-10-05 确认手动 GUI 检查已完成、PR 已移除 WIP,并决定视觉/玩法检查保持现状。未提供平台及逐项用例明细,尚无专项证据的 Windows 条目继续保留在实施计划。
|
||||
@@ -0,0 +1,50 @@
|
||||
# 【里程碑】Direct 合同与租约机制重构
|
||||
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| Version | 0.4 |
|
||||
| Status | implemented(2026-10-04 已实现;Linux 定向验证通过,Windows 验收待补) |
|
||||
| Date | 2026-10-03 |
|
||||
| Parent Spec | [AI 游戏创作智能体 App 实施计划](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#direct-操作控制2026-10-04) |
|
||||
| 关联问题 | #518、#529 |
|
||||
|
||||
## 本次交付与范围
|
||||
|
||||
在 PR #608 内实施租约重构:将普通操作控制收敛为回合、时间、并发及既有权限检查,消除单次操作失败造成的全局停顿。租约切片已按用户于 2026-10-04 的实施指令落地。验收以失败操作不阻塞无关工作、关闭后不能新增副作用为核心。
|
||||
|
||||
优先顺序:必须项为明确操作失败与回合控制的边界;风险项为取消、并发、旧回合归属及远端结果不确定;可选项为诊断呈现,按实现需要再决定。规范与计划已完成评审并实施;当前检查点是平台验收。用户于 2026-10-04 要求继续并实施[合同简化](./【里程碑】Direct交付合同简化-2026-10-04.md),独立记录范围与验收,不将租约 Windows 待验收项视为已完成。
|
||||
|
||||
## 问题与已确认方向
|
||||
|
||||
- #518:交付合同存在性被作为写入、执行与付费操作的统一前置门禁;新 Web 项目又由宿主提前要求交付,普通探索可能被迫登记合同或进入验收反馈循环。
|
||||
- #529:付费或执行操作失败使整轮进入 Draining;任意其他在途租约都会拦住新的副作用,挂起的原生命令因此阻断无关代码编辑。
|
||||
- 操作跟踪不需要同时承担持久化租约、全局排空和交付准入。宿主应在调用开始前检查回合是否仍活动、时间是否剩余、并发槽是否可用,并继续执行既有权限与资源自身的约束。
|
||||
- 已受理操作完成、失败或取消后释放并发槽,将真实结果交给 Agent,由 Agent 决定下一步。普通工具失败不触发整轮 Draining、不消耗宿主定义的返修批次,也不要求先满足交付合同才能继续无关工作。
|
||||
- 回合结束或时间耗尽后拒绝新调用,取消宿主拥有的在途工作;不能把清除跟踪记录当成进程已停止的证明。旧回合迟到结果不能借用新回合权限继续写入。
|
||||
- 远端付费任务的 operation ID、幂等和结果核对继续由资源操作自身的生命周期负责;客户端停止不证明远端任务取消,不因新回合自动重复提交不确定请求。这些约束不构成阻断整轮无关工作的理由。
|
||||
- 不通过增加租约诊断、自动到期或“释放租约”工具来保留当前全局门禁模型。
|
||||
|
||||
## 合同工作的边界
|
||||
|
||||
已确认后续提示 Agent 在用户要求制作、完成或交付游戏时创建合同,由 Agent 理解用户意图,宿主不按关键词或未交付脚手架自动要求登记;artifact/command 验收门禁已在合同简化中移除;用户于 2026-10-05 决定视觉/玩法保持现状。这些合同调整不纳入本次租约实现,唯一交叉项是解除普通操作的合同存在性门禁及同步清除与之矛盾的准入提示。
|
||||
|
||||
本切片移除执行/返修批次,`maxRuns` 暂仅保留既有交付复核次数用途;交付复核不影响工具准入。时间预算数值和计时方式保持不变。保留回合预算防重置与必要恢复信息,旧活动租约不能迁移成新执行权限;未确认旧执行器退出时不能开启冲突执行。
|
||||
|
||||
不改 Codex 模型循环、工具调度、MCP 返回协议,不新增图片 start/status/wait 工具或后台 Agent;保留现有并行调用能力与资源事务锁。不新增超时自动释放租约、续租或手动释放租约工具。
|
||||
|
||||
## 租约切片验收标准
|
||||
|
||||
- [x] 图片生成失败后,Agent 收到真实错误;无关文件编辑和命令不因全局排空被拒绝。
|
||||
- [x] 一条长命令与失败图片请求同时存在时,不复现 #529 的全局拦写;长命令仍受并发容量、取消和时间控制。
|
||||
- [x] 并发超过上限时保持有界;成功、失败、取消及异常路径正确释放槽位。
|
||||
- [ ] 回合结束或时间耗尽后零新增调用,已拥有的本地进程正确回收;迟到操作不越过原回合写入边界。Linux 控制夹具和实际进程组清理已通过;Windows Job 完整子树证明未验证。
|
||||
- [x] 新用户消息可以在旧执行器正确退出后开启新回合;旧的不确定远端操作不被盲目重放。
|
||||
- [x] 无合同也能通过普通操作准入;既有权限、路径和付费约束仍生效。
|
||||
- [x] 连续操作失败超过原 maxRuns 不阻止继续工作;交付复核次数不被操作成功或失败消耗。
|
||||
- [x] 验证失败或输入变化只影响对应结果与证据,不阻断无关操作。
|
||||
- [x] 同回合重试、重启或旧账本读取不刷新时间预算、不恢复旧操作权限。
|
||||
- [x] 保留原有并行调度,未引入图片后台接口或修改模型循环;合同视觉/玩法判据未变化。
|
||||
|
||||
## 后续工作入口
|
||||
|
||||
租约切片对应[实施与验证记录](./【实施计划】Direct操作控制与租约简化-2026-10-03.md),其中记录定向验证证据与未验证项。稳定行为已同步主规范和共享记忆;用户于 2026-10-05 确认手动 GUI 检查已完成、PR 已移除 WIP;临时计划仍保留尚无专项证据的平台条目。合同简化的实现与验收见关联记录。
|
||||
@@ -0,0 +1,16 @@
|
||||
# Direct 收尾与进程证明修复
|
||||
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| Version | 0.1 |
|
||||
| Status | implemented(Linux 定向回归通过;Windows 目标平台复核未运行) |
|
||||
| Date | 2026-10-05 |
|
||||
| Parent Spec | [Direct 合同规则](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#宿主验收与执行许可合同) |
|
||||
|
||||
交付:正常 Unix 归属清理允许回合完成,不完整进程扫描不能证明退出,收尾预算报告不被通用错误覆盖。
|
||||
|
||||
范围仅限执行适配器、进程组观察、回复复核及对应测试;视觉/玩法、调度、预算数值及持久化格式不变。
|
||||
|
||||
验收:Linux 无合同操作回合 Completed 且无宿主报告;ready 合同 Completed 且有验收报告;扫描失败保持未知、僵尸不算活跃、活跃成员阻止退役;收尾预算耗尽返回已存报告并保持 Exhausted,其他关闭错误继续报错。Windows Job 完整证明语义不变,目标平台验证单列。
|
||||
|
||||
Linux 上述条款已通过;正常关闭的迟到通知也已覆盖,不会阻断回复复核或覆盖完成后的报告。具体结果见[实施记录](./【实施计划】Direct收尾与进程证明修复-2026-10-05.md)。剩余项为 Windows 目标平台复核,不扩大到视觉/玩法或真实付费 Provider。
|
||||
@@ -857,7 +857,7 @@ Godot 编辑器操控复用既有 AGC 插件宿主、EditorAdapter、Runner 和
|
||||
- Direct 回合的合同、证据和预算以宿主私有账本为准,项目侧记录只作展示。GUI/CLI 共用入口;首次副作用前冻结非空验收合同,可信新 Web 工程由宿主补充构建和双端验证底线。普通无副作用聊天不强制构建。
|
||||
- 视觉、固定玩法和托管命令分层;`validation.maxRuns` 按执行/返修批次管理,正常开发命令共享批次;累计执行时间与整轮墙钟分别受 `maxExecutionSeconds` / `maxTurnSeconds` 约束,显式配置与 Provider 重试独立。源码、构建输出、环境输入与证据文件摘要分别复核,项目可编辑记录不能抬高预算或伪造成功。
|
||||
- 原生工具使用已验证的捆绑版本逐次审批能力,第三方 MCP 显式逐调用询问;所有 Direct 入口接受宿主同一状态,未知远端结果不得以本地进程退出代替。独立客户端 HTTP MCP 使用明确的 ExternalClient 来源,保留其既有边界,不借用另一 Direct 回合的预算。
|
||||
- 交付必须先封口、排空和取得执行器退出证明,再核对当前文件并提交完成;Windows 用自有 Job 约束进程树,托管命令在恢复主线程前绑定。完整退出证明不足时保持未完成,不把模型最终回复当作验收。非阻塞扩项进入新的用户回合。
|
||||
- 交付必须先封口、排空和取得受控执行归属退出证明,再核对当前文件并提交完成;Windows 用自有 Job 约束进程树,托管命令在恢复主线程前绑定。Unix 受控进程组退役允许回合完成,但不宣称完整子树均已退出;归属清理失败仍保持未完成,不把模型最终回复当作验收。非阻塞扩项进入新的用户回合。
|
||||
- 模型配置、实际请求标识和流分段耗时写入现有审计账本;统计采用并发区间并集,有界后台写入,详细条目截断后仍聚合。上游内部排队和推理耗时不可见时保持未知。
|
||||
- Direct 工具集中 SDK 原生 `apply_patch` / `update_plan` 是全局串行单例,按回合为每个 Direct 连接导出一份只把 `apply_patch_tool_type` 置空的完整模型目录即可移除该注册;其余 metadata、匹配与 fallback 不变,不得伪造 `readOnlyHint` 或改造 SDK。等价能力由宿主 MCP 的 `agc_apply_patch`(官方 parser、当前回合 Write 许可、受控进程树、短项目事务)与 `agc_update_plan`(宿主计划状态,不作为验收证据)提供;缺少合法回包通道的原生问答工具一并关闭。
|
||||
- 捆绑 Codex 固定版本只在 `build_support/codex_bundle.rs` 声明一次(当前 0.155.1),构建期侧车清单、宿主补丁执行器身份、逐次审批协议允许列表和模型目录捕获共同引用;升级原生依赖时同步重取同一 tag 的 vendor 解析源码与 UPSTREAM 证据,并复跑真实目录、补丁往返与并发夹具。0.155 起原生执行入口改为统一 exec(`exec_command` + `write_stdin`,旧 `shell_command` 不再注册),宿主许可与预算照常覆盖。
|
||||
@@ -9605,3 +9605,34 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
|
||||
- 验证:`npm run agc:bundled-resources:test`(18 passed,含 sidecar 归位、跳过规则、上游缺失、版本漂移、目录被占);`npm run agc:bundled-resources:check`、`check-config.mjs`、`cargo test --bin genarrative-ai-game-creator-shell package_layout::tests`、`cargo check --no-default-features`、`cargo fmt --check`、`check:encoding`、eslint/prettier 全部通过;Windows 真机准备步骤 staging 24 个文件(含 243MB `claude.exe`)后 `cargo check` 不再出现构建期写入。
|
||||
- 边界(未验证):macOS 真机的 sidecar 加载与 `check-macos-bundle.mjs` 包内容门禁未在本机验证;Linux 门禁按新配置不再要求 sidecar 资源,需 CI 实跑确认转绿。
|
||||
- 关联:issue #519、master `fb130d184`、`docs/technical/【技术方案】AGC随包资源staging归位-2026-09-26.md`、CI run 3083。
|
||||
|
||||
|
||||
## 2026-10-04:Direct 普通操作与交付复核解耦
|
||||
|
||||
- 普通工具准入只检查原回合活动状态、时间预算、并发和既有权限,不要求先登记交付合同;成功/失败/取消只结算本次操作,删除全局 Draining 与执行/返修批次计数。
|
||||
- 验证失败和源码漂移影响对应证据,不阻断无关工作。远端不确定结果沿资源自身 operation/幂等记录核对;本地执行器失控或持久状态损坏仍结束回合。
|
||||
- 保留累计执行时间、整轮墙钟、原生执行前审批、关闭时清理与原回合写入/付费提交检查。模型执行结束时先关闭准入,确认清理后才允许交付反馈继续;普通失败不进入关闭阶段。
|
||||
- `validation.maxRuns` 只保留交付回复复核用途;合同的创建与两类要求简化见下条决策,视觉/玩法判据保持原样。图片工具仍等待结果,Codex 调度不变。
|
||||
- v2 执行账本只对白名单 v1 字段迁移,保留预算与终态,不恢复旧活动权限;没有可信时间记录的更早项目侧账本不授予同回合新预算。
|
||||
- 权威边界与验收入口:[AI 游戏创作智能体 App 实施计划](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#direct-操作控制2026-10-04)。Windows Job 退出证明仍须由 Windows 环境验收。
|
||||
|
||||
## 2026-10-04:Direct 合同按用户意图登记、正常响应结束后复核
|
||||
|
||||
- 合同自动检查只在模型正常结束响应后触发;删除操作结算与补丁成功触发的提前封口,状态查询保持只读评估。异常终止与预算耗尽仍独立处理,不以证据齐备覆盖失败事实。
|
||||
- 提示 Agent 在用户要求制作、完成或交付游戏时登记合同,由 Agent 理解用户意图;首次输入也按同一用户意图条件登记,提示与技能不另设空项目或首次输入的免登记说明。无合同既不阻断普通操作,也不阻断正常结束。
|
||||
- 删除 artifact/command 合同要求及宿主自动补入项,保留普通文件、命令与构建能力。视觉/玩法的现有判据和证据真实性校验不改,仅在主动注册后应用原有新 Web 视觉/玩法补充;用户于 2026-10-05 确认这两类检查保持现状。
|
||||
- 旧未完成合同不得因过滤退役要求变成成功;保留旧预算、终态和操作身份,版本迁移与恢复有独立验收。
|
||||
- 权威规则:[Direct 合同规则](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#宿主验收与执行许可合同)。运行时已实现;真实模型意图遵循与 Windows 验收按计划单列,不以协议夹具代替。
|
||||
|
||||
## 2026-10-05:Direct 重构手动 GUI 检查与范围收敛
|
||||
|
||||
- 用户确认手动 GUI 检查已完成,[PR #608](https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/608) 已移除 WIP;删除要求该 PR 维持 WIP 的过期说明。
|
||||
- 视觉与玩法检查保持现状,包括既有双端、固定场景及证据真实性校验;本次不继续重构这两类要求。
|
||||
- 手动 GUI 确认与专项平台证据分别记录;未提供的 Windows 用例明细不推定为通过。
|
||||
|
||||
## 2026-10-05:Direct 受控归属退出与终态报告
|
||||
|
||||
- 回合收尾和合同完成使用平台可证明的受控归属退役:Windows 为自有 Job,Unix 为受控进程组。进程组成功退出不再被完整子树标志误判为中断,但不宣称逃逸后代已退出;缺失或失败的清理仍阻止完成。
|
||||
- Linux 排除僵尸时必须保守处理不完整扫描;数字 PID 的读取/解析不确定性不能成为组已空的证据,已确认消失的 PID 可以忽略。
|
||||
- 正常关闭连接的迟到通知不创建或覆盖成功回合的终态报告;无合同收尾新产生的预算报告优先返回,其他真实关闭错误保留。
|
||||
- 权威边界见[Direct 合同规则](../../technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#宿主验收与执行许可合同)。视觉/玩法判据和预算值不变。
|
||||
|
||||
@@ -115,12 +115,12 @@ UI 编辑器的“分析参考图”步骤、Rust 命令 `suggest_ui_design_sema
|
||||
|
||||
## 2026-09-20 DirectProject 七项效率闭环(补齐合同)
|
||||
|
||||
本节补齐并覆盖下节中仅靠 Skill 要求预检、收尾、批读和原生命令预算的部分。完整目标仍为:自动预检、宿主验收与收尾、分层验证、统一执行/返修预算、稳定测试基线、请求耗时与批量读取、所有工具并行。已有代码及测试不等于全部目标已完成;按下表逐项验收。
|
||||
本节补齐并覆盖下节中仅靠 Skill 要求预检、收尾、批读和原生命令预算的部分。完整目标仍为:自动预检、宿主验收与收尾、分层验证、统一时间预算、稳定测试基线、请求耗时与批量读取、所有工具并行。已有代码及测试不等于全部目标已完成;按下表逐项验收。
|
||||
|
||||
| 要求 | 必须成立的行为 | 完成证据 |
|
||||
| --- | --- | --- |
|
||||
| 自动预检 | 新建 Web 游戏由实际用户入口和宿主自动执行,不依赖模型主动调用;失败不得启动正式生成或付费素材 | 首页/后端正反用例、真实构建与双端截图 |
|
||||
| 验收与收尾 | 必需范围和验收项在宿主持久化;证据绑定当前输入;全部必需项通过后关闭本轮新的修改/执行/付费扩项并产生交付报告 | 真实工具链状态转移、重启/并发/新增扩项拒绝用例 |
|
||||
| 验收与收尾 | 必需范围和验收项在宿主持久化;证据绑定当前输入;模型正常响应结束后复核,通过后关闭本轮新的修改/执行/付费扩项并产生交付报告 | 真实工具链状态转移、重启/并发/新增扩项拒绝用例 |
|
||||
| 分层验证 | 视觉、定点玩法、项目测试和必要完整闭环按已登记标准执行;不混淆证明范围 | 双端正例与单端失败反例 |
|
||||
| 统一预算 | 内置验证、托管脚本和原生命令执行受同一宿主预算约束;不以命令文本猜测“是不是试玩”,不把每条普通开发命令单独计为一次返修 | 捆绑 app-server 的执行前控制、拒绝无副作用、跨入口/重启/耗尽/超时用例 |
|
||||
| 稳定基线 | 可复用的固定种子跑酷基线,真实短按/长按跳跃、单次收力、滑铲释放及公平越障窗口 | 物理单测、双端真实输入、原案例缺陷参数反例 |
|
||||
@@ -154,30 +154,47 @@ UI 编辑器的“分析参考图”步骤、Rust 命令 `suggest_ui_design_sema
|
||||
|
||||
### 宿主控制与后续验收边界
|
||||
|
||||
- 统一预算按执行/验证批次与实际运行输入管理,允许正常构建和相关测试在一个批次内执行;原生读取和结构化文件编辑不按每条命令消耗返修次数。任意代码执行必须具备当前回合的有效执行许可及累计执行时长边界。
|
||||
- 执行预算按工具占用累计时间和回合墙钟管理,不设置执行/返修批次或按普通失败扣减次数。任意代码执行必须具备当前回合的有效执行许可及累计执行时长边界。
|
||||
- 原生命令入口必须以捆绑版本的真实协议证明可在执行前拒绝;不得用执行后的日志通知或文本分类器冒充执行门。能力检测失败不得静默退回无控制模式。
|
||||
- 原生执行控制的精确协议与许可持久化,在对应里程碑评审后落地;不得提前宣布这一项已完成。
|
||||
- 不修改 Provider 的 maxRetries;不减少引擎或任意代码执行的合法能力,不引入平行 Agent 框架,不改公开 API/数据库,不提交私密运行记录。
|
||||
|
||||
### Direct 操作控制(2026-10-04)
|
||||
|
||||
本节与下节共同描述当前 Direct 操作控制,执行/返修批次与全局 Draining 已移除。实施范围与验收见[重构里程碑](../project-memory/plans/【里程碑】Direct合同与租约机制重构-2026-10-03.md)。操作控制不改变 Codex 的工具调度、模型循环或图片工具的等待返回方式。
|
||||
|
||||
- 普通操作开始前,宿主检查原回合是否活动、时间预算是否足够、并发容量是否可用,并执行原有权限、路径及资源约束。交付合同是否存在、前一个工具是否成功不构成普通操作的准入条件。
|
||||
- 操作成功、失败或取消后结算占用与用时,返回真实结果,由 Agent 决定后续操作。没有全局 Draining、执行/返修批次计数及对应重试门禁;验证输入变化只使相关证据失效,不使无关工作停顿。不新增租约到期续租、Agent 释放租约或独立后台任务接口。
|
||||
- 保留原时间预算数值与累计口径、并发上限及回合身份。回合关闭、取消或时间耗尽后拒绝新操作,取消自有在途工作并核实本地进程退出;等待资源锁后的写入及每次新增付费提交仍核验原回合权限。操作记录清除不能代替执行结束证明。
|
||||
- 普通工具失败和资源级结果不确定不终止整个回合;资源自身的幂等、operation ID、恢复及对账继续有效,不能因客户端取消而推断远端取消,也不能盲目重复付费。宿主控制状态损坏或无法确认自有执行器退出仍按实际控制失败处理。
|
||||
- 交付复核与操作准入分离。合同由 Agent 按用户制作/交付游戏的意图登记,验收仅在正常响应结束后启动,当前只保留视觉/玩法要求。`validation.maxRuns` 暂保留现有交付复核次数用途,不再用于执行/返修批次;时间配置不变。
|
||||
- 同回合重试或进程重启不刷新预算;仅保留预算、回合归属、必要退出记录和资源自身恢复所需的持久状态,不恢复旧租约为可执行权限。旧版本未结束状态须先确认旧执行器退出,不能通过直接删除账本解除控制。
|
||||
|
||||
验收至少覆盖失败图片与长命令并存时无关写入成功、连续工具失败不触发返修次数限制、所有退出路径释放并发占用、关闭后零新增执行/付费提交、迟到写入被拒绝,以及远端不确定任务不重复提交。自动化证据与平台未验证项记录在关联实施计划中;Linux 进程组清理不冒充 Windows Job 的完整子树退出证明。
|
||||
|
||||
### 宿主验收与执行许可合同
|
||||
|
||||
- 正式 GUI 和 CLI 的共同 Direct 回合入口建立宿主控制状态,绑定 canonical 项目路径、稳定 clientTurnId 和原始用户输入摘要;宿主私有目录保存权威账本并独占该回合,项目 `.agent` 仅允许保存展示副本。配置或项目侧文件被改写、工具切换、Provider 重试和进程重启不得刷新同一回合的预算。
|
||||
- Direct 回合集成测试也按生产入口计算原始用户输入的 SHA-256 十六进制摘要(64 字符),不能用请求名称替代。用户回显过滤回归继续覆盖实时消息去重、回合起止身份关联及历史落盘过滤。
|
||||
- 直接启动 Direct 工具桥的图片生成通知测试,须复用真实宿主执行会话与已登记交付合同夹具,再发起工具请求;继续验证资源提交后发出 manifest 失效通知,以及空提示词被参数校验拒绝且不发通知,不绕过执行许可门禁。
|
||||
- 普通聊天与读取不要求交付合同。首次修改、代码执行或付费扩项之前,模型通过结构化工具登记本轮必需范围与验收项;合同非空、有界且只冻结一次。模型只能声明要求,不能提交“通过”作为证据。后续扩项留到新的用户回合。
|
||||
- 明确新 Web 创建由宿主可信脚手架凭证及尚未交付的宿主记录判定,CLI 同样据此判定,不从提示文本猜测;这种回合即使模型没有调用工具或没有登记合同,也不得按普通聊天宣布交付。已有项目只有未激活合同且从未产生副作用时才允许直接聊天结束。
|
||||
- 验收项为明确类型的产物、构建/测试命令、双端视觉或指定固定场景的双端玩法。可信新 Web 游戏由宿主补充构建、双端视觉和玩法底线,不能由模型声明“已有项目”降低。已有项目按冻结的变更范围选择层级;平台美术只在用户目标要求时成为必需项。
|
||||
- 同一份双端玩法证据可同时满足视觉项,避免重复浏览器运行。构建证据分别绑定源码输入摘要与输出摘要,正常生成 dist 不算源码漂移;浏览器证据绑定构建后的实际运行输入。只有宿主验证完成产生的结构化结果和证据文件摘要能满足合同,项目内自行写出的验证 JSON 无效。
|
||||
- 产物项的初始摘要由宿主冻结,模型不能提供或在重放时重算。仅登记已经存在的文件不能立即交付:产物必须实际变化/新出现,或有当前指纹的宿主可信验证证据;原生修改和工具修改遵守相同判据。
|
||||
- `validation.maxRuns` 保留已配置值,语义为执行/返修批次上限;首次执行开启第一批。开发期正常成功命令和源码编辑共享本批,不逐条消耗次数。开始验证后绑定输入,执行失败或验证期间输入漂移使本批进入排空状态,关闭新的执行入口,等已受理操作结束后才开启下一返修批次。读取与结构化编辑不单独消耗次数。
|
||||
- `validation.maxExecutionSeconds` 默认 900,必须为正整数,是整个 clientTurnId 的累计执行时间上限,换批次不清零。并行操作分别计时累加,内置工具不与 app-server 的外层 MCP 事件重复计费。时间耗尽立即拒绝新执行、写入和付费扩项,保留最近证据与未完成项;Provider 的重试次数保持独立。
|
||||
- 直接启动 Direct 工具桥的图片生成通知测试,须复用真实宿主执行会话夹具,再发起工具请求;继续验证资源提交后发出 manifest 失效通知,以及空提示词被参数校验拒绝且不发通知,不绕过执行许可门禁。
|
||||
- 交付合同不参与普通工具准入。模型通过结构化工具登记本轮游戏交付的必需范围与验收项;合同非空、有界且只冻结一次。模型只能声明要求,不能提交“通过”作为证据。后续扩项留到新的用户回合。
|
||||
- 当用户要求制作、完成或交付游戏时,由 Agent 理解意图并登记合同。首次输入也按同一用户意图条件登记;宿主不做关键词或 LLM 意图分类。无合同回合可以正常写入、执行、生成和验证,也可在必要清理后结束,不触发缺合同返修或生成游戏交付证明。系统提示、工具描述及随包技能遵循同一条件。
|
||||
- 新合同格式为 `agc-direct-delivery.v2`,只接受非空、有界的 visual/gameplay 要求。artifact/command 类型、初始文件变化摘要及 host-entry/host-build 已删除;普通文件、命令、构建和 agc_run_validation 工具及真实失败回执保留。主动登记新 Web 合同时,宿主沿用首次交付事实补充既有双端视觉/玩法底线并返回完整要求;未登记不补合同。冻结后同参重放复用 newWebGame,不重算范围。用户于 2026-10-05 确认视觉/玩法检查保持现状,本次重构不继续调整这两类判据。
|
||||
- 同一份双端玩法证据可同时满足视觉项,避免重复浏览器运行。视觉/玩法仍校验双端、固定场景及版本、当前运行指纹、报告与截图摘要;只有宿主真实验证回执有效,项目内自行写出的验证 JSON 无效。删除 artifact 要求不删除浏览器证据文件的防篡改校验。
|
||||
- `validation.maxRuns` 保留已配置值,仅用于交付回复复核次数;普通执行成功、失败、取消和验证输入漂移均不消耗该次数。验证证据继续绑定输入,失败或漂移仅使相应证据不能证明交付;Agent 可以继续无关工作。
|
||||
- `validation.maxExecutionSeconds` 默认 900,必须为正整数,是整个 clientTurnId 的累计执行时间上限,同回合重试不清零。并行操作分别计时累加,内置工具不与 app-server 的外层 MCP 事件重复计费。时间耗尽立即拒绝新执行、写入和付费扩项,保留最近证据与未完成项;Provider 的重试次数保持独立。
|
||||
- `validation.maxTurnSeconds` 默认 1800,必须为正整数,是同一宿主回合从开始起的墙钟上限,重启不重置,用于约束模型空转和超出单个工具事件边界的后台会话。墙钟上限与累计执行时间分别记录,任一耗尽都收束自有执行器;不能把模型等待时间报告成工具执行时间。
|
||||
- 捆绑 app-server 的原生命令使用已验证的逐次审批能力;宿主只返回单次接受/拒绝,不允许会话授权或 exec policy 修订。第三方 MCP 必须显式启用逐调用询问,不能依赖不可信 readOnlyHint。询问缺少调用 ID 时,按服务器与回合中的并发组保守管理,不能解析展示文案猜测归属。
|
||||
- 原生、内置与第三方所有入口都经过同一宿主状态;独立工具继续并行,只有身份、批次切换、收尾与必要资源冲突形成短临界区。能力检测失败不得退回无控制执行。
|
||||
- 原生、内置与第三方所有入口都经过同一宿主状态;独立工具继续并行,只有身份、回合关闭、收尾与必要资源冲突形成短临界区。能力检测失败不得退回无控制执行。
|
||||
- 上述回合控制适用于 DirectProject。独立客户端 HTTP MCP 显式使用 ExternalClient 来源,保持其原有权限、幂等和浏览器能力,不借用当前项目另一条 Direct 回合的预算或可信证据;新交付合同与托管验证命令工具要求 Direct 会话。服务端 external_mcp 不变。
|
||||
- 必需证据齐备后,宿主先进入封口状态,拒绝新副作用,再确认在途归零、收束模型执行器并取得进程退出证明,最后重新核对源码、产物和证据摘要;核验成功原子进入 completed 并产出宿主报告。不能先写 completed 再尝试停止后台进程。宿主主动结束模型回合属于交付终态,不触发普通错误反馈或重试。未达标不得用模型最终回复替代验收。
|
||||
- Windows app-server 在任何模型工具执行前绑定不可脱离的自有 Job,超时/取消/断连时验证整个 Job 已退出。其它平台继续保留受控进程组;未取得完整子树退出证据时按不确定状态报告,不宣称全部后台执行已停止。已受理的远端付费任务保留原不确定围栏,断连不构成自动重放授权。
|
||||
- 付费许可始终绑定原回合和原租约,不能在容量或同动作锁排队结束后借用新回合。排队可取消,每次新 POST 前与封口共用宿主状态短锁,核对原许可、期限与阶段并持久化提交边界;封口、终止或耗尽后不得新增提交。已经越过提交边界的请求不丢弃,其 operation ID 和不确定状态继续持久化并允许原 GET 对账,多阶段生成的下一次 POST 仍须重新核验。ExternalClient 与手工资源操作保持既有语义。
|
||||
- 自动交付验收只在模型正常结束本次响应后启动;操作结算、AGC 补丁成功、登记与状态查询都不触发封口。正常完成后证据齐备则进入 Sealing,拒绝新副作用,确认在途归零和执行器退出,再复核运行输入及证据,成功才进入 Completed 并返回宿主报告。未达标仍在原预算与复核次数内反馈修复;取消、耗尽、断连等异常终止保持其原因,不能因证据齐备改成成功。
|
||||
- Windows app-server 在任何模型工具执行前绑定不可脱离的自有 Job,超时/取消/断连时验证整个 Job 已退出。其它平台继续保留受控进程组;受控归属退出可用于回合收尾及合同完成,但进程组证明不宣称逃逸后代或完整子树均已退出。正常操作回合在 Closing 清理后返回 Working,再由回复复核完成;已封口回合保持 Sealing 直至验收完成。缺失或失败的归属清理仍进入 Interrupted。已受理的远端付费任务保留原不确定围栏,断连不构成自动重放授权。
|
||||
- Linux 进程组检查排除僵尸;目录枚举失败或数字 PID 的状态不可读取、不可解析时,不以不完整扫描证明组为空,回退到进程组存在性检查。已确认消失的 PID 可以忽略;非进程目录不参与扫描。
|
||||
- 无合同收尾在预算检查中产生终态报告时,回复复核优先返回已持久化报告;没有终态报告的关闭失败仍保留真实错误,不把预算耗尽改成 Completed。
|
||||
- 宿主正常关闭连接产生的迟到通知仅作为诊断,不为 Working/Closing/Sealing 生成终态报告,也不改写 Completed 的回复;只有 Interrupted/Exhausted 的既有失败终态可以追加收尾说明。
|
||||
- 付费许可始终绑定原回合和原操作,不能在容量或同动作锁排队结束后借用新回合。排队可取消,每次新 POST 前与封口共用宿主状态短锁,核对原许可、期限与阶段并持久化提交边界;封口、终止或耗尽后不得新增提交。已经越过提交边界的请求不丢弃,其 operation ID 和不确定状态继续持久化并允许原 GET 对账,多阶段生成的下一次 POST 仍须重新核验。ExternalClient 与手工资源操作保持既有语义。
|
||||
- 执行账本使用 `agc-direct-execution.v3`,删除 requiresContract,保留回合预算、归属、活动操作、退出证明及合同证据。读取 v1/v2 只白名单移除退役字段,未知字段仍拒绝;旧终态不重开,含旧合同的非终态保留要求并转为 Interrupted,提示新用户回合继续,不因删除要求宣告成功。旧无合同账本移除强制标记后仍按原预算与活动操作恢复规则处理;更早项目侧验证账本缺少可信时间,不能授予同回合新预算。旧合同终态可查询历史但不再按新标准评估。
|
||||
- 模型一次执行结束时先进入 Closing,关闭新操作和迟到提交,核实自有执行器退出及活动操作归零后才能回到 Working 接受交付反馈;整个用户回合结束后撤销旧许可。Closing 只用于实际关闭,不由普通工具失败触发。普通无合同回合完成不宣称游戏验收通过。
|
||||
- 本地写事务未结算或失败仍需核对时不得封口。与失败写入重叠的旧写入/旧验证不能清除该围栏;只有失败之后新准入的成功修复或可信验证可以恢复验收。普通文件写入与账户/本地资产导入显式携带原写入许可,取得项目锁后再与宿主状态锁共同核验期限并提交短本地事务;等待锁或下载期间终止的请求不得继续落盘,网络等待不持宿主状态锁。
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user