diff --git a/docs/agent-specs/2026-06-23-design-agent-audio-asset-line-review.md b/docs/agent-specs/2026-06-23-design-agent-audio-asset-line-review.md new file mode 100644 index 00000000..e4281068 --- /dev/null +++ b/docs/agent-specs/2026-06-23-design-agent-audio-asset-line-review.md @@ -0,0 +1,202 @@ +--- +topic: 让 A-model 生成"更好玩"——游戏策划 agent + 音频/资产线 + modify 双路 +type: review +date: 2026-06-23 +status: review-closed(§6.8 双评审已收口:Opus 全量 + Codex 半程独立印证 + 代码就地核实) +owner: 创始人 + 6c6g 文档/设计线 +related: + - .agents/skills/agentic-amodel-generation.md(A-model 生成 harness 现行形态) + - .agents/skills/sim-business-game-design.md(经营玩法设计 skill,design 层知识库) + - .agents/skills/littlejs-game-dev.md(code 层作业手册 + 6 footgun) + - game-cloud/.../saa/SaaStudioGraph.java / SaaStudioNodes.java(拓扑 / designNode / modify / amodel 短路) + - memory: amodel-generation-build-state(2026-06-23:root-fix A+B、6 footgun、v2/v3) +--- + +# 评审版:让 A-model 生成"更好玩"——策划 agent + 音频/资产线 + modify 双路 + +> 评审版 = 结论先行、架构级、不含代码细节。批准后写执行版。**本版已过 §6.8 双评审收口(见 §0.1)。** + +--- + +## 0. 结论先行 + +**核心判断**:九门是**运行时、玩法无关**的可玩性门(boot/活性/输入/有进展),它验"能玩"不验"好玩",**且故意不懂任何品类语义**——这是它的价值,不能破坏。生成"能玩"已稳(v3 干净 re-gen 8/9,6 footgun 仅剩 1 个 audio 方法名幻觉);"好玩"短板在 **design 层无策划脑 + 平台音频/资产能力缺口**。 + +**三项决策(求批)+ 双评审的一个重大纠正:** +1. **① 策划 agent(升级 designNode)= 低风险、且大半已通**——双评审实证:design 输出**已经 K_ENRICHED 富化-brief 喂到 amodel harness**(create 路)。本项主要是把 design 调强(prompt + 升 M3),新接线少。**建议批。** +2. **② 音频/资产线 + ③ modify 双路 = 净新建,不是"复用/补深"(双评审 BLOCKER,代码已核实)**——amodel 路 `validate-ok 短路到 play、跳 scaffold/asset/build`(SaaStudioGraph:502),现有 asset 机器(assetNode/sourceProject.assets/build-from-source)与 modify 生命周期(deterministic/regenerate-module)**都在 gamedef 分支,amodel 根本不走**;harness 每次从 `_template` 全新 scaffold、无"读旧项目"工具。**故 ②③ 必须在 amodel harness 内部新建**,执行版按此基线。 +3. **质量门按"门各司其职"分三类,九门保持玩法无关(采纳创始人纠正)**: + - **API-存在静态门(玩法无关,新增)**:校验游戏代码调的插件方法在该插件 api.d.ts 真存在 → 廉价根除"方法名幻觉"类(defineScenes/stopBgm…),取代逐个 footgun-doc 的打地鼠。 + - **per-game gatespec 断言(玩法语义,design agent 产)**:经济/玩法正确性(买扣钱/库存减)= design agent 给这一局产断言 `{path,op}` 喂 play-spec、复用 **H 门现成的 `assertAfterPlay`**(`score increased` 本就是这种断言),并保证该动作 driver 可达。**通用九门一行不改、绝不加品类语义。** + - **好玩 = design-output 机检(设计时)**:design 产出须含"反无趣 8 条"里可机检的 ≥N 条(动作有飘字+音效 / score-delta / 解锁阈值 / 经济扣减…)→ 给主观调参兜客观地板。 + +**分期(纠正后)**:Phase 1 = ① 策划 agent(**仅 create**)+ API 静态门 + 好玩机检 —— 不依赖 modify/资产线,可独立验"设计层补料能否更好玩";Phase 2 = ② 音频/资产线(amodel harness 内部);Phase 3 = ③ modify 双路(净新建)。 + +--- + +## 0.1 §6.8 双评审收口记录 + +- **Opus 全量对抗评审**(220s,完成):抓到 2 BLOCKER(②③ 误框为复用)+ 4 MAJOR + 8 遗漏面,见下逐条折叠。 +- **Codex 对抗评审**(byv5smmau,**读完代码后挂死、未写收尾**,48min 停滞)——但死前 captured 的中途结论**独立撞到同一 BLOCKER**:「modify 现仍是 deterministic/regenerate-module 寻址、非'扩 design'」+「amodel 在 generate 直接 shell-out、不走 design/asset 节点」。**双盲一致 = 最强信号。** +- **代码就地核实**(我):B1(无 amodel modify 分支 + harness 无 load-base 工具)、B2(SaaStudioGraph:502 amodel 跳 scaffold/asset/build)、经济原语缺(插件清单无库存/经济原语)——**三条全属实**。 +- **结论**:按 §6.8「Codex 不可用→回落 Opus」,实得 = Opus 全 + Codex 半程印证 + 代码核实,强于单评。发现项已全部折入本版。**跨文档/执行期 TODO 列 §10。** + +--- + +## 1. 背景与问题 + +### 1.1 触发:创始人亲玩 v2 的三反馈 + 根因(已查证) +| 反馈 | 根因(锚) | 类别 | +|---|---|---| +| 没有进货环节 | brief 把成长设成"营业额被动解锁"(`core.js: computeUnlocked`),没要进货/库存环;**且 12 插件无经济原语** | 设计缺口 + 平台原语缺 | +| 顾客来得太快 | `balance.js` IDLE_SPAWN 1300 / RUSH_SPAWN 700 / RUSH_START 20s;brief 只说"渐入高峰"没给速率 → M3 拍激进 | 数值调参(设计未给目标) | +| 没有背景音乐 | (a) `audio-music` 仅 ZzFXM 合成、不支持 mp3 → 外采 ~9MB BGM 用不上;(b) M3 写 ZzFXM `SongData` shape 错 → loadSong 拒 → 静默 | 平台能力缺 + footgun | + +### 1.2 现状基线(已验证) +- **"能玩"已稳**:root-fix A(门可信化 `cbe42933`)+ root-fix B(input→L1 `88d3a237`)+ 6 footgun 蒸馏 → v3 干净 re-gen **8/9**(H score 0→1202,5 footgun 全避开),**唯一栈错 = 第 6 个 audio 方法名幻觉 `audioMusic.stopBgm()`(真名 `stop()`)**。v2(hand-fix 5 处)已 studio 真玩。 +- **"好玩"未达标**:design 层是一次便宜模型调用产设计稿+gatespec,无玩家/策划视角的机制规划。 +- **关键路由真相(双评审揭出)**:amodel 路 `generate` 节点内直接 shell-out 到 harness,`validate-ok` **直奔 play、跳 scaffold/asset/build**(SaaStudioGraph:502);harness 产**单个自包含 `bundle.iife.js`**。→ 任何"扩 SAA 图 asset 节点"的方案都打不到 amodel。 + +### 1.3 已存在 vs 需新建(双评审纠正后) +| 件 | 状态 | 用于 | +|---|---|---| +| `designNode` + design→amodel(经 K_ENRICHED 富化-brief 文本) | **已通**(create 路) | ① 策划 agent(升级即可) | +| modify 生命周期(deterministic / regenerate-module) | **gamedef 专用,不调 amodel harness** | ③ 需**新建** amodel modify | +| asset 机器(assetNode / sourceProject.assets / build-from-source) | **gamedef 分支,amodel 跳过** | ② 需在 **harness 内部新建** | +| `loadHostAssets`(浏览器图片拉取) | 已有,**但明确不载音频** | ② 图片可借;音频全新 | + +--- + +## 2. 目标 / 非目标 + +**目标**:G1 经营游戏自带核心经营环(进货/库存或等价资源循环);G2 节奏/数值舒适可调(design 给目标值);G3 有音乐(mp3 压缩+懒加载);G4 modify 路可用(对现有游戏按意图改);G5 studio 见水彩+听音乐。 + +**非目标(硬约束)**: +- **九门绝不加品类/玩法语义**(创始人定)——玩法正确性走 per-game gatespec 断言,不进通用门。 +- 不做 3D / Tier2-3;不重写 code ReAct(只改它的输入=更好的设计);不引入 future-state 组件;不把进货硬编码进模板(玩法=生成域)。 +- 不强制每款都有 mp3(无音乐资产→退 ZzFX/静音,容错)。 + +--- + +## 3. 推荐方案 + +### 3.1 ① 策划 agent(升级 designNode)——低风险,大半已通 +- **定位**:design 节点 = 有游戏设计脑的策划 agent;知识源 = `sim-business-game-design` skill + `littlejs-game-dev` 可达能力子集。 +- **create**:意图+品类 → 玩家视角完整设计(核心循环;经营必含资源循环;**数值/节奏目标值**;音频方案;juice;**可达性自检**=只用 12 插件+boot.ctx 能达成的机制)。 +- **输出通道(双评审纠正)**:design 输出**当前以富化-brief 文本(K_ENRICHED)喂 amodel**——这条已通。**决策点 O4**:维持"更丰富的散文 brief"(今天就能用、零接线)vs 升级为"结构化设计 schema"(需改 harness prompt 去解析,且会扰动刚转绿的 amodel e2e)。**倾向先散文、后结构化。** +- **模型档(D1)**:倾向升 M3(策划要设计脑);design 每局一次、保持**在 repair 环之外**(m2:进 repair 环会乘成本)。 +- **modify(归 Phase 3)**:见 §3.3。 + +### 3.2 ② 音频/资产线(amodel harness 内部新建,非扩 SAA asset 节点) +- **定位纠正**:asset/audio 必须做进 **`tools/amodel-gen/` harness 自己的 scaffold/build/stage**(amodel 不走 SAA assetNode)。 +- **图片**:harness stage 已会拷 `assets/`(本会话已加),`loadHostAssets` 浏览器侧已载图(staged 真玩已验水彩)。缺口 = **studio 侧把资产随包可达**(studio 现只内联 engineBundle)。 +- **音频(M1:比"下发"深)**:需一条**新运行时音频通道** —— (1) `audio-music` 插件加 `loadTrack(url)`/decode/loop(**插件契约变更,走 §6.6 contract-first**);(2) host 首手势解锁接到文件播放(现 `audioUnlocked`/`audioFactory` 喂的是合成器);(3) harness build 拷/引 mp3 + manifest;(4) studio serve mp3;(5) **`build-from-source` 现禁 `fetch`** → 要么开例外(懒加载 fetch),要么 base64 内联(则撞包体门,见 M2)。 +- **体积(M2)**:首屏≤2MB/总≤10MB 门**目前在 amodel 路未真正布防**(publish-amgen 只记 bundleSize)。执行版须:(a) 明确该门在 amodel 哪里布;(b) 解 inline-vs-lazy-fetch 张力(懒加载需同源 served URL + fetch 例外;内联则进包撞门)。**倾向 mp3/opus 压缩(ffmpeg,~150–300KB)+ 懒加载 fetch + 首帧后**。 +- SFX 留 ZzFX(短音效,几十字节)。 + +### 3.3 ③ modify 双路(净新建) +- **现状(B1)**:无 amodel modify;harness 从 `_template` 全新 scaffold、**无"读旧项目 src/"工具**。 +- **需新建**:(a) harness 加"载入 base 项目 src/"的入口;(b) 新 `modifyRouter` 的 amodel 分支;(c) 决定 modify 语义 = **全量重生成-带意图**(便宜,近似现 regenerate-module→generate 退化)vs **真增量改 src/**(贵,新 harness 能力)。 +- **第一靶纠正(m4)**:v2 是 hand-fix 过的产物,src/ 未必能干净 round-trip → **用干净 v3-类项目做 modify 首靶**,别用 v2。 + +### 3.4 质量门(三类各司其职——九门玩法无关不破) +- **(a) API-存在静态门(玩法无关·新增)**:check 阶段校验游戏源调的 `plugins.X.method()` / `ctx.method()` 在对应 api.d.ts 真存在 → 廉价拦"方法名幻觉"类(`defineScenes`/`stopBgm`/…),**比逐个 footgun-doc 可扩展**。注:参数-shape 错(loadSong 扁平数组 / dt 单位)静态难查,仍靠 footgun-doc + 运行时门。 +- **(b) per-game gatespec 断言(玩法语义·design agent 产)**:经济/玩法正确性 → design 给这一局产 `assertAfterPlay` 断言(如 `{path:"currency",op:"decreased"}`)+ 保证动作 driver 可达;复用 H 门现成机制。**通用九门不变。** +- **(c) 好玩 = design-output 机检(设计时)**:design 产出须含"反无趣 8 条"可机检 ≥N 条 → 主观调参的客观地板,堵 M4 的"死循环"。 + +--- + +## 4. 关键决策与权衡(求拍板) + +| # | 决策 | 倾向 + 理由 | 风险/依赖 | +|---|---|---|---| +| D1 | design 模型档 | **升 M3**(策划要设计脑;每局一次、可缓存) | 成本/延迟略增,需量测增益 | +| D2 | BGM 交付 | **mp3/opus 压缩 + 懒加载 fetch**(质量优先,顺带修 studio 水彩) | 依赖 §3.2 整条新音频通道(Phase 2);inline-vs-fetch + 禁fetch 待解 | +| D3 | 进货归属 | **skill 固化范式 + 策划 agent 实例化**(模板不绑玩法) | 无经济原语 → 裸 core.js;靠 (b) per-game 断言兜正确性 | +| D4 | 节奏数值 | **design 给目标值**(根治拍脑袋) | 仍可能不好玩 → modify 回环(Phase 3) | +| D5 | 分期 | **Phase1(① create)先独立交付** | Phase1 不含 modify/资产;BGM 暂静音/ZzFX | +| D6 | API 幻觉 | **加 API-存在静态门**(玩法无关) | 取代打地鼠 footgun-doc;arg-shape 仍靠 doc | +| D7 | "好玩"门 | **design-output 机检 N-of-8**(设计时,非通用门) | N 取值待定;只是地板非保证 | +| D8 | design 输出格式 | **先富化散文 brief(已通),后结构化 schema** | 结构化要改 harness、扰动刚转绿 e2e | + +--- + +## 5. 架构与数据流(纠正后) + +```mermaid +flowchart LR + A[用户意图] --> R[render·create/modify 共用入口] + R -->|create| C[classify] --> D[★策划 agent
玩家视角完整设计
进货/节奏目标/音频方案
+可达性自检 +好玩 N-of-8 机检] + D -->|K_ENRICHED 富化brief| G[generate·shell-out
M3 code ReAct] + R -->|modify·Phase3 新建| LB[★载入 base src/
+意图→改动单] + LB --> G + G --> CK[check
+★API-存在静态门] + CK --> V[validate] + V -->|amodel: 跳 scaffold/asset/build| P[play·通用九门
玩法无关
+per-game gatespec 断言] + subgraph H[★②音频/资产·harness 内部 + studio 下发] + AS[mp3/opus 压缩·懒加载
图片随包可达] + end + G -.harness scaffold/build/stage.-> AS + P --> EM[emit / studio] + AS -.studio serve.-> EM +``` + +--- + +## 6. Blast Radius / 兼容(纠正后) + +| 触及 | 改动 | 兼容 | +|---|---|---| +| `SaaStudioNodes.designNode` + `SaaPrompts` | 升级策划 agent(prompt + 模型档) | factory/gamedef design 保不回归 | +| `sim-business-game-design` skill | 扩进货/库存范式 + 节奏目标 + 反无趣机检项 | 纯增 | +| `tools/amodel-gen/`(check 加 API-存在门;新增 load-base;build 拷音频) | **②③ 主战场(harness 内部)** | raw-brief / 现 create 路保兜底 | +| `audio-music` 插件(+loadTrack/decode/loop) | **插件契约变更** → §6.6 contract-first | 现 ZzFXM 合成路不破 | +| host 音频解锁接文件播放 + studio inject/serve 资产 + build-from-source fetch 例外 | 新运行时音频/资产通道 | studio 现 engineBundle 内联路不破 | +| play-spec/gatespec(design 产 per-game 断言) | 复用 H assertAfterPlay | 通用九门**零改** | + +**回归底线**:factory/gamedef 冻结路、studio 现播放路、**通用九门、SAA 83 确定性回归、刚转绿的 amodel e2e**(D8 结构化 schema 会扰动它→慎)全绿。 + +--- + +## 7. 风险 + +- **R1 设计↔实现脱节**(进货环尤甚:无经济原语→裸 core.js,九门验不了经济守恒)→ 缓解:可达性自检(降级为 advisory)+ **(b) per-game 经济断言** + 设计层把经济设计对。 +- **R2 ②③ 是净新建、工作量被原稿低估** → 缓解:本版已重基线;分期(Phase2/3 各自独立)。 +- **R3 "好玩"无客观门→主观调参死循环** → 缓解:**(c) design-output N-of-8 机检**做地板 + modify 回环(Phase3);A1/A2 不以"纯创始人亲玩"为唯一门。 +- **R4 音频通道是兔子洞**(插件契约+host+harness+studio+fetch 五处)→ 缓解:Phase2 独立;先 opus 压缩到 ~KB 级 + 懒加载。 +- **R5 D8 结构化 schema 扰动刚转绿 e2e** → 缓解:先散文 brief,结构化择机 + 回归门兜。 + +--- + +## 8. 验收(执行版细化,先立锚) + +- A1(Phase1 ①·create):干净 re-gen 经营游戏,**自带进货/库存环 + 节奏舒适**(创始人亲玩 **+ N-of-8 机检过**),九门 ≥8/9,**经济 per-game 断言过**。 +- A2(Phase3 ③·modify):对**干净 v3-类项目**下「加进货+放慢+BGM」→ 产出改好版本,九门不回归。 +- A3(Phase2 ②·音频/资产):studio 该游戏**有水彩 + 有 BGM**(mp3 懒加载),首屏仍 <2MB / P75<3s。 +- A4(质量门):API-存在静态门拦掉已知方法名幻觉(defineScenes/stopBgm);通用九门玩法无关、零品类语义。 +- A5(不回归):factory/gamedef + 通用九门 + SAA 83 回归 + amodel e2e 全绿。 + +--- + +## 9. 分期(纠正后) + +- **Phase 1 — ① 策划 agent(仅 create)+ API-存在静态门 + 好玩 N-of-8 机检**:独立可交付,先验"设计层补料能否更好玩"。**不依赖 modify/资产线**(BGM 暂静音或修对 ZzFXM)。 +- **Phase 2 — ② 音频/资产线(harness 内部 + studio 下发)**:mp3/opus 压缩 + 懒加载 + audio-music 插件契约扩 + studio serve;顺带修 studio 水彩。 +- **Phase 3 — ③ modify 双路(净新建)**:harness load-base + modifyRouter amodel 分支 + 语义(全量重生成带意图 / 真增量);首靶用干净 v3-类项目。 + +--- + +## 10. 待办 / Open Items(执行版前定) + +- O1【D1】design 模型档量测(stage1 vs M3:设计质量增益 vs 成本)。 +- O2【②/Phase2】新音频通道五处的确切范围 + inline-vs-lazy-fetch + `build-from-source` 禁fetch 例外。 +- O3【D3】`sim-business-game-design` skill 固化经营子范式(放置/经营/养成)+ 各自资源循环 + 反无趣可机检项清单(定 N)。 +- O4【D8】design 输出:散文 brief 维持 vs 结构化 schema(后者改 harness + 扰动 e2e)。 +- O5【③/Phase3】amodel modify 语义(全量重生成带意图 / 真增量改 src/)+ harness load-base 工具设计。 +- O6【D6】API-存在静态门实现位置(check 阶段)+ 覆盖面(插件方法 + ctx 面);arg-shape 类是否也尝试。 +- O7【footgun】第 6 个 footgun(audio 方法名 `stopBgm`→`stop`)+ ZzFXM `SongData` shape:Phase1 若用 ZzFXM 兜底则必补,否则随 D6 静态门一并覆盖方法名类。 +- O8【兼容】结构化 design / 新输入是否回归 SAA 83 + amodel e2e(每次执行前跑)。 + +--- + +> **下一步**:本评审版收口完毕。**创始人批准 → 写 Phase 1 执行版**(策划 agent create 路 + API 静态门 + 好玩机检的模块/契约/验收/回滚)。Phase 2/3 各自独立执行版。 diff --git a/docs/agent-specs/2026-06-23-design-agent-phase1-execution.md b/docs/agent-specs/2026-06-23-design-agent-phase1-execution.md new file mode 100644 index 00000000..866a4418 --- /dev/null +++ b/docs/agent-specs/2026-06-23-design-agent-phase1-execution.md @@ -0,0 +1,164 @@ +--- +topic: Phase 1 执行版 —— 策划 agent(create)+ API-存在静态门 + 好玩机检 +type: execution +phase: 1 of 3 +date: 2026-06-23 +status: execution-pending(待 §6.8 双评审 + 创始人批准后执行) +origin: docs/agent-specs/2026-06-23-design-agent-audio-asset-line-review.md(review-closed) +owner: Mac 开发执行线 +--- + +# Phase 1 执行版:策划 agent(create)+ API-存在静态门 + 好玩机检 + +> 承接 review 版(已 §6.8 收口)的 Phase 1。**仅 create 路**;不含 modify(Phase 3)/音频资产线(Phase 2)。 +> 执行版 = 模块/文件/契约/步骤/失败路径/验收/回滚;不预写不可验证的代码细节。 + +--- + +## 1. 目标与范围边界 + +**目标**:让 amodel **create** 路的 design 节点变成"会读 skill 的策划 agent",产出含**进货/库存环 + 节奏目标值 + 好玩自检**的设计 → 喂现有 code ReAct;并加两道**玩法无关**的质量门(API-存在静态门 + 好玩机检),把"能玩"抬到"更好玩"。 + +**范围内**: +- 策划 agent = **tool-using JS agent**(复用 `tools/amodel-gen/` 的 m3.mjs + read_file 工具),**读真 sim skill**(不手抄),输出设计文本 + `gatespec`。 +- designNode **amodel 路**改为 shell-out 到该 JS 设计 agent;**gamedef 路 design 不动**(零回归)。 +- check 加 **API-存在静态门**(校验插件/ctx 方法真存在)。 +- 扩 `sim-business-game-design` skill(进货/库存范式 + 节奏目标值 + §10 标注可机检项 + 定 N)。 +- 好玩门 = design 产 per-game `gatespec` 断言(复用现成 `assertAfterPlay`→play_spec→H)+ 设计时 N-of-8 自检。 + +**范围外(硬边界)**: +- 不碰 **modify** 生命周期(Phase 3 净新建)。 +- 不碰**音频/图片资产线**(Phase 2);Phase 1 BGM 维持现状(静音 / 修对 ZzFXM 兜底,见 U6 失败路径)。 +- **通用九门零改、绝不加玩法语义**(创始人定)。 +- 不碰 **gamedef/factory** design 路;不动 code ReAct harness 的生成逻辑(只改它的输入)。 +- 不改 design 输出为结构化 schema(维持富化散文 brief,review D8)。 + +--- + +## 2. 前置条件 + +- mini staging repo 同步(本会话改动已 push,feat/mac-amodel-foundation @88d3a237)。 +- NEWAPI_KEY / new-api 网关可达(`docs/内网凭据与端点.md`);M3 可调。 +- 基线绿:v3 干净 re-gen 八/九门、SAA 83 确定性回归、amodel e2e(执行前各跑一次留底)。 + +--- + +## 3. 模块与文件(repo-relative) + +| 模块 | 文件 | 改动 | +|---|---|---| +| 设计 agent harness | `game-runtime/tools/amodel-gen/gen.mjs` | 加 `--mode design`(或新 `design.mjs`):scaffold-free,read_file/list_dir + done(emit 设计文本+gatespec) | +| 设计 agent prompt | `game-runtime/tools/amodel-gen/prompt.mjs` | 加 `buildDesignSystemPrompt()`:薄指令指 read sim skill + 可达性自检 + 好玩 N-of-8 + 产 gatespec | +| API-存在静态门 | `game-runtime/tools/amodel-gen/tools.mjs`(`check`) | 新增:解析游戏源 `.(` / `ctx.(` → 比对各 api.d.ts 方法集 → 未知方法报错 | +| SAA design 节点 | `game-cloud/.../saa/SaaStudioNodes.java`(`designNode`) | amodel 路 shell-out 到 JS 设计 agent(复用 `runProcessSplit` 范式);gamedef 路保 Java `DESIGN_SYSTEM` | +| 配置 | `game-cloud/.../saa/AigcExecutorProperties.java` / `SaaStudioGraph.Models` | design amodel 模型档(D1:M3)+ shell-out 开关(回滚用) | +| design 层知识 | `.agents/skills/sim-business-game-design.md` | 扩:进货/库存资源循环范式 + 节奏目标值指引 + §10 标注可机检 N 条 | +| 蒸馏 | `.agents/skills/agentic-amodel-generation.md` + `.agents/README.md` | 记设计-agent 形态 + API 静态门 + 第 6 footgun | + +--- + +## 4. 数据流与依赖 + +``` +brief ─▶ designNode(amodel) ─shell-out─▶ JS 设计 agent + read_file: sim skill + 用到的 api.d.ts + done ─▶ 设计文本 + ```gatespec + ◀── 设计文本 ───────────────────────────────────────────────┘ +designNode: enriched = brief + 设计文本 (现有逻辑不变) + gatespec → merge play_spec.assertAfterPlay/expectLatch/... (现有逻辑不变) +enriched ─▶ generate(code ReAct, 现有) ─▶ check(+API-存在静态门) ─▶ build ─▶ validate ─▶ play(通用九门 + per-game 断言) +``` + +**关键**:design→code 的喂法(K_ENRICHED 富化-brief)**已通,不改**;只是把 design 的**产出方**从"Java 单次调用"换成"会读 skill 的 JS agent"(amodel 路)。gatespec→play_spec 的 merge **已存在,不改**——per-game 好玩/经济断言顺这条现成路走。 + +--- + +## 5. 接口 / 数据契约 + +- **设计 agent CLI 契约**(对齐现有 `gen.mjs --mode saa` 范式):`node gen.mjs --mode design --brief "..." [--game-id ] --key ` → **stdout 末行单行 JSON** `{ ok, designText, gatespec? }`(或落临时文件,designNode 读)。stderr/stdout 分流(沿用 `runProcessSplit`,末行 JSON 不被 stderr 污染)。 +- **设计 agent 工具集**:`read_file` / `list_dir`(只读,repo 根)+ `done({designText})`;**无 write/无 shell**(design 不落文件,只产文本)。 +- **设计文本契约**:紧凑中文设计稿(覆盖 sim skill §8 配方)+ 末尾一个 ```gatespec JSON 块(`expectLatch` + `assertAfterPlay[]`,经营含经济断言如 `{path:"currency",op:"decreased"}` 或营收 `{path:"score",op:"increased"}`)+ 一段「好玩自检:命中 §10 第 X/Y/… 条」。 +- **API-存在静态门契约**:输入 = 游戏源 + 各插件 api.d.ts;规则 = 游戏调的 `plugins.<键>.<方法>` / `ctx.<方法>` 必须在对应 api.d.ts 的 interface 里声明;违者 check FAIL,报「<键>.<方法> 不存在,见 真方法名」。**允许列表**:动态/非插件成员(如自有对象方法)不误伤——只校验已知插件键 + ctx 面。 + +--- + +## 6. 实现单元(依赖序) + +### U1. 设计 agent harness(JS,tool-using) +- **目标**:`gen.mjs` 加 `--mode design`:不 scaffold、只给 read_file/list_dir/done,跑 ReAct 让 M3 读 sim skill+api.d.ts → 产设计文本+gatespec,stdout 末行 JSON。 +- **文件**:`game-runtime/tools/amodel-gen/gen.mjs`、`game-runtime/tools/amodel-gen/prompt.mjs`(`buildDesignSystemPrompt`)。 +- **依赖**:无(复用 m3.mjs / TOOLS 子集)。 +- **失败路径**:M3 超时/失败 → 末行 JSON `{ok:false}`,designNode 回落 brief-only(沿用现有 degrade)。 +- **验收**:本地 `--mode design --brief "经营 brief"` → 末行 JSON 含非空 designText + 合法 gatespec;run-log 显示真 read 了 sim skill。 + +### U2. 设计 agent 薄 prompt(指读 skill + 可达性 + 好玩 + gatespec) +- **目标**:`buildDesignSystemPrompt()`——薄指令:① read `.agents/skills/sim-business-game-design.md`(别手抄)② 按 §8 配方产设计稿 ③ **可达性自检**(只用 12 插件+boot.ctx 能达成的机制,落不到的剔除/简化,见 skill §9)④ **好玩自检**:过 §10、命中 ≥N 条并写明 ⑤ 末尾产 ```gatespec(expectLatch + assertAfterPlay,经营含经济/营收断言)。 +- **文件**:`game-runtime/tools/amodel-gen/prompt.mjs`。**禁反引号**(模板字面量陷阱,node --check 每改必跑)。 +- **依赖**:U1。 +- **验收**:产的设计含进货/库存环 + 节奏目标值 + 好玩自检 N≥定值 + 合法 gatespec。 + +### U3. designNode amodel 路 shell-out(gamedef 不动) +- **目标**:`designNode` 加 amodel 分支:`saaSourceMode==amodel` → shell-out JS 设计 agent(复用 `runProcessSplit`),拿 designText 回填 → 现有 enriched/gatespec/play_spec merge **原样复用**;gamedef 路保 `callAndRecord(designModel, DESIGN_SYSTEM, brief)`。 +- **文件**:`game-cloud/.../saa/SaaStudioNodes.java`、`AigcExecutorProperties.java`(shell-out 开关 + design amodel 模型档)。 +- **依赖**:U1、U2。 +- **失败路径**:shell-out 非零/末行 JSON ok:false → 落 `K_DESIGN_TEXT` 占位 + 回落 brief-only(对齐现有 design 失败 degrade);**绝不裸退图**。 +- **验收**:amodel 路真走 JS 设计 agent(trace 可见);gamedef 路 design 行为字节不变(回归)。 + +### U4. API-存在静态门(check,玩法无关) +- **目标**:`check` 解析游戏源(game-logic/core/render)的 `plugins.<键>.<方法>(` 与 `ctx.<方法>(` → 比对各插件 `src/plugins//api.d.ts` + PluginContext 方法集 → 未知方法 FAIL。 +- **文件**:`game-runtime/tools/amodel-gen/tools.mjs`。 +- **依赖**:无(独立)。**先以 advisory 上线**(记录不阻断)跑几轮看误报,再转硬 FAIL。 +- **失败路径/误伤防护**:只校验**已知插件键**(host-config 注入的 11 + ctx 面),非插件对象方法跳过;插件键→dir 映射坑(`juice`→`particles-juice`)写进映射表。 +- **验收**:对 v3 `stopBgm` 与历史 `defineScenes` 报错;对 v3 其余真方法零误报;模板 _template 零误报。 + +### U5. 扩 sim-business-game-design skill +- **目标**:补 ① 进货/库存**资源循环**范式(进货扣币→库存→售卖→补货;§1/§3)② 节奏目标值指引(spawn 区间/rush 起点参考区间,治"太快")③ §10 标注哪几条**可机检** + 定 **N**(如飘字+音效/score-delta/解锁/经济扣减,N=4)。 +- **文件**:`.agents/skills/sim-business-game-design.md`。 +- **依赖**:无(U2 的 prompt 指它)。 +- **验收**:skill 含进货范式 + 节奏区间 + 可机检 N 条标注;设计 agent 读后产出体现。 + +### U6. 好玩/经济 per-game 断言接线 + 蒸馏 +- **目标**:① 确认 design 产的 gatespec 经济/营收断言经现成 merge 进 play_spec.assertAfterPlay、被 H 门校验(**无新管线**,仅验证链路通)② 蒸馏:`agentic-amodel-generation` 记设计-agent 形态 + API 门 + 第 6 footgun(`stopBgm`→`stop`)。 +- **文件**:`.agents/skills/agentic-amodel-generation.md`、`.agents/README.md`;(经济断言驱动可达性靠 U2 设计 + driver,记 open 若 driver 不可达则降 advisory)。 +- **依赖**:U2、U3、U4。 +- **验收**:re-gen 经营游戏的 play_spec 含经济/营收断言且 H 门据其判定;skill 索引更新。 + +--- + +## 7. 边界 / 失败路径汇总 + +- 设计 agent 失败/超时 → brief-only degrade(不退图)。 +- shell-out 末行 JSON 被 stderr 污染 → 沿用 `runProcessSplit` 分流(批 B 已验)。 +- API-存在静态门误报 → advisory 先行 + 允许列表 + 键→dir 映射;确无误报再转硬门。 +- 经济断言对应动作 driver 不可达 → 该断言降 advisory(记 open O,不阻断;Phase 3 modify/driver 增强再硬化)。 +- BGM:Phase 1 不修音频通道;若 design 选 ZzFXM 兜底,必须连带修 `SongData` shape footgun,否则**显式接受静音**(写进验收,不假装有声)。 +- 富化 design 扰动刚转绿的 amodel e2e → 每次执行前后跑 e2e + 83 回归,红即回滚(开关)。 + +--- + +## 8. 验证方法 + +- **单元**:U1 本地 `--mode design` 出 JSON;U4 对 v3/_template 跑 check(报 stopBgm、零误报);U2 设计含进货/节奏/好玩。 +- **集成(端到端 re-gen v4)**:经现新设计 agent 干净 re-gen 一台经营游戏 → 看产出**有进货环 + 节奏舒适 + 好玩 N-of-8 命中** + 过通用九门 ≥8/9 + 过 API 静态门 + play_spec 经济断言被 H 校验。创始人亲玩判"更好玩"(对比 v3)。 +- **回归**:gamedef design 字节不变;SAA 83 确定性回归全绿;amodel e2e 不回归。 + +## 9. 完成条件 +- A1(review):干净 re-gen 经营游戏自带进货/库存 + 节奏舒适(亲玩 + N-of-8 机检过),九门 ≥8/9,经济断言过。 +- A4(review):API 静态门拦掉 stopBgm/defineScenes 类、通用九门零品类语义。 +- A5(review):gamedef + 通用九门 + SAA 83 + amodel e2e 全绿。 + +## 10. 回滚 +- design shell-out 由 `AigcExecutorProperties` 开关控制 → 关之即回 Java `DESIGN_SYSTEM`(amodel 也回单次调用)。 +- API-存在静态门 advisory→hard 两段;hard 出问题降回 advisory。 +- skill/prompt 改动纯文本,git revert 即回。 +- 各改动 amodel-gated,gamedef/factory/通用九门零触碰 → 回滚面小。 + +--- + +## 11. 待执行前定(origin Open Items 收敛) +- O1【D1】design amodel 模型档定 M3?(执行前一次小量测:M3 vs stage1 设计质量)。 +- O3【U5】§10 可机检 N 值(建议 N=4)+ 进货范式具体子型。 +- O6【U4】API 门覆盖面(插件方法 + ctx 面;arg-shape 类不在本门,留 footgun-doc)。 +- O7【U6】Phase 1 BGM:修 ZzFXM SongData footgun 兜底 vs 显式静音——二选一写死验收。 + +> **下一步**:本执行版过 §6.8 双评审 → 创始人批准 → 按 U1→U6 序执行。 diff --git a/docs/architecture/2026-06-23-saa-生成引擎-现状架构图.html b/docs/architecture/2026-06-23-saa-生成引擎-现状架构图.html new file mode 100644 index 00000000..67d50e65 --- /dev/null +++ b/docs/architecture/2026-06-23-saa-生成引擎-现状架构图.html @@ -0,0 +1,999 @@ + + + + + +绘境AI · SAA 游戏生成引擎 — 现状 + 演进(策划 agent / 3 阶段) + + + +
+ +
+

绘境AI · SAA 游戏生成引擎 — 现状 + 演进(策划 agent / 3 阶段)

+
+ 现状 SoT + 新设计 · 求审 + 上半 = 当前真实形态(代码核实);下半 = 「让生成更好玩」的新设计方向:策划 agent + 音频/资产线 + modify 双路,分 3 阶段演进。 +
+
+ + + +
+
Agent · LLM 调用
+
Harness · 确定性
+
固定 plumbing / 契约
+
净新建(新设计)
+
复用/升级(大半已通)
+
零触碰
+
SAA = Spring AI Alibaba 裸 StateGraph · 进程内编排 · new-api 网关 100.64.0.8:3000
+
+ + + + +
+

① 全景:一句话 → 一款可入库的游戏 现状

+

最粗一层。用户一句 brief 进来,SaaGraphDispatcher 进程内提交 SAA 图,图跑完四个阶段(理解&设计 / 生成 / 验收 / 出厂),终态回调入库,studio 前端消费。

+ + + + + + + + + 用户一句话 + brief(玩法描述) + + + + SaaGraphDispatcher + 提交进程内 SAA 图 + job 留 RUNNING 等回调 + + + + SAA StateGraph(进程内编排 · 见图②) + + + + ① 理解 & 设计 + classify · design + 富化 brief → 设计稿 + gatespec + + + + ② 生成 + generate(A-model · M3) + agent 写 L3 游戏代码 + + + + ③ 验收 + validate · play(九门) + + player 玩家评判(Agent) + + + + ④ 出厂 + emit / giveup + 断 __GameBundle → 终态 + + + + + + + + 救场回环 + + + + handleCallback + 建版本→组包→落包→回填 + DifyCallbackService + + + + 入库 + game_source_project · engineBundle + + + + studio 前端 + 玩家发现 → 即点即玩 + + + + + + + + +
+ + +
+

② SAA StateGraph 全拓扑(节点 + 边 + 救场回环) 现状

+

权威拓扑(来自 SaaStudioGraph.assemble)。蓝=Agent 节点(吃 LLM),绿=Harness 节点(确定性)。amodel 主线:validate-ok 直接短路到 play(跳过 scaffold/asset/build)(代码核实 SaaStudioGraph:502);factory/gamedef 旧路才走 scaffold→asset→build 链。

+ + + + + + + + + + + + + + START + + + + render + 入参规整 · brief 默认值齐全 · 图入口 + + + + classify LLM·classify + 玩法品类分类 + + + + design LLM·design + 产 K_ENRICHED 富化-brief + gatespec + + + + generate A-model · MiniMax-M3 + agentic 写 L3 游戏代码(见图③)· shell-out gen.mjs + + + + validate + 查 staged bundle + __GameBundle · 写 play-spec.json + + + + play 九门 harness(见图⑤) + serve + Chrome CDP + play.cdp.cjs → verdict.json + + + + player LLM×2 + 文本位 + 视觉位(M3) 玩家评判 + 软门 · 有体验问题→repair + + + nreview LLM·narrative + 叙事类游戏叙事审查 + + + + emit + 读 bundle.iife.js → 断 __GameBundle → status=succeeded + + + + END + + + + scaffold + factory/gamedef 旧路 + + asset + + build + esbuild + ⚠ amodel 路对此三节点不可达 + + + + repair + 带反馈 → generate + + escalate + 升 stage2 强档 → generate + + giveup + 超 maxRepairs(5) → failed + + + + modify + 改既有游戏 · gamedef 专用 + + + + + create + + + K_ENRICHED + + + + amodel 短路 + validate-ok → play + 跳过 scaffold 链 + + + 九门 pass + + 叙事类 + + + 无问题/轮尽 + + + + + + + factory/gamedef · ok + + + + build ok → play + + + + + + validate/build/play/player/nreview 失败 → 救场 + + + repair / escalate → generate + + + + + + + + modify 入口 + + → generate/validate + +

+ 救场预算: maxRepairs=5 · stage2ExtraRepairs=3 · maxPlayerRounds=1 · recursionLimit=120。任何失败门经 repair(带反馈)或 escalate(升强档)回到 generate 重试,耗尽 → giveup。 +

+
+ 现状修正点(双评审 + 代码核实):amodel 路 validate-ok 直奔 play,跳过 scaffold/asset/build(SaaStudioGraph:502-503)。原图把 asset/scaffold 画进 amodel 主线是误框 —— 它们只在 factory/gamedef 旧路可达;modify 节点同理是 gamedef/factory 专用(regenerate-module→generate / deterministic→guard fail-loud),无 amodel 分支。 +
+
+ + +
+

③ generate 放大 = A-model agent 循环(「agent 里面做什么」) 现状

+

generate 节点 shell-out 到 gen.mjs。这是唯一「真 agent」的地方:M3 在一个 ReAct 循环里调 6 个工具,自己读手册、写代码、自检,绿了才 done。harness 终态产单个自包含 bundle.iife.js。check / build / done 门都是 Harness(确定性),M3 只负责思考与写 L3 代码。

+ + + + + + + + + scaffold amgen-<id> + clone _template(含 L1+L2) + + + + MiniMax-M3 + ReAct 循环 + thinking 关 · maxSteps 70 + + + + + read_file 读手册/范例 + + list_dir + + write_file 整文件覆盖 + + check + node --check + 五法/红线 lint + + build + esbuild(秒级) + + + + + done 门(Harness 复核) + 复核 check + build 必须都绿 + SAA:stage → gameId 目录 + 同进程 smoke-boot + 绿才接受 done,否则 M3 继续改 + + + + staged bundle.iife.js + → validate 节点接手 + + + + + + + + + + + 结果回喂 + + + 声明 done + + + + + + 边界:M3 只写 L3(game-logic.js …) + L1 plumbing write 会被拒 · L2 插件只用不写 + 单局墙钟上限 20min + +
+ + +
+

④ 三层代码架构(谁写 / 谁不写 — 这是 agent 的硬边界) 现状

+

每个游戏 = 三层。L1 固定 plumbing 与 L2 能力库由仓库提供、agent 不碰;agent 只写 L3 游戏本体。入口契约把嵌套摊平成 createGame({plugins,bundle,viewport}),L3 见不到宿主细节。

+ + + + L1 · 固定 plumbing + agent 不碰(write 被拒) + + index.html + entry-bundle.js + game.js(薄 wrapper) + host-config.js + + host-config.js:注入全 11 插件 + viewport 390×844 + 工厂 wiring + game.js:吃 opts.runtime.{plugins,bundle,viewport} → 调 createGame(扁平) + + + + L2 · 标准能力库(11 插件) + agent 用、不写 + + sceneFsm + sessionScore + hudUi + timerScheduler + save + gamefeel + juice + palettePost + audioMusic + collision + physics + + + + + L3 · 游戏本体 + agent(M3)真正写的 + + game-logic.js(必写) + export createGame({plugins,bundle,viewport}) + 五法 init/update/render/destroy + + 必须 _forensicsView()(可测性红线) + update 内必须 bundle.tick(dt) · 零引擎 import + + + 可选拆分(按需) + core.js · render.js · balance.js · assets.js + 极小游戏可全内联进 game-logic.js + 受控面 ctx 仅在 init(boot).boot.ctx + +
+ + +
+

⑤ play 放大 = 九门验收 harness(全 Harness,无 LLM) 现状

+

play 节点跑 serve-and-play.sh:静态 serve + Chrome headless(CDP)+ play.cdp.cjs。boot-game-host 把 bundle 启动、注入插件、桥接输入、挂 recHook,然后逐门取证写 verdict.json。九门 = 运行时 + 玩法无关,只验「能玩」(boot/活性/输入/有进展),故意不懂任何品类语义—— 这是它的价值,新设计绝不破坏它。未驱动时 E_live / H 降为 advisory;driven(spec 有 driver/inputs)时九门全硬。

+ + + + + + + + serve-and-play.sh + 静态 serve :4320 + Chrome headless CDP :9222 + + + boot-game-host.js + boot bundle · 注入 11 插件 + input bridge(canvas→game) + recHook → __engineCalls + + + play.cdp.cjs + 逐门取证 + 驱动 + → verdict.json + + + + + + + A_boot装载成功 + B_uncaught无未捕获异常 + C_frame掌帧推进 + D_render真渲染 + F_wiring真接引擎/插件 + + E_live ⚠活性·distinctStates + H_progress ⚠机制+latch·assertAfterPlay + G_input输入有效 + I_control控制跟手(可选) + + + + ⚠ E_live / H:未驱动→advisory + driven(spec 有 driver/inputs)→ 恢复致命 + + + 九门取证 A–I + + + verdict.json + pass + advisoryGates + → validate/play 节点消费 + + +
+ H 门 = per-game 断言的落点:assertAfterPlay 本就支持「score increased」这类断言。design 产的 gatespec 经现成 merge 进 play_spec.assertAfterPlay(SaaStudioNodes:665/674),被 H 门校验 —— per-game 断言管线已存在,新设计的「玩法语义门」就挂在这条现成路上,通用九门一行不改。 +
+
+ + +
+

⑥ Agent vs Harness 边界总表 现状

+

一眼看清:整条链上只有 4 个节点真正吃 LLM(classify / design / generate / player〔+nreview〕),其余全是确定性 Harness。generate 是唯一的「真 agentic」节点。

+ + + + + + + + + + + + + + + + + + + +
节点类型模型职责(现状)
SaaGraphDispatcherHarness—进程内提交 SAA 图;job 留 RUNNING;终态 → handleCallback
renderHarness—入参规整、brief 默认值齐全;图入口;分流 create / modify
classifyAgentstage1 · classifybrief 玩法品类分类
designAgentstage1 · design富化 brief → 设计稿(K_ENRICHED)+ gatespec;amodel 路经 K_ENRICHED 富化-brief 文本喂 generate
generateAgent · 真 agenticMiniMax-M3(thinking 关)shell-out gen.mjs;ReAct 循环 6 工具;只写 L3;done 门绿 → staged bundle.iife.js
validateHarness—查 K_AMODEL_GEN_OK + staged bundle + __GameBundle;写 play-spec.json;amodel-ok → 短路 play
scaffold / asset / buildHarness—factory/gamedef 旧路专用;amodel 主线被短路跳过(不可达)
playHarness—serve + Chrome CDP + play.cdp.cjs 九门(玩法无关)→ verdict.json + per-game 断言
playerAgent ×2文本=stage1 · 视觉=M3VLM 玩家评判(软门);有体验问题 → repair
nreviewAgentstage1 · narrative叙事类游戏叙事审查
emitHarness—读 bundle.iife.js → 断 __GameBundle → status=succeeded
giveupHarness—超 maxRepairs(5) → status=failed + 落 giveup-dump.json
repair / escalateHarness 路由—repair=带反馈回 generate;escalate=升 stage2 强档回 generate
modifyHarness—gamedef/factory 专用:regenerate-module→generate / deterministic→guard fail-loud(END);无 amodel 分支
handleCallback → 入库 → studioFixed—建版本→组包→落包→回填;入 game_source_project + engineBundle;studio 前端消费
+

+ 核心数据契约: + K_ENRICHED(design 产 → generate 消费,amodel 富化-brief 喂法)· + K_PLAY_SPEC(design 产 → play 消费 / 写 play-spec.json)· + bundle.iife.js(generate 产 → emit 消费)· + verdict.json(play 产)· + K_AMODEL_GEN_OK · K_SOURCE_PROJECT。 +

+
+ + +
+
+
新设计方向 · 让生成「更好玩」 · 求审
+
+
+ + +
+

⑦ 核心论点:「能玩」已稳,短板在「好玩」 新设计 · 求审

+

这是整个新方向的判断锚点。依据 = 2026-06-23-design-agent-audio-asset-line-review.md(§6.8 双评审已收口 + 代码核实)。

+ + + + + + + + + 「能玩」已稳 ✓ + 九门 = 运行时 · 玩法无关 + + · boot / 活性 / 输入 / 有进展 + · 故意不懂任何品类语义 + · v3 干净 re-gen 8/9 门通过 + · H score 0 → 1202(真有进展) + 这是它的价值 → + 不能破坏(新设计零改九门) + + + + + 「好玩」短板 ✗ + 两个缺口(创始人亲玩 v2 实测) + + 缺口 1:design 层无策划脑 + · 没进货环(成长=营业额被动解锁) + · 顾客来太快(数值无目标值) + 缺口 2:平台音频/资产能力缺 + · audio-music 仅 ZzFXM 合成、不支持 mp3 + · studio 没水彩(资产随包不可达) + → 补 design + 补平台能力 + + + + + 核心判断 + 九门验「能玩」 + 不验「好玩」 + 好玩 → 补 design 层 + 平台能力,不动门 + + + + +
+ 三项决策(求批):① 策划 agent(升级 designNode)= 低风险、大半已通(design→amodel 富化-brief 喂法已通,主要是把 design 调强);② 音频/资产线 + ③ modify 双路 = 净新建(双评审 BLOCKER + 代码核实:amodel 跳 scaffold/asset/build,现有 asset 机器与 modify 生命周期都在 gamedef 分支、amodel 根本不走)。 +
+
+ + +
+

⑧ 现状 → Phase 1 → 2 → 3 演进总图(哪些复用 / 净新建 / 零触碰) 新设计 · 求审

+

一张图看清演进。蓝绿灰底=现状不变骨架;青色=复用/升级(大半已通);紫色=净新建;浅灰描边=零触碰(gamedef/factory 旧路、通用九门)。三阶段彼此独立可交付。

+ + + + + + + + + + + + 现状 amodel create 主链(不变骨架) + + render + classify + designP1 升级 + generateM3 ReAct + check+build+P1 API 门 + validate + play 九门零触碰 + emit + + + + + + + + + + + ↑ validate-ok 短路到 play,跳 scaffold/asset/build(amodel 不可达) + + + + Phase 1 · 策划 agent(仅 create)+ 质量门 + 大半已通 · 设计层补料能否更好玩 · 不依赖 modify/资产线 + + + design → tool-using JS agent + read 真 sim skill(绝不手抄) + amodel 路 shell-out · gamedef 不动 + + + ① API-存在静态门 + check 阶段 · 玩法无关 + 治 stopBgm/defineScenes 幻觉 + + + ② per-game gatespec 断言 + design 产 · 复用 H assertAfterPlay + 经济=买扣钱/库存减 + + + ③ 好玩 N-of-8 机检 + 设计时 · 过反无趣 8 条 ≥N + 给主观调参兜客观地板 + + + + + Phase 2 · 音频/资产线(净新建 · harness 内部) + 注:是 amodel harness 内部新建,不是扩 SAA asset 节点(amodel 跳过它) + + + mp3/opus 压缩 + 懒加载 + 首帧后 · ~150–300KB · 首屏≤2MB + + audio-music 扩 loadTrack + 现仅 ZzFXM 合成 · 插件契约变更 + + studio 下发资产 + serve + 顺带修 studio 没水彩 + + SFX 留 ZzFX + 短音效 · 不变 + + + + + Phase 3 · modify 双路(净新建) + 现 modify 是 gamedef 专用、不调 amodel → 需在 harness 新建 amodel modify 分支 + + + harness 加「读旧项目 src/」工具 + 现 harness 每次从 _template 全新 scaffold + + modifyRouter 加 amodel 分支 + 全量重生成带意图 / 真增量改 src/ + + gamedef modify 生命周期 · 零触碰 + deterministic / regenerate-module 不动 + + + + + + +
+ 读图三色:青=复用/升级 design 升级 + per-game 断言 + SFX;紫=净新建 API 静态门 + 好玩机检 + 整条音频/资产线 + modify 双路;灰=零触碰 通用九门 + gamedef/factory 旧路(含其 modify 生命周期)。 +
+
+ + +
+

⑨ Phase 1 放大 = 策划 agent(design 升级为 tool-using JS agent) 新设计 · 求审

+

Phase 1 只动 create 路的 design。把它从「Java 单次便宜模型调用」升级为会读 skill 的 tool-using JS agent:read 真 sim-business-game-design.md(守「绝不手抄 skill」铁律)→ 产更丰富设计(进货/库存环 + 节奏目标值 + 好玩自检)+ gatespec。amodel 路 shell-out,gamedef design 一行不动(零回归)。

+ + + + + + + + + brief + 品类 + classify 之后 + + + + designNode + 按 sourceMode 分流 + amodel 开关可回滚 + + + + JS 设计 agent + M3(D1:升 M3) + tool-using · ReAct + + + + + read_file + 读 sim skill + api.d.ts + + list_dir(只读) + + done(designText) + 无 write / 无 shell + + + + + 铁律:read 真 skill,绝不手抄 + sim skill §1 范式/§3 经济/§9 可达性/§10 反无趣8条(旧 Java 单次调用没读它) + + + + gamedef 路 · Java DESIGN_SYSTEM 单次调用 + 字节不变 · 零回归 + + + + 设计产出 → generate + + · 核心循环:进货扣币→库存→售卖→补货 + · 节奏/数值目标值(spawn 区间/rush 起点) + · 好玩自检:命中反无趣 ≥N 条 + · gatespec(per-game 断言) + + + + + + amodel · shell-out + + gamedef + + + + + + + K_ENRICHED + +
+ 喂法零接线:design 产出经现成的 K_ENRICHED 富化-brief 文本喂 amodel harness(create 路已通);gatespec 经现成 merge 进 play_spec.assertAfterPlay。Phase 1 主要是把 design 调强(prompt + 升 M3),几乎不新接线。design 输出格式(D8)先维持富化散文 brief(今天就能用、零接线),结构化 schema 留后(会扰动刚转绿的 amodel e2e)。 +
+
+ + +
+

⑩ 质量门三类 — 门各司其职,通用九门保持玩法无关 新设计 · 求审

+

这是新设计最关键的边界纪律(采纳创始人纠正):玩法正确性走 per-game 断言,绝不进通用九门。三类门各管一段,互不污染。

+ + + + + ① API-存在静态门 + 玩法无关 · 净新建 + + 在哪:check 阶段(静态) + 校验插件/ctx 方法真存在 + 解析 plugins.X.m() / ctx.m() + 比对各 api.d.ts 方法集 + 治:方法名幻觉 + stopBgm(真名 stop)/ defineScenes + + + + + ② per-game gatespec 断言 + 玩法语义 · 复用现成 + + 谁产:design agent(这一局) + 经济=买扣钱、库存减 + {path:"currency",op:"decreased"} + 复用现成 H 门 assertAfterPlay + 通用九门:一行不改 + + 保证该动作 driver 可达 + + + + + ③ 好玩 N-of-8 机检 + 设计时 · 净新建 + + 在哪:design 产出自检(设计时) + 过「反无趣 8 条」≥N 条 + 动作有飘字+音效 / score-delta + 解锁阈值 / 经济扣减 … + 作用:客观地板 + 给主观调参兜底(N 待定,建议 4) + + +
+ 边界纪律(硬约束):通用九门 = 运行时 + 玩法无关,绝不加品类/玩法语义。① 是玩法无关的静态门(治幻觉);② 是玩法语义但走 per-game 断言(挂 H 门现成 assertAfterPlay,九门定义零改);③ 是设计时机检(不在运行时门里)。三者分立 = 既补「好玩」又不破坏「能玩」门的纯洁性。 +
+
+ + +
+

⑪ Phase 2 放大 = 音频/资产线(净新建 · harness 内部,非扩 SAA asset 节点) 新设计 · 求审

+

定位纠正(双评审 BLOCKER):asset/audio 必须做进 amodel harness 自己的 scaffold/build/stage,不是扩 SAA assetNode —— 因为 amodel 路 validate-ok 短路、根本不走 SAA asset 节点。这是一条贯穿「插件契约 → host → harness → studio」的新运行时通道。

+ + + + + + + + 新音频通道(五处串起来) + + + 1 · 插件契约变更 + audio-music 加 loadTrack(url) + decode/loop · 走 contract-first + + + 2 · host 解锁接文件 + 首手势解锁 → 播文件 + 现喂的是合成器 + + + 3 · harness build + 拷/引 mp3 + manifest + amodel harness 内部 + + + 4 · studio serve + serve mp3 + 资产随包可达 + 现仅内联 engineBundle + + + 5 · fetch 张力 + build-from-source 现禁 fetch + 开例外 vs base64 内联(撞包体门) + + + + + + + + + + + 交付方式(D2 倾向) + + BGM:mp3/opus 压缩 + 懒加载 fetch + 首帧后 + · ffmpeg 压到 ~150–300KB → 首屏 ≤2MB / 总 ≤10MB + · 懒加载需同源 served URL + fetch 例外 + SFX 留 ZzFX(短音效,几十字节,不变) + 容错:无音乐资产 → 退 ZzFX/静音(不强制每款都有 mp3) + + + + + 图片(部分已有,缺 studio 可达) + + 已有:harness stage 已拷 assets/ + · loadHostAssets 浏览器侧已载图(staged 真玩已验水彩) + 缺口:studio 侧把资产随包可达 + · studio 现只内联 engineBundle → 顺带修「没水彩」 + loadHostAssets 已有但明确不载音频 → 音频全新 + + +
+ 体积门(M2 待解):首屏≤2MB / 总≤10MB 门目前在 amodel 路未真正布防(publish-amgen 只记 bundleSize)。执行版须明确:该门在 amodel 哪里布 + 解 inline-vs-lazy-fetch 张力。这是兔子洞(五处都要动),故 Phase 2 独立交付。 +
+
+ + +
+

⑫ Phase 3 放大 = modify 双路(净新建) 新设计 · 求审

+

现状(B1,代码核实):无 amodel modify;harness 每次从 _template 全新 scaffold、无「读旧项目 src/」工具;现 modify 节点是 gamedef/factory 专用(regenerate-module→generate / deterministic→guard fail-loud)。要让 amodel 也能「按意图改旧游戏」,必须新建两件能力 + 定语义。

+ + + + + + + + + + + + 改意图 + 旧游戏 + 「加进货+放慢+BGM」 + + + + modifyRouter + + amodel 分支(新建) + 现仅 gamedef/factory 分支 + + + + harness 加「读旧项目 src/」工具 + 载入 base 项目 src/ → 喂 M3 + 现 harness 无此入口 + + + + modify 语义(二选一) + A 全量重生成-带意图(便宜) + B 真增量改 src/(贵 · 新能力) + + + + 首靶纠正(m4) + 用干净 v3-类项目,别用 hand-fix 的 v2 + + + + gamedef modify 生命周期 + deterministic / regenerate-module + 零触碰 · 不动 + + + + + amodel + + + + gamedef/factory(不变) + +
+ 三阶段独立性:Phase 1(仅 create)不依赖 modify/资产线,可独立验「设计层补料能否更好玩」;Phase 2、3 各自独立执行版。每阶段回归底线 = factory/gamedef 冻结路、studio 现播放路、通用九门、SAA 83 确定性回归、刚转绿的 amodel e2e 全绿。 +
+
+ +
绘境AI · SAA 游戏生成引擎 · 现状(代码核实)+ 演进(策划 agent / 3 阶段 · §6.8 双评审收口)· new-api 网关 100.64.0.8:3000 · 上半=当前真实形态,下半=求审的新设计方向
+ +
+ +