Merge remote-tracking branch 'origin/master' into opt/win-ssache
Project CI / Repository checks (pull_request) Failing after 3m51s
Project CI / Frontend tests (pull_request) Failing after 3m47s
Project CI / Native shell tests (pull_request) Failing after 5m48s
Project CI / Backend tests (pull_request) Successful in 6m29s

This commit is contained in:
2026-09-14 06:21:45 +00:00
47 changed files with 1117 additions and 90 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,34 @@
# 【实施计划】项目客户端占用锁收敛-2026-09-14
Version: 1
Status: in-progress
Date: 2026-09-14
Milestone: `【里程碑】项目客户端占用锁收敛-2026-09-14.md`
## 代码边界
- `apps/ai-game-creator-shell/src-tauri/src/project/write_lock.rs`
- `apps/ai-game-creator-shell/src-tauri/src/runner/project_owner.rs`
- `apps/ai-game-creator-shell/src-tauri/src/runner/protocol.rs`
- 锁恢复、Runtime 写入和 Runner owner 定向测试
## 修改顺序
1. 统一同进程嵌套调用的项目锁语义,禁止自等待。
2. 盘点并迁移 Runner 的项目级 owner 文件到统一锁,保留诊断投影与跨 boot 恢复。
3. 删除重复项目级锁路径及其专属调用,保留底层原子写和 Git 锁。
4. 补齐同进程重入、跨进程占用、崩溃恢复和锁释放测试。
## 验证命令
- `cargo fmt --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml -- --check`
- `cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml project_write_lock_reuses_same_process_owner_and_releases_on_drop --no-default-features`
- Runner owner 与 response stream 相关定向测试
- `npm run check:encoding`
- `git diff --check`
## 风险与回滚点
- Runner 与 GUI 可能是不同进程;统一锁前必须验证同一客户端不会互相阻塞。
- 旧 `.agent/runtime/execution-owner.lock` 残留需要按 PID/启动身份安全回收,不能直接删除。
- 若跨 boot 恢复或 GUI/Runner 联动回归,回滚统一路径迁移,保留已验证的同进程重入修复。
@@ -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` 才能执行实际迁移。
@@ -0,0 +1,28 @@
# 【里程碑】项目客户端占用锁收敛-2026-09-14
Version: 1
Status: in-progress
Date: 2026-09-14
Parent Spec: `docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`
## 目标
项目只保留一个面向客户端占用的项目级跨进程锁,防止多个客户端同时打开同一项目;同一客户端进程内的嵌套调用复用既有项目锁,不因自身持锁进入等待。
## 边界
- 项目客户端占用锁与项目写入调用的职责统一,跨进程竞争仍返回占用语义。
- Agent DB、session lane、manifest 原子写和 Git 自身的底层一致性机制不在本里程碑删除范围内。
- 不改变项目 revision、权限、幂等、恢复和数据格式合同。
## 验收标准
- 同一进程内嵌套取得项目锁立即返回 advisory guard,不等待、不删除真实持有者锁。
- 不同进程持有项目锁时仍保持占用失败与残留回收判据。
- 客户端项目占用入口与 Runtime 写入入口不会各自维护第二个项目级锁文件。
- 锁释放后下一客户端可重新取得锁。
- 定向 Rust 锁测试、`cargo fmt --check`、`npm run check:encoding`、`git diff --check` 通过。
## 未决事项
- Runner 的 `execution-owner.lock` 如何迁移到统一客户端占用锁,需要补充跨进程启动、恢复和诊断测试后再落地。
@@ -5495,3 +5495,10 @@ Cocos Creator 根目录由 `package.json.creator.version` 与普通 `assets/`
- **真机判据**:点进任一栏目(或展开「所有资源」)时,**每一张**卡片都从它那一摞的位置/尺寸位移并缩放到自己的位置,而不只是总览里那 3 张;同一栏目里不同类型的两摞各自飞各自的卡。`prefers-reduced-motion: reduce` 下仍不播放动画(口径未改)。
- **已知未覆盖**:① 子画布内直接切到另一个栏目(分页画布换栏目)时目标栏目的卡片在该次 `begin` 时未渲染、拿不到任何 First,整段转场仍按旧口径跳过(`play` 的 `!captured.entries.size` 早退),本次未改;② 真机动画观感由浏览器渲染,jsdom 只覆盖几何与调用契约,需要按上面那条判据人工确认一次。
- **关联**:`apps/ai-game-creator-shell/src/view/project-development/resourceBookController.ts`(`begin` 的堆锚点 / `syncNodes` 的合成 First)、`resourceBookLayout.ts`(`allOpen` 列号)、`index.tsx`(宿主 `data-resource-book-stack-*`)、`apps/ai-game-creator-shell/tests/{resourceBookController,resourceBookLayout}.test.ts`、`tests/appSurface/project-development.suite.ts`、`docs/technical/【技术方案】GameAgent资源自由画板与快速编辑-2026-08-20.md`。
## 稳定版 AGC 复用开发栈必须核对 instance identity
- 现象:端口和 `/healthz` 都正常,但 AGC 连接了另一个 worktree 的 API、SpacetimeDB 或旧 Vite,表现为登录、项目列表、Runner 状态与当前代码不一致。
- 原因:健康检查只能证明“有服务响应”,不能证明服务属于当前工作树;旧 `.app/dev-stack.json` 可能没有当前 `repoRoot`、`instanceId` 和服务级 dataDir 身份。
- 处理:先读取 `.app/dev-stack.json`,核对顶层 `repoRoot + instanceId`,再核对服务 `repoRoot + instanceId + dataDir + pid + port`;AGC Vite marker 还必须带 `repoRoot + processId + port`。任何字段缺失或不匹配都拒绝静默复用,改为启动当前工作树自己的服务或明确提示清理。
- 验证:`scripts/dev.test.ts`、`apps/ai-game-creator-shell/tests/start-dev-stack.test.ts` 覆盖 snapshot identity 和旧状态拒绝复用;运行时记录实际端口、进程命令行和 dataDir,不要只记录 HTTP 200。
@@ -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`;付费资源调用仍由客户端绑定回合、幂等账本、请求上限和投影权威。