Merge remote-tracking branch 'origin/master' into fix/rust-toolchain-1-98
Project CI / AI game creator shell Rust shard 4/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 1/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 2/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust shard 3/4 (pull_request) Failing after 19s
Project CI / AI game creator shell Rust smoke (pull_request) Failing after 17s
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / Native shell tests (pull_request) Failing after 18s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 18s
Project CI / Frontend tests (pull_request) Failing after 7s
Project CI / AI game creator shell web tests (pull_request) Failing after 11s
Project CI / Repository checks (pull_request) Failing after 12s

This commit is contained in:
2026-09-20 15:59:17 +08:00
226 changed files with 2809 additions and 10389 deletions
+3 -3
View File
@@ -27,14 +27,14 @@
- [AGC 资源 kind 枚举化契约](./technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md#2026-09-15-gamecreationapp-资源-kind-枚举化当前权威口径)GameCreationApp 资源 kind 的 Rust enum、ts-rs 绑定、Unknown 可观测性和 shell 内重构边界。
- [策划 Agent 生产迁移与工作区浏览](./technical/【技术方案】策划Agent生产迁移与工作区浏览-2026-09-10.md)实施中;以自由协作原型为行为基线,复用生产基建,采用阶段审批与用户工作区文件浏览。旧 V2 会话的策划入口切换到新设计 Agent
- [策划 Agent 生产迁移与工作区浏览](./technical/【技术方案】策划Agent生产迁移与工作区浏览-2026-09-10.md)已完成;当前策划入口统一使用 Design Agent,采用阶段审批与用户工作区文件浏览。旧 V1/V2 会话、命令、专用展示和测试不再作为兼容目标
- [LLM 累计额度结算](./technical/【技术方案】LLM累计额度结算-2026-09-05.md):Router 累计额度、首次基线与原子钱包结算。
- [AI 游戏创作智能体 App 实施计划](./technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md):当前 DirectProject、受控语义工具、UI workflow、资源和运行时合同。
- [AGC 异步操作可恢复闭环](./【技术方案】AGC异步操作可恢复闭环-2026-09-14.md):认证响应体、最近项目检查和首页自动创建的超时、逐项恢复与跨页防重合同。
- [AGC 客户端稳定版生命周期大切换](./【技术方案】AGC客户端稳定版生命周期大切换-2026-09-14.md):统一 operation、认证/Runner、项目入口、本地恢复和 dev-stack 身份边界。
- [策划会话 Runtime V2 接入与旧链路退役方案](./technical/【技术方案】策划会话RuntimeV2接入与旧链路退役-2026-09-03.md)新单 Agent 策划会话、GDD 策略、未来 MCP/Skill 兼容插槽、阶段任务与退役验收合同
- [策划会话 Runtime V2 接入与旧链路退役方案](./technical/【技术方案】策划会话RuntimeV2接入与旧链路退役-2026-09-03.md)历史方案,仅用于追溯 V2 的实现与退役过程,不作为当前实现依据
- [DirectProject Codex 原始历史与异常恢复](<./technical/【技术方案】DirectProject Codex原始历史与异常恢复-2026-09-04.md>):原始 Responses item 持久化、线程注入与异常回合收尾。
- [DirectProject 对话历史单一事实源](./adr/【ADR】DirectProject对话历史单一事实源-2026-09-16.md):AGC 项目开发对话只以项目对话历史与运行态事件为真相源,聊天投影不落盘。
- [GameAgent 对话工具调用卡片](./technical/【技术方案】GameAgent对话工具调用卡片-2026-09-14.md):把右侧对话里的执行命令 / 写文件投影成 Codex 风格可折叠卡片,含采集、独立历史文件、事件字段与回读契约。
@@ -48,7 +48,7 @@
- [Direct 回合行为审计账本](./technical/【技术方案】Direct回合行为审计账本-2026-08-31.md)Direct GUI 回合把 native 读 / MCP / 写文件落成项目内有界时间线,用于判断有没有打开本轮附件。
- [项目开发工作台 PRD](./prd/【AI游戏创作】项目开发工作台PRD-2026-07-20.md):当前工作台页面和验收边界。
- [AGC 错误报告与诊断上传](./technical/【技术方案】AGC错误报告与诊断上传-2026-08-31.md):当前进程错误事件、应用级日志和管理员查看器合同。
- [立项策划 AgentFast GDD](<./technical/【技术方案】立项策划AgentFast GDD-2026-08-10.md>):旧 `project-supervisor-plan` / `project-planning` 历史会话的入口、审批恢复合同;V2 切换时未完成旧会话强制失败
- [立项策划 AgentFast GDD](<./technical/【技术方案】立项策划AgentFast GDD-2026-08-10.md>)历史 V1 方案,仅用于追溯;`project-supervisor-plan` / `project-planning` 入口、审批恢复和测试均已删除
- [GameAgent 资源自由画板与快速编辑](./technical/【技术方案】GameAgent资源自由画板与快速编辑-2026-08-20.md)
- [AGC 栏目画布底部工具栏入口矩阵](./technical/【AGC】栏目画布底部工具栏入口矩阵-2026-09-13.md):栏目画布底部工具栏的入口矩阵、可用条件与验收口径。
- [AGC 资源工作台三处交互收口改动前对照图](./technical/assets/agc-resource-workbench-ui-before-20260914/README.md):任务侧栏两个关闭入口、左侧贴边折叠把手、顶部播放按钮居中悬浮三张改动前截图与问题说明。
@@ -28,8 +28,8 @@
1. `cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml direct_thread -- --nocapture`
2. `cargo test --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml export_bindings`(生成 `src/features/project-workspace/generated/`),随后用 `prettier --write` 格式化生成目录,避免未格式化的 ts-rs 输出混进提交
3. `npx vitest run apps/ai-game-creator-shell/tests/directThreadChat.test.ts apps/ai-game-creator-shell/tests/directTurnPresentation.test.ts apps/ai-game-creator-shell/tests/directHistoryPaging.test.ts`
4. `npx vitest run apps/ai-game-creator-shell/tests/appSurface/project-development.suite.ts`
3. `npm run test -- apps/ai-game-creator-shell/tests/directThreadChat.test.ts apps/ai-game-creator-shell/tests/directTurnPresentation.test.ts apps/ai-game-creator-shell/tests/directHistoryPaging.test.ts apps/ai-game-creator-shell/tests/directHistoryAnchorGate.test.ts`
4. `npm run test -- apps/ai-game-creator-shell/tests/appSurface.test.ts``project-development.suite.ts` 由该入口注册,不能作为独立测试入口;同时验证现役 Design Agent 的会话恢复与审批界面。)
5. TypeScript 类型检查与 ESLint(范围同前次 DirectProject 迁移)。
6. `npm run check:encoding``npm run check:doc-index``git diff --check`
@@ -0,0 +1,92 @@
# 【实施计划】退役策划 Agent V1/V2 解耦清理
| 字段 | 值 |
| --- | --- |
| Milestone | `docs/project-memory/plans/【里程碑】退役策划Agent V1V2解耦清理-2026-09-15.md` |
| Status | ready |
| Owner | Codex |
## 一句话交付结果
删除退役策划 V1/V2 及其耦合的 Supervisor 产品残留,让当前 Design Agent 独立运行、做游戏走 DirectCodex 并恢复仓库编译;保留通用 Supervisor 和做游戏 16 Agent DAG。
## 验收判据
当前分支能够通过 AGC 前端 typecheck 和受影响定向测试;Design Agent 的新建、恢复、澄清、阶段审批和 reasoning 展示仍由当前 Design Agent 链路完成;旧 V2 IPC、旧 GDD 类型和旧前端测试契约不再存在。
## 修改边界
允许修改:
- `apps/ai-game-creator-shell/src/App.tsx` 中旧 V2 状态、helper、IPC 分支和旧 UI props。
- `apps/ai-game-creator-shell/src/app/types.ts` 中旧 GDD 类型。
- `apps/ai-game-creator-shell/src/features/project-workspace/planningSessionV2.ts` 及其直接调用方。
- `apps/ai-game-creator-shell/tests/appSurface/harness.ts``home.suite.ts`、旧策划事件测试。
- `apps/ai-game-creator-shell/src/styles.css` 中只属于旧 Plan GDD / planning lane 的样式。
- 没有现役调用方的旧策划身份 fixture、注释和文档索引。
- 为通过编译所需的最小共享残留删除或改名。
明确不修改:
- `directCodex` 主链路和当前 Design Agent。
- 16 Agent DAG、`supervisor-swarm` 测试和通用 Runtime 编排;只处理删除策划耦合后直接造成的编译错误。
- 当前 Design Agent Rust runtime、Design Agent 资源包和 Design Agent IPC 协议。
- 公开 API、SpacetimeDB schema、迁移和历史持久化数据格式。
## 实现顺序与提交拆分
### 提交一:解耦 Design Agent 状态命名
- 将新版 Design Agent 实际使用的 `planningV2*` transient reply、reasoning、active ref 和相关 lane 控制改成 Design Agent 专属状态。
- 保持行为不变,不删除旧 V2 会话代码。
- 验证:AGC typecheck、`git diff --check`
### 提交二:删除 App 旧 V2 会话控制流
- 删除仅服务旧策划的 Supervisor 产品入口、恢复、轮询和聊天提交分支。
- 删除旧 V2 session/GDD 状态和 helper。
- 删除项目打开、消息发送、问询回答、审批和旧流式事件分支。
- 将“做方案”只连接到当前 Design Agent hydrate/continue/decide 路径,将“做游戏/做素材”只连接到 DirectCodex。
- 保留 `planningStartMode` 作为入口路由字段,避免无关扩大重命名。
- 验证:AGC typecheck;必要时运行 App 启动相关定向 suite。
### 提交三:删除旧 TypeScript 适配层和类型
- 删除 `planningSessionV2.ts`
- 删除 `PlanGddDecisionAction``PlanGddStateViewV1` 及所有直接导入。
- 重新执行旧符号检索,确认没有残留调用方。
- 验证:AGC typecheck、`npm run check:encoding``git diff --check`
### 提交四:清理测试、事件契约和 CSS
- 精确删除 harness 中旧 V2/GDD 工厂、mock、调用记录和导出。
- 精确删除首页 suite 中旧 V2 IPC 断言。
- 删除旧 `planning-session-v2-stream` 事件测试。
- 删除 Plan GDD、GDD 审批卡和 planning lane 专属 CSS 及过时说明。
- 验证:appSurface 定向测试、事件订阅定向测试、AGC typecheck、编码和 diff 检查。
### 提交五:收口确定失效的身份残留和文档入口
- 只处理因 V1/V2 退役而确定失效的旧身份展示、测试 fixture、注释和文档索引。
- 不扫描或重构做游戏 DAG;共享代码只在其旧策划用途已确定死且删除能直接解决编译/测试问题时处理。
- 验证:旧策划符号定向检索、相关测试、编码和 diff 检查。
## 验证命令
1. `npm --prefix apps/ai-game-creator-shell run typecheck`
2. `npm run check:encoding`
3. `git diff --check`
4. `npm --prefix apps/ai-game-creator-shell exec vitest run tests/appSurface.test.ts`
5. 受影响 Rust 文件变化后运行 `cargo check --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml`
6. 完成全部提交后再次执行旧策划符号检索,并核对 `git status` 与提交边界
## 风险与回滚点
- 最大风险是新版 Design Agent 复用了旧变量名;必须先完成提交一,再删除旧 helper。
- `ProjectSupervisorView` 已经移除旧 GDD props,App 传参残留会在提交二中一并删除。
- 测试 harness 同时服务通用总控和 Design Agent,必须局部删除旧 mock,不能整段重写。
- 若某次提交导致 Design Agent 测试失败,只回滚该独立提交,不恢复旧 V2 兼容层。
## 完成后的临时文档处理
全部里程碑验收通过后,删除本里程碑和实施计划两份临时文档;把仍然有效的长期边界同步回现行 Design Agent 技术方案和项目记忆,不保留阶段性提交步骤。
@@ -0,0 +1,21 @@
# 关联里程碑
`【里程碑】退役策划V2 Rust Runtime清理-2026-09-14.md`
# 修改顺序
1.`runtime_protocol.rs` 移除 V2 模块声明与导出。
2.`main.rs` / `commands.rs` 移除 V2 command 注册和仅供 V2 的导入。
3. 删除 V2 Rust 模块及其专属单元测试;保留共享 GDD 模型或新版设计会话仍使用的类型。
4.`rg` 检查 V2 Rust 符号残留,修复编译引用。
# 验证命令
- `cargo check --manifest-path apps/ai-game-creator-shell/src-tauri/Cargo.toml`
- `npm run check:encoding`
- `git diff --check`
# 风险与回滚
- 风险:V2 类型可能被共享测试或前端桥接代码引用。处理方式是按编译错误逐项判断,保留真正共享类型。
- 回滚:按提交粒度回退本里程碑提交,不触碰前序 V1 清理提交。
@@ -0,0 +1,49 @@
# 【里程碑】退役策划 Agent V1/V2 解耦清理
| 字段 | 值 |
| --- | --- |
| Version | 1.0 |
| Status | proposed |
| Date | 2026-09-15 |
| Parent Spec | `docs/technical/【技术方案】策划Agent生产迁移与工作区浏览-2026-09-10.md` |
## 目标
移除旧版策划 Agent V1、V2 的前端会话、审批、数据适配、测试契约和确定失效的展示残留;仅在删除策划链路时遇到已退役 Supervisor 功能耦合时一并删除该耦合,使“做方案”只使用当前 Design Agent、做游戏只使用 DirectCodex。
## 范围
- 解除当前 Design Agent 与旧 `planningV2` / `PlanGdd` 状态命名和控制流的耦合。
- 删除仅服务旧策划的 Supervisor 产品入口、会话恢复、Runtime 轮询和聊天提交分支;保留通用 Supervisor 与做游戏 DAG。
- 删除旧 V2 会话 hydrate、start、continue、审批和用户问询分支。
- 删除旧 V2 TypeScript 会话适配层、旧 GDD 前端类型、测试 mock、旧事件契约和专属样式。
- 清理确定没有现役调用方的旧策划身份说明、测试 fixture 和文档当前入口。
- 保留当前 Design Agent 的会话、澄清、阶段审批、工作区浏览和 reasoning 展示行为。
## 不在范围内
- 不主动扫描、重构或整体删除做游戏 Agent 的 16 Agent DAG;只有策划删除直接造成编译或测试失败时才做最小修复。
- 不删除 DirectCodex 或当前 Design Agent;必要时保留被两者复用的中性聊天表现组件。
- 不为旧项目新增兼容层、迁移器、墓碑注释或退役行为测试。
- 不修改 SpacetimeDB schema、公开 API、持久化迁移和现役 Design Agent 协议。
## 依赖与前置条件
- PR #159 的合并提交 `3d8e0211` 代表旧 Fast GDD / 策划 V1 的引入。
- PR #305 的合并提交 `04128eb6` 同时包含 V1 大范围退役、策划 V2 会话链路和后续 Design Agent 迁移。
- 当前分支已经删除 Rust V1/V2 Runtime 模块和旧审批组件,但前端仍残留旧 V2 调用方;实现前须保持工作树干净。
## 验收标准
- [ ] “做方案”入口和已有 Design Agent 项目只调用当前 Design Agent IPC,不再调用旧 `planning_*_v2` IPC。
- [ ] 当前 Design Agent 的消息、reasoning、澄清、阶段审批和重试行为不依赖旧 V2 状态变量。
- [ ] 源码中不再存在旧 V2 TypeScript 会话适配层、旧 `PlanGdd` 类型和旧前端审批契约。
- [ ] 旧前端测试、事件测试和样式残留被删除或改为当前 Design Agent 契约。
- [ ] 不主动修改做游戏 Supervisor + 16 Agent DAG;因共享退役代码删除产生的编译错误得到最小修复。
- [ ] 前端 typecheck、相关定向测试、编码检查和 diff 检查通过;触及 Rust 时对应 cargo check 通过。
## 证据要求
- 自动化:`npm --prefix apps/ai-game-creator-shell run typecheck`、相关 appSurface 定向测试、`npm run check:encoding``git diff --check`
- 运行时:至少验证“做方案”新项目进入 Design Agent、已有 Design Agent 会话恢复、澄清/审批回合可继续。
- 边界:确认 DirectCodex 和做游戏既有入口未被旧策划清理改动;确认旧 V2 IPC 字符串和旧事件契约不再进入现役前端。
@@ -0,0 +1,38 @@
# Version
V2-RUST-RETIRE-1
# Status
in-progress
# Date
2026-09-14
# Parent Spec
`docs/technical/【技术方案】策划会话RuntimeV2接入与旧链路退役-2026-09-03.md`
# 目标
删除已经被独立 Design Agent 取代的旧策划 V2 Rust Runtime、Tauri 命令注册和仅服务 V2 的模块导出,使桌面壳继续编译并保留做游戏 Agent 与新版 Design Agent。
# 边界
- 删除 `planning_policy_v2``planning_session_v2` 及仅供这两者使用的 V2 注册和调用。
- 删除 V2 专属的 Tauri command 注册、模块导出和测试入口。
- 保留 `design_runtime``design_tools``design_session`、通用 runtime、DirectProject 和做游戏 Agent。
- 本里程碑不处理前端 V2 数据层、UI、文档索引和共享运行时中的可选清理。
# 验收标准
1. Rust 源码不再编译 `planning_policy_v2.rs``planning_session_v2.rs`
2. `main.rs``commands.rs` 和 runtime protocol 不再注册或导出 V2 命令。
3. 新版 Design Agent 与做游戏 Agent 的 Rust 编译路径保持可用。
4. 相关定向 Rust 测试和 `cargo check` 通过。
# 依赖
- 当前分支已包含 PR159 的 V1 清理。
- 前端 V2 调用暂时保留,待后续里程碑同步删除。
@@ -1,7 +1,8 @@
# 决策记录
> 用途:记录已经确认、会影响后续开发的长期技术/产品/协作决策。短期讨论不要写在这里。
> 当前口径:历史条目的旧路径、旧版本和已退役对象只用于追溯,不构成现行实现依据如与当前代码或 `docs/README.md` 冲突,以当前代码和最新专题文档为准。
> 当前口径2026-09-18:历史条目的旧路径、旧版本和已退役对象只用于追溯,不构成现行实现依据。策划 Agent V1/V2 的 Runtime、专用命令、审批卡、展示适配和旧测试已删除;当前策划入口统一使用 Design Agent。如与当前代码或 `docs/README.md` 冲突,以当前代码和最新专题文档为准。
## 2026-09-17 GameCreationApp 资源 kind 只保留一份词汇表:严格解析 + `app_log!` 留痕
- 背景:kind 曾经有三份实现——Rust 手写 `GAME_CREATION_APP_CANONICAL_ASSET_KINDS` + `canonical_game_creation_app_asset_kind()`(带 legacy 别名表与 `font → document` 特例)、TS 手写 `GAME_CREATION_APP_CANONICAL_ASSET_KINDS` + `GAME_CREATION_APP_LEGACY_ASSET_KINDS` + `canonicalGameCreationAppAssetKind()`、以及 ts-rs 生成的 TS union。两份手写表互相引用又各自收口,判据直接分叉(同一个 `"UI"` 一边归一成 `ui-design`、一边收口成 `unknown`),跨语言一致性只能靠正则解析源码的测试来钉。
@@ -223,7 +224,7 @@
- 决策:待实施的生产迁移以自由协作策划原型为行为基线,仅复用 Provider、恢复、文件操作、审计和 UI 通信;不继承旧 Planning V2 的强制工具、问询轮数、GDD 内容校验和版本审批。保留五阶段与顾问态、当前阶段资源注入和产物存在性检查,系统阶段空必需清单不增加解析或登记功能。
- 交互边界:正式审批由 ✅/❌ 决定;❌ 只取消待审批、不唤醒 Agent,等待审批时禁止发送消息但允许浏览工作区。用户可直接查看工作区,编辑可暂不做,不引入用户与 Agent 协同编辑锁或冲突合并。
- 影响范围:策划入口、会话与工具实现、资源打包、文件浏览;实施中。无旧 Planning V2 会话的策划项目走新设计 Agent,已有 V2 会话仍走原链路
- 影响范围:策划入口、会话与工具实现、资源打包、文件浏览;迁移已完成。当前入口统一使用新 Design Agent,旧 Planning V2 会话不再继续运行
- 关联文档:[策划 Agent 生产迁移与工作区浏览](../../technical/【技术方案】策划Agent生产迁移与工作区浏览-2026-09-10.md)。
## 记录格式
@@ -20,46 +20,48 @@
完整规则和模板见 [`docs/【协作规范】规范驱动开发工作流-2026-09-12.md`](../../【协作规范】规范驱动开发工作流-2026-09-12.md)。小型局部修改仍直接使用下方轻量流程;执行中若触及公开行为,立即升级到 SDD。
任务开始时先写清一句话交付结果、验收判据和不做项,再按“必须项 / 风险项 / 可选项”排序。先完成修改、定向验证和边界检查组成的最小闭环;设置时间盒和检查点,新增发现只有在影响交付判据时才扩大范围,否则记录为后续事项。不要让工具探测、历史整理或验证便利自行改变任务目标。
任务开始时先写清一句话交付结果、验收判据和修改范围,再按“必须项 / 风险项 / 可选项”排序。先完成修改、定向验证和边界检查组成的最小闭环;设置时间盒和检查点,新增发现只有在影响交付判据时才扩大范围,其余记录为后续事项。
## 开始前
- worktree 复用 `node_modules` 时,测试与构建的 workspace alias 必须指向当前工作树源码,不能经依赖软链接读取另一工作树的共享包。遇到仅 worktree 出现的 JSX 编译错误时先核对解析路径,不用给组件补全局变量来掩盖错误来源
- worktree 复用 `node_modules` 时,测试与构建的 workspace alias 必须指向当前工作树源码。遇到仅 worktree 出现的 JSX 编译错误时先核对解析路径,修复错误的依赖解析
- 运行 `git status --short`,保留用户已有的未提交修改;不要在共享工作树中使用破坏性 Git 命令。
- 复杂任务先读 `AGENTS.md``docs/【协作规范】Agent工作入口与执行准则-2026-06-22.md``docs/README.md` 和对应专题。
- 需要完整 SDD 的任务先确认主规范位置和验收证据,再创建 `docs/project-memory/plans/` 下的里程碑规范与实现计划;计划完成、取消或合并后删除。
- 后端事实以 `server-rs/crates/api-server/src/app.rs``server-rs/crates/api-server/src/modules.rs`、Cargo manifest、SpacetimeDB schema 和源码为准;现役 API 不从未挂载模块推导
- 后端事实以 `server-rs/crates/api-server/src/app.rs``server-rs/crates/api-server/src/modules.rs`、Cargo manifest、SpacetimeDB schema 和源码为准;现役 API 按实际挂载路由核对
- External v1 以 `docs/openapi/genarrative-external-v1.openapi.json``modules/external_api.rs` 为准。
- 本地端口的默认值只用于启动配置;实际运行端口以 `.app/dev-stack.json` 和启动日志为准。
- 任务涉及 SpacetimeDB schema 时,先读 `docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md` 与现有 schema 检查脚本,不依赖仓库中已不存在的旧表目录或基线文件
- 任务涉及 SpacetimeDB schema 时,先读 `docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md` 与现有 schema 检查脚本。
## 修改边界
- 后端路线固定为 `server-rs + Axum + SpacetimeDB`,访问 SpacetimeDB 统一经 `spacetime-client` facade。
- `module-*` 放领域规则,`spacetime-module` 放表和事务,`api-server` 放 HTTP/SSE/BFF`platform-*` 放外部副作用,`shared-contracts` 放 DTO 与公开契约。
- 前端不承接正式业务真相;页面状态必须来自后端投影、API 或持久化合同。
- 旧模板、旧公开作品、旧运行态、旧 Node/Express/PostgreSQL/Go/maincloud 路线和人工 `spacetime --root-dir` 命令不作为新实现目标
- 已退役对象没有现役 caller、公开契约、持久化迁移或活跃实例时,不添加兼容代码、兼容测试、墓碑注释或墓碑文档
- 修改中文文件优先局部补丁,保持 UTF-8;不把中文文案替换成英文
- 前端负责表现与交互;页面正式状态来自后端投影、API 或持久化合同。
- 本地 SpacetimeDB 数据隔离使用项目脚本或 `--data-dir`,发布目标显式传 `--server` / `--server-url`
- 已退役对象没有现役 caller、公开契约、持久化数据、活跃实例或迁移要求时,清理实现、专属测试和说明,权威文档保持当前状态;公开契约、持久化数据和正式迁移按实际需求保留最小兼容及对应测试
- 修改中文文件优先局部补丁,保持中文与 UTF-8。
## 文档维护
- 当前稳定合同进入 `docs/`;长期决策、通用流程、排障经验进入 `shared-memory/`
- 文档现行、历史、待复核、开放事项和活动计划的分类以 [`docs/【协作规范】文档生命周期与现状索引-2026-09-12.md`](../../【协作规范】文档生命周期与现状索引-2026-09-12.md) 为准;`historical``review` 文件开头保留状态头,不能直接作为实现依据。
- `plans/` 只保存正在执行且有明确下一门禁的计划;`todos/` 只保存真实开放且有关闭条件的事项。完成或作废后删除或融合。
- 不把分支名、一次性测试轮次、提交流水账和个人路径写成长期规则
- 长期规则记录可复用的当前合同与验证方法,执行历史由 Git 保存
- H5 HostBridge 真实调用链的临时替身词扫描必须覆盖生产调用链;宿主壳真实能力以现行 HostBridge 协议与代码为准。
## 验证路由
提示词外置变更运行 `runtime_prompt_bundle_build``prompt_source_boundaries` 两个 Rust 集成测试,验证编译期文本、目录登记和源码边界;现有 `agc-rust-shard-1` 本地/CI 入口先执行这组检查,再运行分片单测。
AGC 运行时配置默认值调整时,同步核对 Rust 默认值、分发配置模板、设置弹窗默认草稿和 `runtime-settings.suite.ts` 的恢复默认断言;显式传入旧值的配置读取用例仍验证原值保留,不批量替换测试数据。
AGC 测试构造单 HTML 项目时,必须在初始化之前写入 HTML,避免自动建立 npm 工程;npm 预览和导出测试应提供 dist 产物。已有图片生成 pending/operation 属于持久化恢复合同,修改工具默认参数后仍须验证旧动作恢复不重复提交、不因默认值变化被误判为新意图。
SpacetimeDB 任务统一先读取 `.codex/skills/genarrative-spacetimedb/SKILL.md`;该项目适配层按需调用已安装的官方 `spacetimedb` 插件 skill,插件提供通用 SDK/CLI/MCP 知识,项目 skill 负责 Genarrative 架构边界和验证门禁。
按改动范围选择定向门禁,不以无关全量扫描代替契约验证
按改动范围选择定向门禁:
| 范围 | 至少运行 |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
@@ -24,10 +24,10 @@
AI 游戏创作 / DirectProject / UI workflow
1. `docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md`
2. `docs/technical/【技术方案】策划会话RuntimeV2接入与旧链路退役-2026-09-03.md`
2. `docs/technical/【技术方案】策划会话RuntimeV2接入与旧链路退役-2026-09-03.md`(历史方案,仅供追溯)
3. `docs/technical/【技术方案】DirectProject客户端Skill与MCP扩展导入方案-2026-08-31.md`
4. `docs/prd/【AI游戏创作】项目开发工作台PRD-2026-07-20.md`
5. `docs/technical/【技术方案】立项策划AgentFast GDD-2026-08-10.md`仅存量旧链路
5. `docs/technical/【技术方案】立项策划AgentFast GDD-2026-08-10.md`历史 V1 方案,仅供追溯
2. `docs/technical/【技术方案】DirectProject Codex原始历史与异常恢复-2026-09-04.md`
3. `docs/technical/【技术方案】DirectProject客户端Skill与MCP扩展导入方案-2026-08-31.md`
4. `docs/prd/【AI游戏创作】项目开发工作台PRD-2026-07-20.md`
@@ -1,5 +1,10 @@
# 踩坑与排障记录
## Rust 同步回调的测试记录按线程隔离
- `shared-contracts` 的资源 kind reporter 是进程级回调。仅给注册和断言加锁,无法阻止其他并行 manifest 测试触发该回调,导致日志数量和内容断言偶发混入其他测试记录。
- kind 解析与回调在调用线程同步执行,测试收集器使用线程局部存储,各用例开始时清空本线程记录;生产 reporter 保持不变。保留完整记录断言,并用两个线程分别解析和核对记录,验证隔离;不要通过全局串行测试或放宽断言掩盖干扰。
## AGC 自动同步必须绑定真实项目生命周期
- 正式客户端在单窗口中用 React 状态打开/切换工程,窗口 URL 不代表当前工程。原生后台同步应读取由当前窗口显式登记的活动工程;首次打开、离开、切换、关窗及退出等待分别验证,不能只用携带 `projectPath` 的独立测试窗口证明正式入口可用。
@@ -16,7 +16,9 @@
## 开发中
- AGC 思考与执行入口共用共享单行摘要骨架;Markdown 只在展开正文走既有安全渲染,折叠预览只取纯文本,不在 summary 嵌套链接或按钮。耗时统一复用中文时分秒格式(不足一分钟一位小数,达到分钟后整数秒),格式化与各层计时边界分离。过程行在运行中和完成后的折叠层内保持同一紧凑间距;失败状态按明确终态与非零退出码呈现红色,不由自然语言输出猜测
- Agent 提示词正文与工具说明放在所属组件的 `prompts/`AGC 通过现有 Prompt Bundle 编译加载,服务端独立 crate 编译包含自己的提示词文件。代码负责变量填充、结构化 schema 与执行校验
- AGC 思考与执行入口共用共享单行摘要骨架;Markdown 在展开正文走既有安全渲染,折叠预览使用纯文本。耗时统一复用中文时分秒格式(不足一分钟一位小数,达到分钟后整数秒),格式化与各层计时边界分离。过程行在运行中和完成后的折叠层内保持同一紧凑间距;失败状态按明确终态与非零退出码呈现红色。
- Direct 对话计时区分条目展示时间与生命周期事件时间:整轮用用户发送到明确终态的跨度,工具用各自开始/完成边界;运行时用 100ms 叶子时钟刷新一位小数,终态冻结,旧历史缺边界不推测。不得用整秒时间的大小比较取代 Thread Manager 的事件顺序判定新回合。
@@ -26,18 +28,19 @@
- AGC 模板库灰度复用 `agc:template-library`:未配置关闭,已配置时遵循现有灰度启停、用户 ID/标签和比例规则;服务端返回权威结论,客户端入口和原生清单/下载/建项均执行门禁,主体切换丢弃旧异步结果。公开 OSS 不是保密边界,已创建项目不受影响。
- 画布卡片类型与信息角标共用 `CanvasCardCornerActions`;菜单收纳共用 `OverflowActions`,宿主决定展示数量和资源命令。AGC 选中菜单前 5 项直显,Web 默认不折叠;浮层 portal 继续接入现有画布关闭与滚轮归属判据。
- 修改范围保持聚焦;优先扩展现有系统、页面、组件、DTO 和脚本,不新建平行入口或业务真相
- UI 开发优先复用现有公共组件;跨页面或跨端重复的视觉/交互模式应沉淀到 `packages/shared`,由现有页面迁移使用,禁止在业务页复制同类 UI。共享组件只承载通用表现与交互,不下沉领域规则、后端副作用或正式业务状态
- AGC 当前 Agent 与策划 Agent 的消息层级共用 `packages/shared``AgentMessageContent`:正文使用 `body`,思考、中间输出与工具调用使用 `process`;宿主不按 Agent 类型重新定义过程字号和颜色,错误状态保留语义色
- 修改范围保持聚焦;优先扩展现有系统、页面、组件、DTO 和脚本。
- Agent 可见内容直接描述当前任务、输入和成功条件,细节按调用需要提供
- UI 开发优先复用现有公共组件;跨页面或跨端重复的视觉/交互模式应沉淀到 `packages/shared`,由现有页面迁移使用。共享组件承载通用表现与交互,领域规则、后端副作用和正式业务状态由后端负责
- AGC 当前 Agent 与策划 Agent 的消息层级共用 `packages/shared``AgentMessageContent`:正文使用 `body`,思考、中间输出与工具调用使用 `process`;过程字号和颜色由共享组件统一定义,错误状态保留语义色。
- 后端遵循 `module-*``spacetime-module``spacetime-client``api-server``platform-*``shared-contracts` 的现役边界。
- 前端只负责表现、交互和临时 UI 状态;正式状态来自后端投影、API 或持久化契约。
- 对已明确退役且无现役调用方、公开契约、持久化迁移或活跃实例的对象,不写兼容实现、维持旧行为的测试、墓碑注释或墓碑文档
- 对已明确退役且无现役调用方、公开契约、持久化数据、活跃实例或迁移要求的对象,直接清理实现、专属测试和说明,将权威文档更新为当前状态;历史由 Git 保存。公开契约、持久化数据和正式迁移按实际需求保留最小兼容及对应测试
- 修改 `/api/external/v1` 时,同批更新 `docs/openapi/genarrative-external-v1.openapi.json` 与契约测试。
- 修改 SpacetimeDB schema 时遵守字段追加/default 约束,同步 migration、表目录、生成绑定,并运行 schema 检查;删除、改名、重排或改类型前先确认迁移计划。
- 日志不递归输出完整配置、应用状态或 provider client;新增字段默认不进入安全摘要。
- HTTP 横切能力集中在 Axum/Tower 中间件:正常与降级路由复用追踪层;指标与 trace 使用 `MatchedPath` 模板及固定兜底,不把请求 ID、实际资源 ID 或 query 放入指标标签。在途请求通过 RAII guard 覆盖 Future 取消与 panic unwind;请求执行和响应体存活分别计量,不能把 handler 耗时当作 SSE 全生命周期。
- 业务依赖在组合根显式装配,Axum `FromRef` 只抽取可浅拷贝的窄能力。项目元数据与 External API 鉴权不持有完整 `AppState`,测试经相同接口注入替代依赖。集中鉴权仍保留方法级 fallback、公开入口、MCP 和 body limit 顺序;Provider span 跳过完整参数,不隐藏计费、重试、幂等或事务规则。
- 中文文案、注释和文档保持 UTF-8,优先局部补丁,不擅自翻译成英文
- 中文文案、注释和文档保持中文与 UTF-8,优先局部补丁。
## 文档生命周期
@@ -468,6 +468,8 @@ V1.11 的受保护仓库控制目录同时包含 `.git / .agent / .agents / .cod
Prompt 静态门禁必须断言上述 Bundle section 当前定义的权威语义与组合关系;身份文案调整后应同步更新旧断言,不得继续依赖已经退出 Bundle 的历史连续措辞,也不得在测试或 Provider builder 中复制一份平行 Prompt。
Agent 可见的系统指令、工具与参数说明、恢复指引和上下文模板统一由外置提示词文件维护。AGC 沿用 `prompts/runtime/manifest.json`:已有 composition/section 保持原有组合关系,独立调用的文本按职责登记在 `textCatalogs`,目录为 `prompts/runtime/texts/`,每份 JSON 是稳定文本键到正文的映射。构建期校验目录、文件、重复键和空正文,并生成可供 `format!` 使用的编译期文本宏;变量填充沿用 Rust 格式语法。Runtime 状态、用户内容、schema 类型与枚举、权限和校验继续由代码生成。服务端 Agent 的独立 crate 使用各自 `prompts/` 中的编译期文本文件。迁移以当前组装结果和工具 schema 等价为验收依据,源码门禁检查各提示词入口的内联正文与外置引用。
2026-07-12 起,通用开发能力的 Runtime V1.1 增量以 [`【技术方案】AI游戏创作Agent Runtime V1.1-2026-07-12.md`](<./【技术方案】AI游戏创作Agent Runtime V1.1-2026-07-12.md>) 为编码级事实源。它补充仓库启动上下文、同一发布二进制独立 Runner、受限本地预览浏览器验证、动态隔离子 Agent 和真实 Provider 全链路验收;本文件中“进程内 tokio task”“首轮不预加载项目内容”和“不创建动态执行实例”的旧口径由 V1.1 明确替代,未涉及能力继续沿用本文件。
同一文档的“V1.2 对标 Codex CLI 增量”继续作为受控命令与推理档位的事实源。对一次性 `command.exec` 而言,只接受 Runtime 白名单内的固定 `program` 和逐项 `args` argv,默认 `confirm`,可执行文件解析为项目外绝对路径且子进程只使用安全 PATH;不解析 shell 字符串,不提供管道、重定向、PTY 或后台进程。这里对 PTY 和后台进程的排除仅适用于 `command.exec`,不能用来否定 V1.10 的独立持久进程工具,也不能把 `command.exec` 自身改成长驻入口。`command.exec` 的 action、stdout / stderr、退出码、超时与源码指纹结果统一进入现有 `action / observation`、project revision、verification gate 和 `needs-reconciliation` 链路;只有明确验证型命令且退出码、源码指纹、命令日志、manifest 与 Agent DB 审计全通过才签发 passed gateGit / rg / cargo metadata / 普通 npm run 只作诊断。首版只请求终止受控进程组,安全等级与 `project.verify` 相同,不宣称已具备完整 OS sandbox 或 detached-process 隔离。
@@ -1371,12 +1373,12 @@ game-project/
## 2026-08-20 Direct Codex 审核 Skill Pack 与受控工具内核
- 普通项目对话由一个 project-bound Codex app-server thread 执行。客户端系统提示词只放最小工程合同、当前游戏源码有界快照、项目 prompts 和审核 Skill 索引;不再批量读取项目 `.codex/.agents` Skill 正文,也不恢复 Supervisor、专业 Agent 或 harness
- 首页恢复“做游戏 / 做素材 / 做方案”三个创作类型,默认“做游戏”。该选择与设置页的 Agent Runtime 模式无关;每次首页提交仍只自动创建一个新项目并进入项目工作台。用户正文原样进入项目对话,`game|art|doc` 作为受限结构化首轮上下文传给同一 Codex thread,不拼接“初始意图”文案、不产生首页对话、不切换 Provider 或恢复旧 Runtime 编排
- 普通项目对话由一个 project-bound Codex app-server thread 执行。客户端系统提示词包含最小工程合同、项目 prompts 和审核 Skill 索引;源码与 Skill 正文按任务需要读取。提示词、工具描述与 Skill 直接描述当前任务、输入和成功条件,细节按调用需要提供
- 首页提供“做游戏 / 做素材 / 做方案”三个创作类型,默认“做游戏”。每次首页提交自动创建一个新项目并进入项目工作台。用户正文原样进入项目对话,`game|art|doc` 作为受限结构化首轮上下文传给同一 Codex thread。
- `agc-skill-pack.v1` 只包含项目结构、陶泥儿美术、Web 游戏实现、真实浏览器试玩、客户端资源投影五项 Skill。清单记录用途、触发条件、所需工具、版本和内容 SHA-256;审核文本按 UTF-8 读取并将 CRLF 规范为 LF 后计算指纹和安装,避免混合换行造成 Windows / Linux 构建结果漂移,语义内容变化时必须同步重算对应清单指纹并提升版本。同步统一运行 `npm run agc:skill-pack:sync`,只读校验由 AGC `typecheck` 和 release build 自动执行,发现漂移时直接列出 Skill 与实际摘要,不让失配内容进入构建产物。客户端把审核文件安装到隔离目录后通过 app-server `skills/extraRoots/set + skills/list` 注册并复核,完整正文由 Codex 原生 Skill 机制按意图加载,一层引用只能经 `agc_read_skill_resource` 读取清单内 Markdown。引用路径按平台无关规则拒绝反斜杠、盘符、UNC、绝对路径和 `..`,不能依赖当前宿主的 `std::path` 语义判断其它平台路径。
- DirectProject 始终连接客户端内置的 `agc_tools` STDIO MCP2026-08-31 起还会在启动时接入客户端扩展仓库中用户已启用的独立第三方 STDIO/HTTP MCP 配置,但不读取用户全局 Codex MCP、不开启完整 Plugin Runtime。内置工具固定为审核引用读取、标准陶泥儿美术准备、已登记资源有界查询、视频 / 角色动画 / 音效 / BGM 的 create-or-derive 语义生成、已登记图片去背景、desktop/mobile 浏览器试玩和受控 `agc_web_search`。内置 MCP 进程只做协议;真实浏览器、付费 External v1 调用与受控搜索通过随机 loopback 地址回到客户端主进程,因此不复制 GUI 登录态、开发者 Key、项目路径、revision、operation 幂等键模型上下文。内置与用户启用的第三方 MCP 工具沿用 DirectProject 自动批准方式,但付费资源工具由客户端绑定稳定回合身份、限制单回合请求数、串行执行并优先恢复匹配账本;通用 shell、Codex 原生 webSearch、任意原生命令网络、多 Agent 和完整插件能力继续关闭`llm.webSearchEnabled` 控制 DirectProject 的 AGC 受控搜索工具暴露与执行Codex 原生 `web_search` 始终保持 disabledProvider、ToolHost、DirectHome 不纳入本次联网主链路
- 陶泥儿生成继续复用持久幂等账本、operation 恢复、来源/下载/PNG 解码和 manifest 登记;普通客户端优先使用当前 AGC 登录会话及账号路由,只有受控的 ExternalDeveloper 发布模式在客户端内部使用按服务器 origin 隔离的私有 Key。用户和模型都不需要提供或配置 API Key;凭据失效、来源不明或结果未知时失败关闭,不能自动换 Key 或重新扣费。
- 自定义 LLM API Key 路由在 DirectHome/DirectProject 经 loopback `/responses` 流式代理转发。代理不注入 Key,只要求请求自带 Bearer,并剥离开发网关错误携带的 `X-Codex-*` ChatGPT 账户额度头,防止隔离 app-server 把 API Provider 误判为余额 0;旧 ToolHost 保持原 Provider 行为
- DirectProject 连接客户端内置的 `agc_tools` STDIO MCP,并在启动时接入客户端扩展仓库中用户已启用的独立第三方 STDIO/HTTP MCP 配置。内置工具包括审核引用读取、图片生成、标准陶泥儿美术准备、已登记资源有界查询、视频 / 角色动画 / 音效 / BGM 的 create-or-derive 语义生成、已登记图片去背景、desktop/mobile 浏览器试玩和受控 `agc_web_search`。内置 MCP 进程负责协议;真实浏览器、付费平台调用与受控搜索通过随机 loopback 地址回到客户端主进程,GUI 登录态、开发者 Key、项目路径、revision、operation 幂等键由客户端持有并隔离于模型上下文。内置与用户启用的第三方 MCP 工具沿用 DirectProject 自动批准方式付费资源工具由客户端绑定稳定回合身份、串行执行并优先恢复匹配账本。`llm.webSearchEnabled` 控制 DirectProject 的 AGC 受控搜索工具暴露与执行。原生工具与审批权限以下方“DirectProject Codex 完整访问覆盖”为准
- 陶泥儿生成复用持久幂等账本、operation 恢复、来源/下载/PNG 解码和 manifest 登记;普通客户端使用当前 AGC 登录会话及账号路由,受控的 ExternalDeveloper 发布模式在客户端内部使用按服务器 origin 隔离的私有 Key。凭据失效、来源不明或结果未知时失败关闭,不能自动换 Key 或重新扣费。
- 自定义 LLM API Key 路由在 DirectHome/DirectProject 经 loopback `/responses` 流式代理转发。代理使用请求自带 Bearer,并剥离开发网关错误携带的 `X-Codex-*` ChatGPT 账户额度头,按实际 API Provider 响应判断请求结果
- 2026-08-12 计划拒绝恢复:结构化 `runtime.plan_update` 被 Runtime 拒绝后,下一轮 Provider 请求按请求级目录收窄到实际项目 mutation 与 `respond_to_user`(已进入协作编排的 Supervisor 保留 `agent.delegate / agent.run_status`),并明确禁止再次规划、读取、搜索或验证;后续已有真实 mutation observation 后解除临时目录,不改变持久 executable policy。
@@ -1437,13 +1439,13 @@ game-project/
## DirectProject 工具权限现行覆盖(2026-08-24)
本文早期关于“DirectProject 关闭通用 shell、原生网络和主动工具”的描述属于迁移前基线;2026-09-14 起,DirectProject 的 Codex sandbox 与审批规则下方“完整访问覆盖”取代。其余 ToolHost/DirectHome 合同不变。客户端审核的 `agc_tools` MCP 继续承担平台美术、资源登记、去背景、浏览器试玩和受控搜索,并保留项目锁、幂等账本、下载校验、恢复与投影权威。
DirectProject 的 Codex sandbox 与审批规则下方“完整访问覆盖”为准。客户端审核的 `agc_tools` MCP 承担平台美术、资源登记、去背景、浏览器试玩和受控搜索,并持有项目锁、幂等账本、下载校验、恢复与投影权威。
## DirectProject Codex 完整访问覆盖(2026-09-14
DirectProject 现明确采用 Codex app-server 的 `danger-full-access` sandboxthread 使用 `sandbox="danger-full-access"`turn 使用 `sandboxPolicy.type="dangerFullAccess"`,不再发送 `workspaceWrite``writableRoots` 或项目根文件批准白名单。DirectProject 收到 app-server 的文件变更、命令执行和权限请求时直接接受,Codex 原生能力不再按项目路径做二次白名单裁剪;用户选择的项目目录作为 cwd 和 AGC 业务身份根,用于连接池、审计与客户端受控 MCP 的项目绑定。
DirectProject 采用 Codex app-server 的 `danger-full-access` sandboxthread 使用 `sandbox="danger-full-access"`turn 使用 `sandboxPolicy.type="dangerFullAccess"`。DirectProject 收到 app-server 的文件变更、命令执行和权限请求时直接接受;用户选择的项目目录作为 cwd 和 AGC 业务身份根,用于连接池、审计与客户端受控 MCP 的项目绑定。
这项覆盖只改变 Codex 原生 app-server 的 sandbox 与审批边界:首页只读对话AGC `agc_tools` MCP 业务授权Provider 凭据隔离Runtime 审计与客户端 `agc_write_file` 的产品契约继续有效。系统提示词不再把 `.agent/``.git/`、项目外路径等描述为 Codex 原生能力禁区,但仍要求不要把 Token、Cookie、auth.json、`.env` 或 Runtime 私有控制面主动输出到对话、工具参数和日志。
首页只读对话执行;AGC `agc_tools` MCP 业务授权执行,Provider 凭据保持隔离Runtime 审计与客户端 `agc_write_file` 遵守各自产品契约。Token、Cookie、auth.json、`.env` 或 Runtime 私有控制面禁止主动输出到对话、工具参数和日志。
DirectProject 使用 `approvalPolicy=never`,避免每次原生调用再经过泛化 ToolHost 包装;原生命令网络随完整 sandbox 开放;联网资料仍可走受控 `agc_web_search`。多 Agent、Apps、完整插件 Runtime、hooks、Goals、Workspace Dependencies、Tool Suggestion 和原生浏览器/电脑控制仍关闭,避免绕过 AGC durable delegation、浏览器证据和副作用审计;图片生成通过客户端审核的 `agc_tools.agc_generate_image` 暴露普通单图、角色图、视觉规范图和 UI 设计图,完整游戏美术包继续使用 `agc_tools.taonier_prepare_game_art`,两者都复用同一客户端登录态、幂等账本、下载校验和 manifest/revision 投影,不开放 Codex 原生 image tool。app-server 使用隔离 `CODEX_HOME`:内置 `agc_tools` 由客户端启动参数注入,用户在客户端扩展列表启用的独立第三方 MCP 以原生配置写入该次隔离 home;全局 Codex MCP、禁用项、Plugin hooks/apps 和其它插件能力不进入 DirectProject。第三方项固定非 required,配置或启动失败只记录该项,不替换 `agc_tools`provider session token、工具桥地址和受控搜索标记不得通过第三方 MCP 的环境转发字段泄露。配置了 AGC LLM Key 或可解析的 `OPENAI_API_KEY` 登录态时,真实 provider 凭据只由 AGC 本地 provider proxy 持有,Codex 仅使用连接级随机代理令牌;无法安全代理的 OAuth `auth.json` 继续关闭 native shell/unified exec。`agc_tools` 的平台授权由 AGC 客户端当前登录会话和受控后端完成,普通客户端不得把 DirectProject 请求改成外部 API Key 请求;401/403 只投影为客户端登录或权限异常,不向用户索要凭据或暴露内部 URL。shell 子进程采用 `shell_environment_policy` core 继承及 secret/proxy/bridge 排除,provider key 和桥接凭据不得进入命令环境。系统提示词不再预注入项目源码快照或 Skill 正文,Codex 按需读取当前 cwd 文件。
## 2026-08-24 AGC UI 原型桥接与自主 UI workflow
@@ -1,7 +1,9 @@
# 策划 Agent 生产迁移与工作区浏览方案
更新时间:2026-09-10
状态:实施中
状态:已完成(2026-09-18
> 现状说明(2026-09-18):本文记录的迁移已完成,当前策划入口统一使用 Design Agent。旧 Planning V1/V2 会话、专用命令、审批卡和展示适配已删除;文中提到的 V2 文件仅代表迁移时的参考来源,不得作为现行实现、回退路径或测试迁移目标。
## 1. 目标
@@ -23,11 +25,11 @@
生产侧复用 Provider、会话恢复、文件读写、审计和 UI 通信等基建,不复用现有立项策划 Agent 的行为协议。
原型行为是新的策划 Agent 契约。现有 `Planning V2` 作为 Provider 调用、持久化和恢复实现的参考来源,不作为行为、提示词、产物审批契约。
原型行为是新的策划 Agent 契约。已退役的 `Planning V2` 作为迁移历史中的 Provider 调用、持久化和恢复参考来源,不作为行为、提示词、产物审批契约或回退路径
常驻提示词、阶段提示、速览卡结构说明、工具名称与参数、资源目录和注入映射以迁移时核对的原型文件为基线。迁移不顺便重写提示词,不增加模型输出内容门禁。旧需求文档中已明确舍弃的行为不恢复。
本方案描述生产迁移目标。当前已接入独立设计会话、自由工具循环、阶段审批命令和工作区浏览命令;生产入口对无旧 Planning V2 会话的策划项目切换到新设计 Agent,已有 V2 会话仍走原链路。旧 Planning V2 专用展示尚未清理
本方案描述已完成的生产迁移。当前入口使用独立设计会话、自由工具循环、阶段审批命令和工作区浏览命令;旧 Planning V2 会话不再继续运行,旧专用展示和命令已删除。历史项目按当前 Design Agent 入口重新开始,不做旧会话转换或旧测试迁移
## 3. 复用与丢弃清单
@@ -66,16 +68,17 @@
路径穿越、绝对路径、控制目录访问和凭据泄露防护属于安全边界,可以保留;它们不能扩展成限制正常策划创作的业务门禁。
现有参考入口如下。复用对象是其中的可用函数和通信机制,不是整个模块
当前实现入口如下
| 代码入口 | 参考内容与注意点 |
| 代码入口 | 职责与边界 |
| --- | --- |
| `apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_session_v2.rs` | Provider 配置、请求、重试、会话恢复;丢弃问询计数策略、强制工具和输出纠错协议 |
| `apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/file_ops.rs` | 读写、补丁和删除实现;不可原封不动继承 owner、产物和任务门禁 |
| `apps/ai-game-creator-shell/src-tauri/src/agent/design_runtime.rs` | Provider 请求、工具循环、重试、阶段审批与会话恢复 |
| `apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/design_session.rs` | 设计会话、阶段状态与待交互请求的持久化 |
| `apps/ai-game-creator-shell/src-tauri/src/agent/design_tools.rs` | 固定资源包、工作区文件读写、补丁、删除、搜索与路径安全边界 |
| `apps/ai-game-creator-shell/src-tauri/src/project/filesystem.rs` | 路径解析、文件列出和读取、基础写入;内部绝对路径字段不得传给模型 |
| `apps/ai-game-creator-shell/src/App.tsx` | Tauri 事件订阅、文件刷新、会话恢复入口;不把旧策划状态投影当作新契约 |
| `apps/ai-game-creator-shell/src/features/project-workspace/ProjectWorkspaceChatPane.tsx` | Game Agent 文件列表与读取入口;新的文件浏览应直接打开文件视图,不往聊天中追加文件正文 |
| `apps/ai-game-creator-shell/src/features/project-workspace/GddApprovalCard.tsx` | 仅参考现有面板和通用交互样式;不沿用结构化 GDD 展示及三按钮决定模型 |
| `apps/ai-game-creator-shell/src/App.tsx` | Design Agent IPC、事件订阅、文件刷新、会话恢复与输入提交 |
| `apps/ai-game-creator-shell/src/features/project-workspace/DesignWorkspacePanel.tsx` | 策划工作区文件浏览与正文展示,直接打开文件视图 |
| `apps/ai-game-creator-shell/src/features/project-workspace/DesignAgentSurface.tsx` | 消息、reasoning、澄清与阶段审批交互 |
不为此次迁移先建设通用 Agent 框架。已有函数能够直接使用就直接使用,只有确实需要拆除业务耦合时才做局部拆分。
@@ -239,6 +242,8 @@ UI 使用“批准”和“继续修改”两个文字按钮,分别配 Lucide
澄清卡提供独立的选项回答和自由文本回答。点击选项只提交请求身份和所选选项,不携带文本框草稿;Runtime 根据已保存的问题/选项形成明确的回答内容,不只传递“3”之类的序号。用户也可不选择任何选项,直接填写文本并点击“提交回答”,发送请求身份、`optionIndex: null` 和文本正文,Runtime 将其表述为“用户回答”,不将它当作某个选项的补充。新澄清请求出现时清空上一题的文本草稿。不沿用生产旧问题数量上限和固定问答字段。澄清卡待回答状态应可在重启后恢复。
用户向上滚动查看策划历史时暂停自动跟随;发送新的普通消息后恢复跟随最新消息和回复,仅编辑输入内容不改变历史阅读位置。
## 8. 用户工作区浏览
`design_artifacts` 同时是 Agent 工作区和用户查看策划资料的文件区。用户不需要通过聊天请求 Agent 才能看到文件。
@@ -307,7 +312,7 @@ UI 使用“批准”和“继续修改”两个文字按钮,分别配 Lucide
实现落在生产 Rust 会话/工具层与现有 React 策划入口,不随应用再启动 Python 原型进程。保持单一用户入口,不为迁移建设第二套工作台。
切换前盘点旧 Planning V2 活跃会话和持久化数据。旧结构化 GDD 不能直接推断为新五阶段中的某个阶段,不自动转换或覆盖已有项目。旧会话的继续运行或只读保留方式需在实际盘点后明确,再处理入口退役;这不要求新 Agent 兼容旧 GDD 行为。
迁移时不把旧 Planning V2 会话或结构化 GDD 转换为新五阶段状态。旧命令、旧展示和旧测试已删除;当前入口不读取旧 V2 authority,也不要求新 Agent 兼容旧 GDD 行为。
## 12. 验收标准
@@ -340,7 +345,7 @@ UI 使用“批准”和“继续修改”两个文字按钮,分别配 Lucide
- 外部搜索;
- 多个策划身份提示词同时存在;
- 多 Agent 协作;
- 旧 Fast GDD 展示和 GDD schema 兼容
- 不迁移旧 Fast GDD 展示、V2 schema 或旧测试;新 Design Agent 使用自己的会话和阶段产物测试
## 14. 开发调试入口
@@ -1,10 +1,10 @@
# 策划会话 Runtime V2 接入与旧链路退役方案
- 日期:2026-09-03
- 状态:P0 合同冻结、P1 内核、P2 产物闭环、P3 入口/UI 接入、P4 灰度回归验收与 P5 旧链路退役均已完成;本文是新生产实现的目标方案与阶段验收合同
- 适用范围:AGC 桌面 App 的“做方案”入口、策划会话、GDD 产物与审批
- 状态:**历史方案,已完成并退役**。Runtime V2 及其专用入口、命令、展示和测试已在 2026-09 按四不写原则删除;当前“做方案”统一使用独立 Design Agent。
- 适用范围:历史 AGC“做方案”入口、策划会话、GDD 产物与审批设计
> 本文规定新策划 Agent 的生产接入和旧链路退役方式。P3 开始修改正式 AGC 入口与工作台,但旧 `project-supervisor-plan` / `project-planning` 源码仍保留,直到 P5 完成退役;V2 切换时旧链路直接封存,所有未完成旧会话强制失败,旧 Fast GDD 文档之后只作为历史记录依据
> 本文只用于追溯 Runtime V2 的设计和退役过程,不是现行实现依据。不要恢复 `planning_session_v2`、`planning_policy_v2`、`hydrate_planning_session_v2` 或 V2 专用 UI;当前行为以 Design Agent 生产迁移方案和代码为准
## 1. 决策摘要
@@ -24,53 +24,51 @@
- `docs/`:当前 PRD、架构、开发运维、设计和测试口径。
- `docs/project-memory/shared-memory/`:长期团队记忆、决策、流程和踩坑摘要。
- `.codex/`Codex 工具资源,不作为项目知识库
- `.codex/`Codex 工具资源。
- `.codex/skills/`:Codex 可复用技能;只在任务命中时读取。
- `scripts/rag/`:Agent 本地检索入口,只提供候选上下文。
RAG 默认不安装运行时依赖,也不把 LanceDB、Transformers.js 或本地 embedding 模型写入根 `package.json`。需要启用时,先询问用户;用户确认后只安装到 gitignored 的 `.rag/runtime/`,模型缓存和向量库留在 `.rag/`
启用 RAG 运行时依赖前先询问用户;用户确认后只安装到 gitignored 的 `.rag/runtime/`,模型缓存和向量库留在 `.rag/`
## 执行风格
- 修改范围保持聚焦,不做无关重构
- 修改范围围绕交付结果与验收判据保持聚焦。
- Agent 可见内容直接描述当前任务、输入和成功条件,细节按调用需要提供。
- 跨模块、公开契约、SpacetimeDB schema、AGC/Runtime 和复杂 UI 状态链路按 [`docs/【协作规范】规范驱动开发工作流-2026-09-12.md`](./【协作规范】规范驱动开发工作流-2026-09-12.md) 执行主规范、里程碑、实现计划和逐里程碑验收;局部修复继续使用轻量流程。
- 优先复用现有系统、页面、组件、脚本、DTO 和文档位置。
- 不新增平行入口、平行作品架、平行公开列表、平行业务真相或临时兼容层
- 不把前端临时状态当正式业务事实;正式状态以后端投影、后端 API 或当前架构文档为准
- 涉及中文内容时保持中文,不擅自翻译成英文
- 发现中文乱码时先确认真实编码,不直接沿用乱码,也不用英文替换。
- 含中文文件优先局部补丁;非必要不要整文件重写。
- 正式状态以后端投影、后端 API 或当前架构文档为准
- 涉及中文内容时保持中文;发现乱码时先确认真实编码并恢复正确中文
- 含中文文件优先局部补丁
- 阶段性大任务完成后,整理当前上下文、剩余风险和下一步入口,降低后续接手噪音。
## 文档规则
- 工程修改必须同步更新对应 `docs/` 文档。
- 没有合适文档时,新文档放入 `docs/` 下合适位置,文件名使用 `【标签名】中文标题-日期.md`
- PRD 或技术方案要具体到能指导编码,不写会导致落地漂移的泛泛描述
- PRD 或技术方案要具体到能指导字段、契约、状态和验收的实现
- 长期有效的架构约定、接口变化、排障经验、开发流程或协作规则写入 `docs/project-memory/shared-memory/`
- 阶段性计划放入 `docs/project-memory/plans/`;确定但未实施的共享 TODO 放入 `docs/project-memory/todos/`
- 不提交个人配置、密钥、Token、Cookie、会话记录、认证文件、本地私密路径、构建产物、日志、缓存和数据库 dump。
## UI 与前端规则
- UI 面板保持清爽,不默认写功能说明、规则说明、键盘快捷键说明或开发解释文本
- UI 面板优先呈现任务内容与操作,说明按当前操作需要提供
- 移动端优先,同时保证桌面端体验完整。
- 弹出独立面板的交互使用弹窗、抽屉、popover 或页面级 portal,不在当前面板下面追加内容
- 页面展示以后端返回状态为准,不在前端自行计算结论型业务状态
- 现役平台入口固定为 `/creation``/project``/profile`:创作主页读取图片编辑器项目与公开编辑器素材,个人页复用账号、钱包和公共设置能力。`/api/creation-entry/config` 及模板工作台、公开作品和专属运行态已经退役,不得因历史表仍在而恢复前端入口或后端接口。
- 优先扩展现有公共组件,例如平台弹窗、图片输入、媒体预览、状态提示和动作按钮,不在业务页复制通用逻辑
- 弹出独立面板的交互使用弹窗、抽屉、popover 或页面级 portal。
- 页面展示以后端返回状态为准。
- 现役平台入口固定为 `/creation``/project``/profile`:创作主页读取图片编辑器项目与公开编辑器素材,个人页复用账号、钱包和公共设置能力。
- 优先扩展现有公共组件,例如平台弹窗、图片输入、媒体预览、状态提示和动作按钮。
## 后端与数据真相
- 后端路线固定为 `server-rs + Axum + SpacetimeDB`
-`server-node`、Express、PostgreSQL、Go 服务端、`maincloud` 相关脚本、环境变量、测试和文档要求均为历史残留。
- 领域规则沉到 `module-*`SpacetimeDB 表、reducer、procedure、事务 adapter 和 row mapper 留在 `spacetime-module`
- 后端访问 SpacetimeDB 统一经 `spacetime-client` facade。
- HTTP / SSE / BFF 和外部副作用编排留在 `api-server`;OSS、LLM、认证、语音等外部平台能力留在 `platform-*`
- 前后端 DTO、公开契约和跨页面复用的无业务真相 TypeScript 代码留在 `shared-contracts` / `packages/shared`;共享 UI 组件与纯工具留在 `packages/shared`领域规则、后端副作用和正式状态不得下沉
- 前后端 DTO、公开契约留在 `shared-contracts` / `packages/shared`;共享 UI 组件与纯工具留在 `packages/shared`,领域规则、后端副作用和正式状态由后端对应层负责
- 契约、路由、DTO 去留和 breaking change 以当前后端架构文档、`api-server/src/app.rs``shared-contracts``packages/shared` 为准。
后端修改后按当前 DDD 文档执行验收。涉及 API smoke 时,使用 `npm run dev:api-server` 重新拉起后端并检查 `/healthz`;不要使用旧 `maincloud` 启动口径
后端修改后按当前 DDD 文档执行验收。涉及 API smoke 时,使用 `npm run dev:api-server` 重新拉起后端并检查 `/healthz`
## SpacetimeDB 规则
@@ -106,7 +104,7 @@ RAG 默认不安装运行时依赖,也不把 LanceDB、Transformers.js 或本
## 默认验证
按修改范围选择验证,不追求无意义全量扫
按修改范围选择验证:
- 文档 / 中文文本:`npm run check:encoding``git diff --check`
- 前端:定向测试、`npm run typecheck`、必要的页面交互 smoke 和移动端视口检查
@@ -24,9 +24,9 @@
| 生成背景音乐 | `POST /api/editor/audios/background-music/generations` |
- 意图解析与工具编排在后端 api-server,前端只渲染状态,不承接业务规则。
- 下面的工具选择口径属于 Agent 规划 prompt / function-calling 约束,不是侧边栏 UI 说明文案;侧边栏面板不展示这些规则解释
- 工具选择规则写入 Agent 规划 prompt / function-calling;提示词与工具描述直接说明适用任务、输入、单次产出和成功条件,侧边栏展示对话内容与操作
- 用户要求“规范图 / 视觉规范图 / 风格规范图 / 素材规范展板”时,规划默认选择 `generate_image`,并在 prompt 中明确要求生成规范展板,包含统一视角、线条粗细、色卡、材质、阴影、圆角、状态层级、尺寸标注等可落地的视觉规范元素。
- 用户要求角色规范图”且语义是角色的规范展板、风格展板或设定板时,仍走 `generate_image`,不要误分流到 `generate_character`;只有实际生成角色立绘、角色主形象或角色视觉资产时才走 `generate_character`。用户要求多个图标素材、图集或 spritesheet 时才走 `generate_icon_spritesheet`
- 用户要求角色规范展板、风格展板或设定板时,选择 `generate_image`生成角色立绘、角色主形象或角色视觉资产时,选择 `generate_character`;生成多个图标素材、图集或 spritesheet 时,选择 `generate_icon_spritesheet`
- 画布 Agent 的 `generate-icon-spritesheet` 不暴露切分模式参数,链路固定显式传 `sliceMode=connected-components`;等分网格或固定槽位需求必须由外部 API 调用方显式传 `sliceMode=grid` 与来自需求的 `gridX`/`gridY`,画板工具栏的 `拆分图集` 仍只做连通域拆分。禁止在工具描述、确认卡或回复里承诺按 `2×2` 等网格切分。
- 所有生成必须走 `execute_billable_asset_operation_with_cost` 与模型定价配置,禁止绕过定价收口。
- function-calling 的 JSON Schema 必须与参数默认值和运行时校验保持一致,不能只在 description 中提示会被运行时拒绝的组合。`generate-ui-design` 固定 `gpt-image-2`,因此 `image_size` 只暴露 `1K / 2K`;其它可切换图片模型的工具通过共享条件 schema 在显式选择 `gpt-image-2` 时同样把 `image_size` 限制为 `1K / 2K`,省略模型时仍按默认 nanobanana2 允许 `0.5K``generate-video` 省略 `model` 时按默认 `seedance2.0-fast` 约束 `resolution``480p / 720p`,显式选择其它模型时仍使用其现有分辨率范围。运行时强类型校验继续作为最终防线。
@@ -112,13 +112,14 @@
- 每个用户回合必须由 LLM 返回结构化计划;单次 completion 不是有效 JSON 时,runner 先把无效原文作为 assistant message 追加到当前 staged turn,再追加 system 纠正消息,明确要求下一轮只按既定 JSON Response Format 重试;下一次 completion 必须同时看到该无效原文和纠正指令。无效原文只是重试上下文,不进入对外 `PromptOutput` 或用户可见的会话增量;后续规划成功时随 staged turn 一并提交,无工具活动且最终失败时按下文事务规则整体回滚。LLM 未配置、连接已经断开、请求明确失败、达到最终安全上限或多轮重试后仍不可解析时,后端写入正文为 `ERROR <错误内容>` 的 system 消息,不使用本地关键词或“收到:...”回显兜底。面向用户的规划错误使用中文语义,不暴露 `completion error` 等 framework 内部前缀或原始配置/定价诊断;原始错误只记录在后端日志。该错误消息与其它 system 消息一样进入后续 LLM memory,使 Agent 能看到上一轮失败上下文。普通 JSON POST 尚未结束只表示 provider request future 仍在等待,不能伪装成已持久化失败。
- 工具参数中的图片 ID 是由真实 object key 或图片地址计算的稳定 SHA-256 标识;真实 data key 仅存于 api-server 的工具上下文映射,所有图片工具在执行时查表恢复,不能把 object key 或图片地址作为 LLM 可见的工具 ID。
- 规划 prompt 必须显式区分“规范展板”和“实际素材产出”:规范图、视觉规范图、风格规范图、素材规范展板、角色规范图等规范展板请求走 `generate-image`,并补齐统一视角、线条粗细、色卡、材质、阴影、圆角、状态层级、尺寸标注等要求;实际角色立绘才走 `generate-character`,多个图标素材 / 图集才走 `generate-icon-spritesheet`
- 用户当前消息确实在确认或取消一条已存在且仍为 pending 的工具调用时,画布 Agent 引导使用卡片的确认 / 取消按钮,本条确认 / 取消意图不产生新 tool call。这条边界必须使用“匹配 pending 调用时如何处理”的正向、条件化描述,不得改写成“不得重新发起相同工具调用”一类全局否定话术:实测中模型会把这类否定句过度泛化为拒绝后续新请求。已 cancelled 的卡片不再处理;用户明确要求修改、重做或发起新任务时必须允许新 tool call,pending 卡片也不阻塞无关的新请求
- 用户通过当前消息确认或取消已有工具调用时,Agent 先读取历史状态:pending 调用引导使用对应卡片的确认 / 取消按钮cancelled 调用视为已结束。用户明确要求修改、重做或发起新任务时提交新 tool call。独立调用可并列存在,并在一次回答的 `tool_calls[]` 中尽量批量提交。图片 ID 从用户引用或历史工具结果的 system message 获取;上下文确实缺少对应图片时,请用户重新引用图片
- 画布 Agent 规划请求使用 Chat Completions 和 1024 生成 token 预算;VectorEngine 专用 client 发送 `max_completion_tokens`,预算包含可见输出与隐藏 reasoning token,不等于可见正文长度。发送后 120 秒是前端软提示阈值,不是 provider 失败 deadline:若普通 JSON POST 仍 pending,消息流临时显示“仍在处理中,请耐心等待”并继续等待,提示不写入 OSS 消息历史;连接或请求明确失败则立即按正式错误收口。provider 单 attempt 保留 8 分钟 hard timeout;请求发起阶段的 timeout、连接失败、`408``429``5xx` 读取 `GENARRATIVE_LLM_MAX_RETRIES`,但画布 Agent 最多重试 1 次,专用重试退避最多 60 秒。消息规划生命周期从 handler 入口开始计入 18 分钟总 deadline,进入 `agent.prompt(...)` 时使用扣除会话锁和上下文准备后的剩余预算;该 deadline 必须作为 runner 内部 deadline future 参与 completion await,并在每个 tool 开始前、返回后检查,不能用外层 `tokio::timeout` 丢弃整个 prompt future,也不能中途 drop 已开始的工具。工具一旦开始就等待其返回,再按 deadline 携带结果收口;当前八类画布工具只做同步参数校验并返回待确认,因此不会延长正式生成链。deadline 命中时仍按 `PromptRunError` 返回已经完成的工具结果、提交对应 staged memory 并追加终态错误。该 deadline 覆盖非法 JSON/工具校验失败触发的后续规划轮,并为错误持久化和 HTTP 返回保留约 2 分钟,不再让前端 20 分钟 transport timeout 先触发。已收到成功响应头后的响应体读取或解析失败直接按明确失败收口,错误计数/日志使用该响应所属的真实 attempt。规划重试发生在任何生成工具执行之前,不会重复提交生成任务或扣费;生成图片/编辑图片仍走对应生成工具和模型计费。
- function-calling runner 必须把“等待用户确认”作为显式工具语义:当本批所有工具都校验成功并进入待确认状态时,立即以成功结果结束当前规划回合并持久化助手文本与待确认卡,不得继续依赖 LLM 自行停止;未知工具、参数错误、普通连续工具和不可解析响应仍受 `max_turns` 保护。
- runner 失败必须返回显式的 `PromptRunError { error, partial_outputs }`,不得只返回终态错误而丢弃本轮已产生的文本或工具事实。prompt 执行使用 `AgentMemory::begin_staged` 创建行为等价且写入隔离的 `StagedAgentMemory` 事务,限长、摘要、脱敏等 append 规则必须在本轮 completion 前生效;成功或已发生工具活动时必须显式调用 `commit()`,直接 drop staged transaction 表示回滚,不得统一复制成 `VecMemory` 或仅替换 box 冒充持久化提交。本轮无工具活动失败时回滚 staged 用户消息、助手文本和不可解析响应;已有工具活动时在末尾追加 terminal error closure 后提交。外部 drop / abort 若尚无工具活动则回滚并保持原 committed memory;若工具已完成则提交结果与取消闭环,若工具仍在执行则提交“已启动、结果未知”事实与取消闭环,后续必须先 reconcile 再决定是否重试。
- `ToolFailure` 必须以结构化工具失败输出暴露给 harness 调用方:调用方能读取 `kind``retryable``fatal` 和工具返回的原始 `output`;不得把它们压成单一错误字符串。这些字段只提供流程决策与诊断事实,是否重试、如何展示或持久化仍由业务调用方决定。
- api-server 收到带 `partial_outputs` 的终态失败时,必须先按原顺序把其中已成功工具转成 `status=not_completed` 待确认消息并写入同一会话增量,再追加 `ERROR <错误内容>` 终态 system 消息;不得因后续轮次、其它工具或 `max_turns` 失败而吞掉已经执行并返回的工具结果。
- 通用 JSON function-calling 协议、工具 schema 注入、memory / hook、`max_turns` 和“全部工具待确认即结束回合”统一由现役 `platform-agent-harness` 承载;无工具时也必须输出同一 JSON 响应格式。画布角色 prompt、规范展板 / 已有图路由、模型与超时 profile、八类工具、计费、OSS 会话和 external job 编排继续留在 `platform-editor-agent` / `api-server`,不得回流已退役的旧 `platform-agent`
- 通用 JSON function-calling 协议、工具 schema 注入、memory / hook、`max_turns` 和“全部工具待确认即结束回合”统一由 `platform-agent-harness` 承载;纯文本回复使用相同 JSON 格式并设置 `tool_calls: []`,独立工具调用在同一批次提交并顺序执行。画布角色 prompt、规范展板 / 已有图路由、模型与超时 profile、八类工具、计费、OSS 会话和 external job 编排 `platform-editor-agent` / `api-server` 承载
- 画布角色提示词、共享路由规则、工具与参数说明维护在 `server-rs/crates/platform-editor-agent/prompts/`;通用 JSON function-calling 提示词、工具条目模板与纠正消息维护在 `server-rs/crates/platform-agent-harness/prompts/`。Rust 使用 `include_str!` 编译包含正文,负责变量填充、schema 结构和执行校验。
- **对话回合免费**(聊天、分析回复不扣泥点),仅 Agent 实际触发生成工具时按对应模型定价扣泥点。
- 工具调用前后端校验泥点余额;不足时该次生成失败并在对话中以明确错误气泡告知,对话本身可继续。