# RPG 创作结果页编辑功能迁移审计 日期:`2026-04-24` ## 本次发现 `generate_characters` / `generate_landmarks` 后端已经迁到 Rust,但前端 Agent 结果页看不到入口,原因不是后端能力缺失,而是: 1. `RpgCreationResultViewImpl` 在 `compactAgentResultMode=true` 时隐藏 `createActionLabel / onCreateAction`。 2. `PlatformEntryFlowShellImpl` 对 Agent 草稿结果页传入了 `compactAgentResultMode={isAgentDraftResultView}`。 3. 结果页原有“新增可扮演角色 / 新增场景角色 / 新增场景”仍走 legacy `rpgCreationAssetClient`,只改前端内存态,不会触发 Agent action。 ## 本次前端修复 已改为: 补充修复:`RpgCreationResultViewImpl` 已补齐 `previewSourceLabel` props 解构,避免 Agent 结果页在渲染数据源提示时触发 `ReferenceError`。 ```text Agent 结果页点击新增场景角色 / 新增场景 -> RpgCreationResultView.onGenerateEntity -> autosaveCoordinator.executeAgentActionAndWait -> POST /api/runtime/custom-world/agent/sessions/:sessionId/actions -> generate_characters / generate_landmarks -> 等 operation completed -> 拉最新 session -> rpgCreationPreviewAdapter.buildPreviewFromSession -> 刷新结果页 profile ``` 说明:当前可扮演角色 tab 的“新增可扮演角色”会调用 `generate_characters` 并传入 `roleType=playable`,Rust 会写入 `draftProfile.playableNpcs`;场景角色则写入 `draftProfile.storyNpcs`。 ## 已迁移 / 可见 1. 删除作品:已有 Rust + SpacetimeDB 软删除链路。 2. 新增可扮演角色:结果页可见,调用 Rust `generate_characters(roleType=playable)` 并写入 `playableNpcs`。 3. 新增场景角色:结果页可见,调用 Rust `generate_characters(roleType=story)` 并写入 `storyNpcs`。 4. 新增场景 / 地点:结果页可见,调用 Rust `generate_landmarks` 并写入 `landmarks`。 5. 批量删除场景角色:结果页可见,调用 Rust `delete_characters`,同步删除 profile 与 draft card。 6. 批量删除场景:结果页可见,调用 Rust `delete_landmarks`,同步删除 profile、连接与 draft card。 7. 角色资产准备:结果页角色卡可见“生成资产”,调用 Rust `generate_role_assets`,进入 `visual_refining` 并聚焦角色。 8. 场景资产准备:结果页场景卡可见“生成场景图”,调用 Rust `generate_scene_assets`,进入 `visual_refining` 并聚焦场景。 9. 角色资产同步:Rust `sync_role_assets` 会把 `portraitPath / generatedVisualAssetId / generatedAnimationSetId / animationMap` 写入 profile、draft card、asset coverage、preview、checkpoint、operation 与 message。 10. 场景资产同步:Rust `sync_scene_assets` 会把 `imageSrc / generatedSceneAssetId / prompt / model` 写入 camp 或 landmark,并同步 `sceneChapters.acts`、draft card、asset coverage、preview、checkpoint、operation 与 message。 11. Agent 结果页发布进入世界:已有 `publish_world` + publish gate 链路。 12. 手动编辑结果页 profile:目前仍通过 `sync_result_profile` 自动保存回 Agent session。 ## 尚未完整迁移的结果页编辑功能 1. 单个角色 / 场景的细粒度编辑:前端 modal 仍编辑本地 profile,再靠 `sync_result_profile` 同步;SpacetimeDB 虽有 `update_draft_card`,但结果页表单尚未按 card section action 化。 2. 长尾补全:`expand_long_tail` 本轮明确排除,Rust 侧仍是 placeholder。 3. 回滚 checkpoint:Rust 有 `revert_checkpoint`,但结果页没有清晰可见入口。 ## 下一步建议 1. 为 `generate_characters` 增加 `roleType: playable|story` 契约,并让可扮演角色 tab 真正落到 `playableNpcs`。 2. 将删除角色 / 删除场景改为独立 action,避免继续依赖整份 profile 同步。 3. 将角色 / 场景编辑 modal 的保存改为 `update_draft_card` 或更细粒度 reducer,而不是每次整份 profile 覆盖。 4. 继续迁移 `generate_role_assets / generate_scene_assets / expand_long_tail`,并在结果页显示对应入口。