完成 DirectProject Phaser 迁移闭环
Project CI / Repository checks (pull_request) Failing after 3m28s
Project CI / Frontend tests (pull_request) Failing after 2m42s
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled

新增受控 project.bootstrap 依赖安装与审计

支持 game 子目录 project.verify 构建和 dist 入口门禁

同步 Phaser 迁移提示、权限契约、Runtime 分发与项目文档

补充 npm 网络沙箱、缺失依赖诊断和共享契约测试
This commit is contained in:
2026-09-14 13:30:46 +08:00
parent 86c1187ddc
commit 8c899b23f3
27 changed files with 526 additions and 37 deletions
@@ -0,0 +1,26 @@
Version: 1.0
Status: implemented; real-project runtime smoke pending
Date: 2026-09-14
Parent Milestone: docs/project-memory/plans/【里程碑】DirectProject Phaser迁移闭环-2026-09-14.md
## 修改顺序
1. 扩展 shared command contract 与原生工具 schema。
2. 增加 `project.bootstrap` 的安全校验、npm install 执行、审计与分发。
3. 扩展 `project.verify` 的 cwd/package/dist 门禁和提示词。
4. 更新 DirectProject 迁移工程指导与前端命令显示。
5. 补充定向测试并运行 typecheck、Rust 检查、编码与 diff 检查。
## 验证命令
- `npm run ai-game-creator-shell:typecheck`
- `cargo test -p ai-game-creator-shell project_bootstrap`
- `cargo test -p ai-game-creator-shell project_verify`
- `npm run check:encoding`
- `git diff --check`
## 风险与回滚
-`project.verify` 输入不带 cwd 时保持项目根行为。
- bootstrap 不修改 command.exec 的 npm 白名单;失败关闭并返回可诊断错误。
- 若 sandbox 网络能力无法在当前平台验证,仅保留实现与单测证据,不宣称真实安装通过。
@@ -0,0 +1,28 @@
Version: 1.0
Status: implemented; real-project runtime smoke pending
Date: 2026-09-14
Parent Spec: docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md
## 目标
为 DirectProject 建立单 HTML 到 Phaser 4 + Vite 的可运行迁移闭环:项目文件真实落盘、受控依赖初始化、`game` 子目录构建验证、`game/dist` 预览与桌面/移动验收。
## 边界
- DirectProject 迁移请求固定使用 `workspaceMode=DirectProject`,不再通过 JSON Generator 的 `gameHtml` 协议生成 npm 工程。
- `project.bootstrap` 只允许在项目内 `game` 目录执行无参数 `npm install`,读取并记录 package/lock 指纹。
- `project.verify` 支持相对 `cwd`,构建验证必须读取该目录 package.json 的原始脚本并确认 `dist/index.html`
- 预览继续只读取构建产物;不实现自动迁移未知游戏玩法语义或真实 Provider 生成。
## 验收标准
1. 命令契约、原生工具 schema、运行时分发、权限面板和提示词包含 `project.bootstrap`
2. bootstrap 拒绝越界 cwd、非 `game` 目录、参数注入和缺失/非法 package 文件,并在成功后返回依赖指纹。
3. `project.verify` 能在 `cwd=game` 执行原样 `npm run build`,成功条件包含 `game/dist/index.html`
4. DirectProject 提示明确要求 Phaser 4.2.1、`import Phaser from 'phaser'`、Vite 输出 `game/dist` 及完整玩法迁移。
5. 定向 Rust/TypeScript 测试、类型检查、编码检查和 `git diff --check` 通过;无法运行真实 Provider/浏览器时明确记录。
## 依赖
- 现有 project command sandbox、verification gate、preview resolver 和 command run/audit 持久化。
- 用户选择的真实项目目录必须包含 `game/index.html` 才能执行实际迁移。
@@ -51,7 +51,7 @@ SpacetimeDB crate、SDK、CLI / standalone 与生成 bindings 按 `2.8.3` 对齐
## AGC DirectProject 与 UI workflow
- 新 Web 游戏为 `game/` 下的 npm + Vite + Phaser 4.2.1 工程,使用包导入且允许其它依赖;npm 预览与导出只读取 dist,运行素材需纳入构建,已有单 HTML/Godot 不自动迁移
- 新 Web 游戏为 `game/` 下的 npm + Vite + Phaser 4.2.1 工程,使用包导入且允许其它依赖;npm 预览与导出只读取 dist,运行素材需纳入构建。单 HTML → Phaser 迁移固定走 DirectProject:文件落盘后先用受控 `project.bootstrap``game` 执行无参数 `npm install`,再用支持相对 cwd 的 `project.verify` 构建并确认 `game/dist/index.html`,已有单 HTML/Godot 不通过 JSON Generator 伪装成 npm 工程
- 通用 Agent Rust 分层为 `agent-runtime-core`catalog、执行生命周期、ToolHost/spawn/all-join/Provider 契约)、`agent-runtime-orchestration`(动态无环任务图、ready、依赖波次、返工下游闭包和受限自主扩图提案)与 `platform-agent` 游戏适配器;循环返工通过新 pass / epoch 表达,不在单张依赖图中建立回边。LLM 可经宿主结构化 function call 提出新增节点/边,编排层只生成经校验的新候选图,epoch 与持久化仍由宿主掌控。
- DirectProject 始终连接客户端内置的 `agc_tools` STDIO MCP,并在启动时额外读取客户端扩展仓库中已启用的第三方 MCP 独立项。第三方 STDIO/HTTP 配置只写入本次隔离 `CODEX_HOME`,单项非 required,启停、重命名和内容指纹进入 app-server pool identity;完整 Plugin Runtime、hooks/apps 和单文件脚本手动指定入口仍关闭。Skill 正文与 references 由 Codex 原生按需读取;`agc_tools` 负责标准美术准备、已登记资源有界查询、视频 / 角色动画 / 音效 / BGM 的 create-or-derive、已登记图片去背景、desktop/mobile 浏览器试玩和受控 `agc_web_search`;付费资源调用仍由客户端绑定回合、幂等账本、请求上限和投影权威。
@@ -40,9 +40,9 @@ DirectProject 自身的 `read_direct_project_conversation` 也必须在 blocking
新建 Web 游戏使用 npm 工程:默认 `game/package.json` 声明 Phaser 4.2.1 和 Vite 构建工具,源码使用 `import Phaser from 'phaser'``package-lock.json` 由 npm 维护。默认脚手架文件位于 `game/`,包含 `index.html``game.js``style.css``vite.config.js` 和 npm 配置/锁文件;已有根目录 npm 工程沿用原根,可按需求拆分模块并添加任意其它 npm 依赖,不设置包名白名单。客户端不手工分发 Phaser bundle,不用 import map 模拟 package 导入。
Agent 在包含 `package.json` 的目录执行 `npm ci`(依赖变更使用 `npm install`)和 `npm run build`;默认可从工作区根执行 `npm --prefix game ci``npm --prefix game run build`。DirectProject 保持 workspace-write 目录边界并开放网络,以支持 npm 依赖解析和安装;凭据仍由客户端代理持有,不进入项目或原生命令环境。其它执行模式维持现有权限。新游戏完成后执行 `npm run build` 并用真实浏览器试玩;依赖安装与构建失败必须反馈真实错误,不能回退成未解析裸模块导入的静态页面。
Agent 在包含 `package.json` 的目录执行 `npm ci`(依赖变更使用 `npm install`)和 `npm run build`;默认可从工作区根执行 `npm --prefix game ci``npm --prefix game run build`。DirectProject 保持 workspace-write 目录边界并开放网络,以支持 npm 依赖解析和安装;凭据仍由客户端代理持有,不进入项目或原生命令环境。依赖初始化必须通过受控 `project.bootstrap`(固定 `cwd=game`、无参数 `npm install`、只读取 package/lock 并记录 SHA-256 指纹),不得放开通用 `command.exec npm install`。构建使用 `project.verify` 的相对 cwd(例如 `cwd=game`);`build` 通过后还必须存在 `game/dist/index.html` 才能签发验证凭证。其它执行模式维持现有权限。新游戏完成后执行 `npm run build` 并用真实浏览器试玩;依赖安装与构建失败必须反馈真实错误,不能回退成未解析裸模块导入的静态页面。
npm 游戏的可预览产物固定为对应 package 目录下的 `dist/index.html`,静态 smoke 校验构建入口及本地文件引用,实际可玩性由浏览器验证。预览服务与导出读取该构建目录,所有运行素材必须由构建纳入 dist;npm 预览不回退读取源码或项目素材目录,保证试玩与导出一致。源码投影包含 package、锁文件、配置和真实游戏源码,排除 `node_modules/``dist/`、控制文件与凭据;npm 试玩包将 dist 文件映射到 `game/` 并附带发布说明,不包含源码依赖安装目录。现有单 HTML 项目不自动迁移,Godot 项目保持原合同。旧 JSON Generator 仅接受已初始化的单 HTML 项目,npm 项目或新建请求在调用 LLM 前明确拒绝并引导使用 DirectProject,避免静态草案伪装为 npm 构建产物。本节覆盖下文仅适用于旧单 HTML 产物的 Canvas API、手写动画循环和禁止外部本地脚本要求。
npm 游戏的可预览产物固定为对应 package 目录下的 `dist/index.html`,静态 smoke 校验构建入口及本地文件引用,实际可玩性由浏览器验证。预览服务与导出读取该构建目录,所有运行素材必须由构建纳入 dist;npm 预览不回退读取源码或项目素材目录,保证试玩与导出一致。源码投影包含 package、锁文件、配置和真实游戏源码,排除 `node_modules/``dist/`、控制文件与凭据;npm 试玩包将 dist 文件映射到 `game/` 并附带发布说明,不包含源码依赖安装目录。单 HTML → Phaser 迁移必须在 DirectProject 中完成:先识别 `game/index.html`,再将状态、输入、敌人/守卫、波次、胜负、重开和画布绘制迁移到 Phaser Scene 与 update 循环,并落盘 `game/package.json``game/game.js``game/style.css``game/vite.config.js` 和锁文件;不得把迁移目标伪装成 `gameHtml`现有单 HTML 项目不自动迁移,Godot 项目保持原合同。旧 JSON Generator 仅接受已初始化的单 HTML 项目,npm 项目或新建请求在调用 LLM 前明确拒绝并引导使用 DirectProject,避免静态草案伪装为 npm 构建产物。本节覆盖下文仅适用于旧单 HTML 产物的 Canvas API、手写动画循环和禁止外部本地脚本要求。
## 2026-09-02 项目名称显示与自动提炼