This commit is contained in:
2026-04-21 18:27:46 +08:00
parent 04bff9617d
commit 4372ab5be1
358 changed files with 30788 additions and 14737 deletions

View File

@@ -708,7 +708,7 @@ store 当前混合了:
3. 已新增 `rpgCreationAgentClient``rpgCreationWorkClient``rpgCreationLibraryClient``rpgCreationAssetClient``rpgCreationPreviewAdapter`
4. 已新增后端 `rpgCreationAgentRoutes``rpgWorldWorksRoutes``rpgWorldLibraryRoutes``rpgWorldGalleryRoutes` 命名骨架。
5. 已新增 `RpgAgentOrchestrator``RpgAgentSessionStore``RpgWorldPreviewCompiler``RpgWorldWorkSummaryService` façade。
6. 已新增 `rpgAgent*``rpgCreation*` 共享契约骨架。
6. 已新增 `rpgAgent*``rpgCreation*` 共享契约骨架,并补齐此前遗漏的 `rpgAgentDraft.ts` 与 shared 根导出
本轮刻意未做:
@@ -738,6 +738,25 @@ store 当前混合了:
最好在工作包 A 的目录骨架准备好后开始。
### 当前进展(`2026-04-21`
工作包 B 已完成以下落地:
1. 已把 `PreGameSelectionFlow.tsx` 降级为兼容入口,旧路径继续导出 `PreGameSelectionFlow``PreGameSelectionFlowProps``SelectionStage`
2. 已把 RPG 创作平台壳层的真实实现迁入 `src/components/game-shell/rpg-creation-flow/RpgCreationShellImpl.tsx`并把该文件收口成“hooks 组合 + stage 视图装配 + 视觉级 loading/error”的壳层。
3. `RpgCreationShell.tsx` 已直接桥接 `RpgCreationShellImpl.tsx`,新目录开始承接真实入口。
4. 已新增 `rpgCreationFlowTypes.ts``rpgCreationFlowShared.ts`,把壳层类型与共享 helper 从旧入口文件中收出独立落点。
5. 已接入 `useRpgCreationPlatformBootstrap.ts``useRpgCreationSessionController.ts``useRpgCreationAgentOperationPolling.ts``useRpgCreationDetailNavigation.ts``useRpgCreationResultAutosave.ts``useRpgCreationEnterWorld.ts`
6. 平台侧 works / library / gallery / history / save / dashboard 拉取、session 恢复、message streaming、action 执行、operation 轮询、detail navigation、结果页自动保存、enter-world 同步已不再直接堆在壳层组件中。
7. 已完成 `PreGameSelectionFlow.agent.interaction.test.tsx` 的 14 个交互场景回归,以及壳层相关定向 eslint、编码检查。
本轮刻意未做:
1. 还没有物理删除 `PreGameSelectionFlow.tsx` 与其他旧兼容 façade当前仍保留桥接层以避免影响并行工作包。
2. 还没有让所有调用方统一显式改走 `RpgCreationShell` 新入口,当前允许旧路径兼容收口到新实现。
3. 还没有把结果页 preview 数据源从前端兼容 adapter 切到服务端正式 preview contract这部分仍属于后续工作包 G / H 与 Phase 3 范围。
4. 还没有清理所有 legacy 兼容导出,本轮优先完成平台壳层编排拆分与主链稳定验证。
## 9.3 工作包 C前端结果页与编辑器拆分
### 目标
@@ -761,6 +780,24 @@ store 当前混合了:
依赖工作包 A 的命名规范与目录落点,和工作包 B 并行。
### 当前进展(`2026-04-21`
工作包 C 已完成以下拆分落地:
1. 已把 `CustomWorldResultView.tsx``CustomWorldEntityEditorModal.tsx``CustomWorldRoleAssetStudioModal.tsx` 的真实实现迁入 `src/components/rpg-creation-result/``src/components/rpg-creation-editor/``src/components/rpg-creation-asset-studio/`
2. 已把旧文件降级为兼容入口,现有调用仍可继续从旧路径导入,不影响当前主链行为。
3. 结果页已拆出 `RpgCreationResultHeader``RpgCreationResultActionBar``RpgCreationAssetDebugPanel``useRpgCreationResultActions`,结果页主组件开始退化为组合壳层。
4. 编辑器已补 `rpgCreationResultFormMapper.ts`,并把 `RpgCreationEntityEditorModalImpl.tsx` 收口成目标分发壳层;`world / cover / camp / playable / story / landmark` 已有稳定 section 入口。
5. 编辑器当前保留 `RpgCreationEntityEditorShared.tsx` 作为阶段性 shared 实现承载体,避免在同一轮里高风险物理拆散 180KB 级表单细节;后续可在不改壳层接口的前提下继续向各 section 文件迁移。
6. 角色资产工坊已补 `roleAssetStudioModel.ts``roleAssetStudioPublishClient.ts``useRoleVisualCandidateWorkflow.ts``useRoleAnimationWorkflow.ts`,并进一步拆出 `RpgCreationRoleVisualSection.tsx``RpgCreationRoleAnimationSection.tsx``RpgCreationRoleAssetStudioFooter.tsx`,当前主模态已退化为组合壳层。
7.`CustomWorldResultView.tsx``CustomWorldEntityEditorModal.tsx``CustomWorldRoleAssetStudioModal.tsx` 兼容入口已统一桥接到 RPG 创作域 façade而不是继续直连内部 `Impl` 文件。
本轮刻意未做:
1. 还没有把 `RpgCreationEntityEditorShared.tsx` 内部的全部表单实现物理拆成独立文件,当前先以“壳层 + section 入口 + shared 实现”完成工作包 C 收口。
2. 还没有改平台壳层 `PreGameSelectionFlow.tsx` 的任何主状态编排,仍严格遵守工作包 C 的写入边界。
3. 还没有把结果页从 legacy preview 兼容数据源切到服务端正式 preview contract这部分属于后续工作包 D / G / H 的协作范围。
## 9.4 工作包 D前端 custom world client 收口
### 目标
@@ -784,6 +821,24 @@ store 当前混合了:
依赖工作包 A 的命名和目录约束;可与 B、C 并行。
### 当前进展(`2026-04-21`
工作包 D 第一轮已完成以下落地:
1. 已新增 `src/services/rpg-creation/rpgCreationRuntimeClient.ts``src/services/rpg-creation/rpgCreationRequestHelpers.ts`,把 RPG 创作域的 runtime 请求重试策略、POST JSON 与 SSE 请求辅助能力收口到新目录。
2. `rpgCreationAgentClient.ts``rpgCreationWorkClient.ts``rpgCreationLibraryClient.ts``rpgCreationAssetClient.ts``rpgCreationGenerationClient.ts` 已从 façade 透传升级为真实请求实现,不再继续把主链请求代码堆在 `aiService.ts``storageService.ts` 中。
3. `generateCustomWorldProfile()` 已正式迁入 `rpgCreationGenerationClient.ts`,世界生成入口也已纳入 RPG 创作域 client 边界。
4. `aiService.ts` 中已迁出的 Agent / works / 世界生成 / 结果页实体生成接口已退化为兼容导出;`storageService.ts` 中 works / library / gallery / publish 链路也已退化为兼容导出。
5. `PreGameSelectionFlow.tsx` 已开始直接从 `src/services/rpg-creation/` 消费 Agent / works / library / gallery / publish 请求,不再从旧 service 入口拿主链接口。
6. `RpgCreationEntityEditorShared.tsx` 已把场景图生成请求切到 `rpgCreationAssetClient`,结果页与编辑器相关测试也已改为优先 mock 新的 RPG 创作域 client。
7. 已完成 `rpgCreationGenerationClient.test.ts``storageService.test.ts``CustomWorldEntityEditorModal.test.tsx``CustomWorldResultView.test.tsx``PreGameSelectionFlow.agent.interaction.test.tsx` 的定向回归,以及编码检查。
本轮刻意未做:
1. 还没有物理删除 `aiService.ts``storageService.ts` 中的旧命名兼容导出,本轮优先保证调用迁移可平稳过渡。
2. 还没有改平台壳层的内部流程编排与 hook 结构,这部分仍属于工作包 B。
3. 还没有把结果页从 legacy preview 兼容数据源切到服务端正式 preview contract这部分仍属于后续工作包 G / H 的协作范围。
## 9.5 工作包 E后端 Agent 编排拆分
### 目标
@@ -809,6 +864,58 @@ store 当前混合了:
建议在工作包 A 后开始;可与 B、C、D 并行。
### 当前进展(`2026-04-21`
工作包 E 当前已完成 3 轮落地,真实状态如下:
1. `customWorldAgentOrchestrator.ts` 已退化为后端应用服务 façade只保留 session/message/action 主入口、operation 创建和下游服务委托消息轮转、action 分发与派生状态重建已从热点文件中拆出。
2. `CustomWorldAgentActionRegistry` 已正式接管 action 可用性校验、payload normalize、operation type 映射与 `supportedActions` 主链接线;前端不再需要按 action 字面量猜测按钮是否可点。
3. `customWorldAgentActionExecutors/` 已补齐并接管以下真实执行链:
- `draft_foundation`
- `update_draft_card`
- `sync_result_profile`
- `generate_characters`
- `generate_landmarks`
- `generate_role_assets`
- `sync_role_assets`
- `generate_scene_assets`
- `sync_scene_assets`
- `expand_long_tail`
- `publish_world`
- `revert_checkpoint`
4. `CustomWorldAgentMessageTurnService``CustomWorldAgentSnapshotBuilder``CustomWorldAgentResultSyncService``CustomWorldAgentQualityGateService``CustomWorldAgentSuggestedActionService` 已形成稳定协作边界:
- message turn 负责会话轮转
- snapshot builder 负责派生状态重建
- result sync service 负责结果页回写
- quality gate service 负责 `qualityFindings`
- suggested action service 负责建议动作
5. 发布链已经统一切到 `CustomWorldAgentPublishingService`
- orchestrator、executor map、publish executor、server 注入口径已经一致
- 发布 readiness 与正式写库走同一服务
- 作者展示名优先走 `resolveAuthorDisplayName`,同时保留 `userRepository` 兼容兜底
- 发布产物 `profileId` 固定优先沿用 legacy 结果页 ID否则回退为 `agent-draft-${sessionId}`
6. `sync_scene_assets` 已形成完整闭环:
- 营地/地点正式场景图会写回 draft profile
- 对应 `sceneChapters[].acts``backgroundImageSrc / backgroundAssetId` 会同步刷新
- `rebuildRoleAssetCoverage()` 已补 camp/landmark 正式场景资产 fallback 汇总,确保 snapshot 重建、works 读模型与 checkpoint 回放都能保住场景资产覆盖状态
7. checkpoint 已收口为“可恢复真快照”:
- `buildCheckpointSnapshot()` 已接入关键 executor
- `revert_checkpoint` 现在依赖真实 checkpoint snapshot 与 `restoreCheckpoint()` 主链完成回滚,不再是只开放入口的空动作
8. `CustomWorldAgentActionRegistry` 已重新收口阶段策略:
- `sync_result_profile``generate_scene_assets``sync_scene_assets` 等精修动作仅允许 `object_refining / visual_refining`
- `expand_long_tail``publish_world``revert_checkpoint` 单独允许 `long_tail_review / ready_to_publish`
9. 已完成以下验证:
- `npm --prefix server-node run build`
- `npm --prefix server-node run test -- customWorldAgentPhase3.test.ts customWorldAgentActionRegistry.test.ts customWorldAgentPhase5.test.ts`
当前 `server-node` 定向回归共 `208` 项通过,已覆盖工作包 E 第三轮的发布链、场景资产、长尾扩展与 checkpoint 回滚主链。
本轮刻意未做:
1. 还没有进入 Phase 4 的“进入世界统一走发布态 gate”收口当前只完成 `publish_world` 本身的后端闭环。
2. 还没有改 `customWorldAgentSessionStore.ts` 与 repository 边界,这部分仍属于工作包 F。
3. 还没有让前端结果页正式消费服务端 `resultPreview` 主链字段,这部分仍需要与工作包 G / H 协作。
4.`customWorldAgentPublishGateService.ts``customWorldAgentPublishService.ts` 仍作为历史兼容文件保留,尚未进入物理删除阶段。
## 9.6 工作包 F后端 session/store/repository 拆分
### 目标
@@ -832,6 +939,24 @@ store 当前混合了:
与工作包 E 有接口协作关系,但可以并行推进,最终通过 façade 汇合。
### 当前进展(`2026-04-21`
工作包 F 已完成以下拆分落地:
1. 已新增 `server-node/src/services/rpg-agent-session-store/`,把 session record、compatibility、factory、repository adapter 从 `customWorldAgentSessionStore.ts` 中物理拆出。
2. `customWorldAgentSessionStore.ts` 已退化为兼容 façade保留原类名、原方法签名并正式改为依赖 `RpgAgentSessionRepositoryPort`
3. 已新增 `server-node/src/repositories/RpgAgentSessionRepository.ts``server-node/src/repositories/RpgWorldProfileRepository.ts``server-node/src/repositories/rpgWorldRepositoryShared.ts`
4. `runtimeRepository.ts` 中的 custom world session/profile/gallery 读写已改成委托新仓储runtime 大仓储开始向“通用 runtime façade”收口。
5. 已新增 `server-node/src/services/RpgWorldWorkCoverResolver.ts``server-node/src/services/RpgWorldWorkSummaryAssembler.ts``server-node/src/services/RpgWorldWorkSummaryService.ts`,把 works 读模型的封面解析、条目组装与服务入口从 `customWorldWorkSummaryService.ts` 中拆出。
6. `context.ts``server.ts``runtimeRoutes.ts``syncCustomWorldSavedProfileAssets.ts` 已切到直接注入和使用 `RpgAgentSessionRepository``RpgWorldProfileRepository``RpgWorldWorkSummaryService`
7. `customWorldAgentPhase2~5``customWorldWorkSummaryService.integration.test.ts` 已切到新的 session/profile 内存仓储端口,定向回归 21 项全部通过。
本轮刻意未做:
1. `RuntimeRepositoryPort` 仍保留兼容 façade 与 custom world 相关旧方法,现阶段先稳住 story/runtime 其他调用方。
2. `RuntimeRepository` 中的 runtime 快照同步编排还没有继续下沉,当前先完成 custom world 持久化与 works 读模型边界拆分。
3. `customWorldAgentSessionStore.ts``customWorldWorkSummaryService.ts` 等旧命名 façade 仍保留,等待后续统一命名和兼容层清理阶段再删除。
## 9.7 工作包 G后端 preview compiler 与 runtime profile 目录化
### 目标
@@ -855,6 +980,33 @@ store 当前混合了:
与工作包 E、F 并行,但在主链接入前需要先和 E 对齐 preview contract。
### 当前进展(`2026-04-21`
工作包 G 已完成以下落地:
1. 已新增 `server-node/src/modules/custom-world/runtime-profile/` 目录入口,并把原 `runtimeProfile.ts` 退化为兼容 façade。
2. 已把 runtime profile 进一步物理拆分到:
- `normalizeShared.ts`
- `normalizeRole.ts`
- `normalizeLandmark.ts`
- `normalizeSceneChapter.ts`
- `normalizeCamp.ts`
- `buildCompiledProfile.ts`
- `buildAttributeSchema.ts`
- `creatorIntentBridge.ts`
3. `runtimeProfileCompiler.ts` 已退化为兼容 façade不再承载主实现。
4. `RpgWorldPreviewCompiler.ts` 已从简单别名升级为服务端 preview compiler 入口,新增 preview envelope 输出能力。
5. `packages/shared/src/contracts/rpgCreationPreview.ts` 已补 `RpgCreationPreviewSource`,并在 Phase 5 后把 session 结果页正式 source 收口为 `session_preview`
6. `customWorldAgentFoundationDraftService.ts` 的 LLM foundation draft 主生成链已改成“直接组装 draft 主字段 + 单独保留 `legacyResultProfile` 兼容快照”,不再通过 preview compiler 反解草稿主字段。
7. 已新增 `server-node/src/services/RpgWorldPreviewCompiler.test.ts``server-node/src/services/customWorldAgentFoundationDraftService.test.ts`,并完成编码检查与工作包 G 定向回归验证。
本轮刻意未做:
1. 还没有把 preview contract 从当前 runtime-profile 兼容载体升级成独立 view model。
2. 还没有让 orchestrator、route、前端结果页正式消费 preview envelope。
3. `legacyResultProfile` 仍作为结果页兼容快照保留,相关消费链还没有完全脱离 legacy profile 富字段。
4. 兼容 façade `runtimeProfile.ts` / `runtimeProfileCompiler.ts` 仍保留,等待后续阶段统一清理。
## 9.8 工作包 H共享契约与测试基建
### 目标
@@ -878,6 +1030,34 @@ store 当前混合了:
可从工作包 A 开始先建骨架,随后跟随 B 到 G 持续补齐。
### 当前进展(`2026-04-21`
工作包 H 已完成以下落地:
1. 已把 `rpgAgentAnchors.ts``rpgAgentDraft.ts``rpgAgentActions.ts``rpgAgentSession.ts``rpgCreationPreview.ts``rpgCreationWorkSummary.ts` 从类型别名骨架推进为真实共享契约定义。
2. 已把旧 `packages/shared/src/contracts/customWorldAgent.ts` 降级为兼容聚合出口,并补齐:
- `customWorldAgentAnchors.ts`
- `customWorldAgentDraft.ts`
- `customWorldAgentActions.ts`
- `customWorldAgentSession.ts`
- `customWorldResultPreview.ts`
- `customWorldWorkSummary.ts`
让旧命名导入可以按分域文件渐进迁移,而不是继续依赖单一大文件。
3. 已新增 `packages/shared/src/contracts/rpgCreationFixtures.ts`补齐八锚点、foundation draft、session、preview、published profile、library、works 等共享样本,并把 fixture 接入 `packages/shared/src/index.ts` 统一导出。
4. 已把 shared contract tests 接入 `vitest.config.ts`,并补齐 `packages/shared/src/contracts/rpgContracts.test.ts`,覆盖 session snapshot、preview envelope、published profile、works summary以及旧命名兼容分文件的类型消费。
5. 已新增 `server-node/src/services/RpgWorldPreviewCompiler.fixture.test.ts``server-node/src/services/RpgWorldWorkSummaryAssembler.fixture.test.ts``server-node/src/services/customWorldWorkSummaryService.integration.test.ts`,把 preview compiler、works assembler、works service 对共享 fixture 的消费纳入 unit / integration / regression 回归。
6. 已补 `server-node/src/services/RpgWorldWorkSummaryService.ts` 兼容实现,确保 works 兼容入口与当前 `rpgWorldProfiles + customWorldAgentSessions` 读模型服务口径一致。
7. `customWorldAgentOrchestrator.ts` 已新增统一 session snapshot 装配入口,当前普通拉取与 SSE message stream 返回的 session 字段口径开始收口。
8. 服务端 `RpgWorldPreviewCompiler` 输出已正式接入 session snapshot 的 `resultPreview` 字段,并复用当前 `qualityFindings` 生成 preview `qualityFindings / blockers` 兼容输出。
9. `rpg-agent-session-store/rpgAgentSessionCompatibility.test.ts` 已覆盖“compatibility 脱离 store 直接单测”的主链能力Phase 2 的 session 兼容层开始具备独立回归保障。
10. `src/app.test.ts` 已补“custom world agent stream message returns enriched session payload over sse”回归session snapshot / resultPreview / supportedActions 的 HTTP 与 SSE 响应口径开始统一验证。
本轮刻意未做:
1. 还没有批量迁移仓库里所有旧 `customWorldAgent.ts` 导入到 `rpgAgent* / rpgCreation*`
2. 还没有批量把前端结果页与自动保存链统一切到服务端 `resultPreview`
3. 还没有把服务端 preview contract 从 legacy profile 兼容载体升级成独立 view model。
## 9.9 并行推进关系
推荐并行顺序如下:
@@ -986,6 +1166,23 @@ store 当前混合了:
2. 自动保存与 session 同步都基于服务端确认后的 preview
3. 结果页字段回退问题不再依赖前端兼容修补
### 当前进展(`2026-04-21`
Phase 3 本轮已完成以下主链接线:
1. 前端 `rpgCreationPreviewAdapter.ts` 已正式改成“优先读取 `session.resultPreview`,本地 `draftProfile -> legacy result profile` 只做 fallback”的薄适配层。
2. `useRpgCreationSessionController.ts``useRpgCreationResultAutosave.ts``useRpgEntryLibraryDetail.ts` 所在的 Agent 结果页打开链、自动保存链、继续创作恢复链,已统一通过 `buildPreviewFromSession()` 消费服务端 preview。
3. `RpgEntryFlowShellImpl.tsx` 当前传给结果页自动保存与创作入口恢复的 `buildDraftResultProfile` 已切到服务端 preview 主链,不再把前端本地编译结果当成正式真相源。
4. 前端 fallback 编译实现已迁入 `src/services/rpg-creation/rpgCreationPreviewDraftFallback.ts`,旧 `src/services/customWorldAgentDraftResult.ts` 已退化为兼容 re-export不再继续承载主实现。
5. 已新增 `src/services/rpg-creation/rpgCreationPreviewAdapter.test.ts`,补齐“服务端 `resultPreview` 优先于本地 draft fallback”的回归断言。
6. `PreGameSelectionFlow.agent.interaction.test.tsx` 已补充“没有 `legacyResultProfile` 也能凭服务端 preview 打开 Agent 结果页”的交互回归,验证结果页主链已切到后端 preview。
本轮刻意未做:
1. `src/services/customWorldAgentDraftResult.ts` 仍保留,但当前已退化为兼容 re-export真实 fallback 编译实现已迁到 `src/services/rpg-creation/rpgCreationPreviewDraftFallback.ts`,尚未物理删除该兼容入口。
2. `legacyResultProfile` 仍保留在 session draft 中参与兼容输出,本轮没有越界清理后端兼容字段。
3. 结果页 UI 还没有显式消费 `qualityFindings / blockers / preview source` 做额外展示,当前先完成主数据源迁移,不扩大 UI 变更面。
## Phase 4发布链、自动保存链、进入世界链统一
### 目标
@@ -1004,6 +1201,50 @@ store 当前混合了:
2. works、library、enter world 三处状态语义一致
3. 发布失败可以给出明确 blocker 与恢复入口
### 当前进展(`2026-04-21`
Phase 4 本轮已完成以下主链接线:
1. 服务端 `customWorldAgentPublishingService.ts` 已补结构化 `evaluatePublishReadiness()`,把 publish blocker 从“只在发布时报错”提升为可供 session preview、结果页和 works 读模型统一消费的后端真相。
2. `customWorldAgentOrchestrator.ts` 当前输出的 `session.resultPreview` 已补:
- `publishReady`
- `canEnterWorld`
- 基于发布门槛而不是仅 `qualityFindings` 生成的 `blockers`
让结果页可以直接消费正式 gate 语义。
3. `RpgWorldWorkSummaryAssembler.ts` 已把 works 读模型进一步收口:
- 已进入 `published` 阶段的 Agent session 不再继续以草稿项出现在 works 创作中心
- draft works 新增 `blockerCount / publishReady`
- published works 明确输出 `canEnterWorld=true`
4. 前端 Agent 结果页已开始消费服务端 Phase4 状态:
- 结果页在 Agent 草稿未发布时把主 CTA 改成“发布并进入世界”
- 结果页会展示服务端 preview source、publish blockers、warning 数量
- 有 blocker 时会禁用“发布并进入世界”按钮,不再让前端继续假装可以直接进入世界
5. `useRpgCreationEnterWorld.ts``RpgEntryFlowShellImpl.tsx` 已把 Agent 结果页进入世界主链改成:
-`sync_result_profile`
- 再执行后端 `publish_world`
- 发布成功后才进入世界
不再允许 Agent 草稿结果页绕开 publish gate 直接起游戏。
6. `RpgEntryWorldDetailView.tsx` 已把作品详情页草稿态的主按钮改成“请先发布作品”,避免 detail 页继续暗示未发布作品可以直接开始游戏。
7. 已补回归测试覆盖:
- 服务端 `customWorldAgentPhase4.test.ts`
- 服务端 `customWorldAgentPhase5.test.ts`
- 服务端 `RpgWorldWorkSummaryAssembler.fixture.test.ts`
- 前端 `CustomWorldResultView.test.tsx`
- 前端 `PreGameSelectionFlow.agent.interaction.test.tsx`
8. 作品库 detail 页的“发布到广场”入口已统一复用 Agent Phase4 publish gate
- `/api/runtime/custom-world-library/:profileId/publish` 在命中 `agent-draft-${sessionId}` 且 session 真实存在时,不再直接绕过 gate 调 `publishOwnProfile()`
- 现在会先复用 `CustomWorldAgentPublishingService` 的 blocker 判断
- publish 成功后同步把对应 session 推进到 `published`
- detail 页、works、gallery 三处发布态语义已对齐到同一条后端主链
9. 已补 HTTP 级回归测试覆盖 detail publish 主链:
- 服务端 `app.test.ts` 已新增“agent-backed detail publish 在 blocker 存在时返回明确错误”
- 服务端 `app.test.ts` 已新增“agent-backed detail publish 成功后同步发布 profile 与 session”
本轮刻意未做:
1. 旧兼容作品草稿的 detail publish 还没有强行套入 Agent publish gate当前只在 `agent-draft-${sessionId}` 且 session 真实存在时切换到统一发布链,避免在未补齐兼容映射前误伤历史作品。
2. 运行态真正的“进入世界解析”仍然是前端把 profile 交给 runtime session bootstrap本轮先完成 Agent 创作主链的 publish gate 收口与 UI 阻断,不扩大到 runtime 启动协议改造。
## Phase 5兼容层清理
### 目标
@@ -1022,6 +1263,27 @@ store 当前混合了:
2. 不再存在“前端本地编译 profile 才能自动保存”的依赖
3. 文档、契约、测试口径一致
### 当前进展(`2026-04-21`
Phase 5 本轮已完成以下主链清理:
1. 服务端已新增 `server-node/src/services/rpgCreationPreviewProfileBuilder.ts`把“foundation draft + legacyResultProfile 富字段 + 最新草稿资产”的合并规则正式收回后端preview 与 publish 开始复用同一套兼容编译口径。
2. `customWorldAgentOrchestrator.ts` 当前产出的 `session.resultPreview` 已不再依赖前端本地 fallback
- 预览 profile 改为基于服务端 `rpgCreationPreviewProfileBuilder` 构建
- preview source 已从兼容期的 `legacy_custom_world_profile` 收口为正式主链值 `session_preview`
3. 前端 `rpgCreationPreviewAdapter.ts` 已改成只消费服务端 `session.resultPreview`,结果页、继续创作、自动保存、发布后进入世界所复用的 `buildPreviewFromSession()` 不再承担本地 `draftProfile -> result profile` 编译职责。
4. 结果页与编辑器目录内部的旧 façade 依赖已继续收口,当前 RPG 创作目录内部不再通过已删除旧文件反向跳转结果页/编辑器/资产工坊主链。
5. 前后端测试口径已同步切到 Phase 5
- 前端 `rpgCreationPreviewAdapter.test.ts``PreGameSelectionFlow.agent.interaction.test.tsx` 已统一改为消费 `session_preview`
- 服务端 `RpgWorldPreviewCompiler.test.ts` 已新增“preview builder 保留 legacy 富字段并合并最新草稿资产”的回归
- 服务端 `customWorldAgentPhase3.test.ts``customWorldAgentPhase4.test.ts``app.test.ts` 已把 preview source 断言更新为 `session_preview`
本轮刻意未做:
1. 后端 `legacyResultProfile` 兼容字段仍保留在 foundation draft / result sync / publishing service 中,当前只是把“如何消费它”统一后移到服务端 preview / publish compiler而不是继续让前端主链本地重编译。
2. 旧命名 façade 如 `customWorldAgentSessionStore.ts``customWorldWorkSummaryService.ts``runtimeProfile.ts` 仍保留,因它们还在后端兼容与模块边界层承担真实职责,不属于本轮必须删除项。
3. shared contracts 中旧 `customWorld*` 分域兼容导出仍保留,当前只收口真实定义与 preview source 语义,不越界做全仓库导入迁移。
---
## 11. 本次执行约束
@@ -1047,3 +1309,193 @@ store 当前混合了:
**session 真相源 -> 服务端 preview 编译 -> published profile 发布态**
只有这样,当前链路的可读性、可扩展性和后续功能落地稳定性,才会一起提升。
---
## 13. 2026-04-21 执行核查与老流程清理记录
本节用于记录本次按执行方案做的真实完成度核查、测试结果与老流程删除情况,避免“文档宣称已完成”和“代码真实状态”继续漂移。
### 13.1 本轮核查口径
本轮围绕以下 3 件事执行:
1. 对照工作包 A / B / D / E / F / G / H 进度文档,核对真实代码入口与引用关系。
2. 运行创作链相关与全量测试,确认当前主链真实可用范围。
3. 只删除已经确认不再承载业务逻辑的旧流程桥接入口,不提前删除仍承担兼容编译责任的模块。
### 13.2 核查结论
当前可以确认:
1. 工作包 B、D、E、F、G、H 的首轮主体拆分已经真实落地且对应的新目录、hooks、client、service、repository、compiler 文件已存在。
2. 工作包 C 的结果页、编辑器、资产工坊拆分也已基本落地到 `rpg-creation-result/``rpg-creation-editor/``rpg-creation-asset-studio/` 新目录。
3. Phase 3、Phase 4、Phase 5 的主链接线与兼容层清理现已完成;当前剩余的是后端兼容字段与旧命名 façade 的保留问题,不能再把它们等同于“前端主链仍依赖老流程”。
### 13.3 本轮已物理删除的老流程入口
本轮已确认以下旧入口仅剩桥接职责,且完成引用迁移后可以安全物理删除:
1. `src/components/game-shell/PreGameSelectionFlow.tsx`
2. `src/components/CustomWorldResultView.tsx`
3. `src/components/CustomWorldEntityEditorModal.tsx`
同步完成的调用迁移包括:
1. `GameShellMainContent.tsx` 已改为直接 lazy import `rpg-creation-flow` 新入口。
2. `useGameShellViewModel.ts` 已改为直接从 `rpg-creation-flow``SelectionStage`
3. 结果页、编辑器与对应测试已切到 `rpg-creation-result/``rpg-creation-editor/` 新入口。
4. `RpgCreationShellImpl.tsx` 已改为直接 lazy import `RpgCreationResultView` 新入口,不再回退到已删除旧结果页文件。
### 13.4 本轮明确不能删除的兼容层
以下模块本轮核查后确认仍在主链中承担真实兼容职责,暂时不能物理删除:
1. `src/services/rpg-creation/rpgCreationPreviewAdapter.ts`
2. `server-node/src/services/customWorldAgentSessionStore.ts`
3. `server-node/src/services/customWorldWorkSummaryService.ts`
4. `server-node/src/services/customWorldAgentOrchestrator.ts`
5. `server-node/src/modules/custom-world/runtimeProfile.ts`
原因分别是:
1. `rpgCreationPreviewAdapter.ts` 仍是前端消费服务端 preview 的统一 façade只是已经不再承担本地 fallback 编译。
2. 后端仍通过 `legacyResultProfile` 参与阶段性结果回写与兼容输出。
3. 多个旧命名 façade 仍被 server、context、tests 或 UI 入口直接引用。
### 13.5 本轮测试结果
已执行并确认结果如下:
1. `npm run check:encoding`
结果:通过。
2. `npm --prefix server-node run test`
结果:通过,`192` 项测试全部通过。
3. `npm --prefix server-node run build`
结果:通过。
4. `npm --prefix server-node run test -- --test-name-pattern="action registry|phase5 publish_world|phase5 generate_scene_assets|phase5 publish_world blocks incomplete|phase5 revert_checkpoint|phase5 expand_long_tail"`
结果:通过,`208` 项测试全部通过,已覆盖工作包 E 第三轮发布链、场景资产、长尾扩展与 checkpoint 回滚主链。
5. `npm run test -- src/components/game-shell/PreGameSelectionFlow.agent.interaction.test.tsx src/components/CustomWorldResultView.test.tsx src/components/CustomWorldEntityEditorModal.test.tsx`
结果:通过,`34` 项测试全部通过。
6. `npm run test`
结果:失败,但失败点与本轮删除旧入口无直接关系;创作链相关定向回归已通过。
7. `npm run build`
结果Vite 构建成功,但 build gate 因 chunk warning 失败,属于既有构建门禁问题。
8. `npm run typecheck`
结果:失败,存在 shared contracts、story contracts、runtime data、旧测试断言等既有类型问题当前不适合作为本轮创作链清理通过口径。
9. `npm --prefix server-node test -- src/services/customWorldAgentPhase3.test.ts src/services/customWorldAgentPhase4.test.ts src/services/customWorldAgentActionRegistry.test.ts src/services/RpgWorldPreviewCompiler.test.ts`
结果:本轮新增的 `resultPreview` / `supportedActions` 主链断言已通过,但定向命令仍被一个既有 `customWorldAgentFoundationDraftService.test.ts` 断言失败带停,失败点与本轮 session snapshot 装配改动无直接耦合。
10. `npm --prefix server-node run build`
结果:通过。
11. `npm run test -- src/services/rpg-creation/rpgCreationPreviewAdapter.test.ts src/components/game-shell/PreGameSelectionFlow.agent.interaction.test.tsx`
结果:通过,`17` 项测试全部通过。
12. `node --test --import tsx src/services/customWorldAgentActionRegistry.test.ts`
结果:通过,`5` 项测试全部通过。
13. `node --test --import tsx src/services/customWorldAgentPhase5.test.ts`
结果:通过,`7` 项测试全部通过,已覆盖 `publish_world``generate_scene_assets``sync_scene_assets``expand_long_tail``revert_checkpoint` 的 Phase 5 主链回归。
14. `node --test --import tsx src/services/rpg-agent-session-store/rpgAgentSessionCompatibility.test.ts`
结果:通过,`2` 项测试全部通过。
15. `node --test --import tsx src/app.test.ts`
结果:通过,`55` 项测试全部通过,包含 SSE enriched session 回归。
15. `node --test --import tsx src/services/customWorldAgentPhase3.test.ts src/services/customWorldAgentPhase4.test.ts`
结果:通过,`11` 项测试全部通过。
16. `npm --prefix server-node run build`
结果:通过。
17. `npm run check:encoding`
结果:通过,`1877` 个文件编码检查通过。
18. `npm run test -- src/services/rpg-creation/rpgCreationPreviewAdapter.test.ts src/components/game-shell/PreGameSelectionFlow.agent.interaction.test.tsx`
结果:通过,`20` 项测试全部通过;已验证前端结果页主链不再依赖本地 preview fallback。
19. `node --test --test-concurrency=1 --import tsx src/services/customWorldAgentActionRegistry.test.ts src/services/customWorldAgentPhase3.test.ts src/services/customWorldAgentPhase5.test.ts`
结果:通过,`16` 项测试全部通过;已验证 action registry 契约清理、Phase3 preview source 口径与 Phase5 发布链回归均正常。
### 13.6 当前全量阻塞项
截至 `2026-04-21` 本轮核查结束时,仓库仍存在以下全量阻塞:
1. `server-node/src/app.test.ts` 存在未解决合并冲突。
2. `src/hooks/story/npcEncounterActions.test.ts` 存在未解决合并冲突。
3. 前端全量 Vitest 仍有 3 个失败用例:
- `src/components/game-shell/useGameShellRuntimeViewModel.test.ts`
- `src/data/functionCatalog/functionCatalog.test.ts`
- `src/hooks/story/npcEncounterActions.test.ts`
4. 前端全量 TypeScript 检查仍有多处既有错误。
5. 前端 build gate 仍被大 chunk warning 阻断。
### 13.7 完成度判断
按执行方案分阶段判断,当前更准确的状态是:
1. Phase 1主体完成并已开始物理清理前端旧入口。
2. Phase 2后端拆分主体完成`snapshot / supportedActions / resultPreview / SSE enriched session / session compatibility` 主链都已有定向回归覆盖;但旧命名 façade 兼容层仍保留,且发布链统一语义尚未进入 Phase 4 收口态。
3. Phase 3主链接线已完成前端结果页、自动保存与创作恢复入口已切到服务端 `resultPreview`;但本地 preview fallback 与 `legacyResultProfile` 兼容层仍保留,尚未进入 Phase 5 清理态。
4. Phase 4部分完成`publish_world` 已有真实 executor 与 gate 接线,但 publish gate / enter world / works 状态语义还没有完全统一到后端正式发布态。
4. Phase 4主链完成。Agent 结果页、works 聚合、detail publish 与进入世界阻断已统一到后端正式发布态;当前剩余仅是 runtime 启动协议与旧兼容草稿映射,不再属于本阶段必须项。
5. Phase 5主链完成。前端本地 preview 编译桥、结果页旧入口影子引用、执行型废弃 action 契约已清理完成;当前剩余仅是后端 `legacyResultProfile` 兼容字段与旧命名 façade 保留,不再阻塞本阶段验收。
### 13.8 后续删除顺序建议
后续继续删除老流程代码时,应严格按下面顺序推进:
1. 先完成 `qualityFindings / blockers / preview source` 的结果页与 gate 消费,把 Phase 4 所需阻断语义真正接到 UI 与进入世界链。
2. 再按后端兼容迁移节奏收缩 `legacyResultProfile` 写回范围,而不是恢复前端本地 preview 编译桥。
3. 再删除 `customWorldAgentSessionStore.ts``customWorldWorkSummaryService.ts``runtimeProfile.ts` 等旧命名 façade。
4. 最后清理 `customWorld*` 旧契约聚合入口与剩余测试旧导入。
### 13.9 Phase 4 本轮追加落地(`2026-04-21`
本轮围绕 Phase 4 继续补齐了“发布链、自动保存链、进入世界链统一”的剩余断点:
1. 服务端 `CustomWorldAgentPublishingService` 已新增统一的 publish gate 摘要出口,`resultPreview` 与 works 聚合现在复用同一套 `blockers / publishReady / canEnterWorld` 判断,不再各自重复拼门禁语义。
2. `RpgWorldWorkSummaryAssembler` 已改为跳过 `stage === published` 的 session 草稿项,避免作品中心在正式发布后同时出现“已发布 profile + 已发布 session 草稿”双份状态。
3. works 草稿项的 `publishReady / blockerCount` 已从“只看 qualityFindings”切到真实 publish gate 结果,作品中心、结果页与发布执行器开始共享同一套阻断口径。
4. 前端 Agent 结果页继续沿用服务端 `resultPreview`,并在“发布并进入世界”成功后优先消费发布后的 preview/profile而不是直接把 preview 原始对象强转成运行时 profile。
5. 已补 `RpgWorldWorkSummaryAssembler.fixture.test.ts``customWorldWorkSummaryService.integration.test.ts``PreGameSelectionFlow.agent.interaction.test.tsx` 回归,覆盖 works 去重、publish gate 口径一致,以及“先发布再进入世界”主链。
6. 共享 fixture 已补齐 `generatedSceneAssetId / publishReady / blockerCount / canEnterWorld` 等 Phase 4 口径字段,默认基线样本现在能够真实通过服务端 publish gate避免 works / preview / 测试断言继续使用“前端自定义假 ready”状态。
7. 前端“发布并进入世界”交互回归已改为状态驱动 mock结果页打开前保持 `ready_to_publish`,仅在 `publish_world` 完成后切换为 `published`,从而覆盖 Phase 4 真实的“草稿结果页 -> 发布 -> 进入世界”顺序,而不是直接伪造已发布初始态。
本轮仍未完成:
1. Agent 工作区内还没有独立的“发布世界”快捷入口,当前主入口仍在结果页。
2. 旧兼容作品草稿的 detail publish 仍保留旧作品库接口,不属于本次 Agent Phase 4 主链统一范围。
### 13.10 老脚本依赖删除追加记录(`2026-04-21`
本轮按“不要再与老脚本有依赖”的口径继续执行物理清理,完成以下事项:
1. 前端 RPG 创作主链已切到 `Rpg*` client 命名:
- `src/components/rpg-entry/useRpgCreationSessionController.ts` 直接调用 `createRpgCreationSession / getRpgCreationSession / streamRpgCreationMessage / executeRpgCreationAction`
- `src/components/rpg-entry/useRpgCreationResultAutosave.ts` 直接调用 `executeRpgCreationAction / getRpgCreationOperation / upsertRpgWorldProfile`
2. `src/services/rpg-creation/` 已删除旧命名导出:
- 不再导出 `createCustomWorldAgentSession / executeCustomWorldAgentAction / getCustomWorldAgentSession`
- 不再导出 `listCustomWorldWorks / upsertCustomWorldProfile / listCustomWorldLibrary`
- 不再导出结果页实体生成的 `generateCustomWorldPlayableNpc / generateCustomWorldSceneImage` 等兼容别名
3. 旧 service 聚合入口已断开:
- `src/services/aiService.ts` 不再 re-export RPG 创作链能力
- `src/services/storageService.ts` 已删除,运行时存档、设置、作品入口能力已迁入 `rpg-entry / rpg-runtime` 域 client
4. 旧组件入口继续物理删除:
- `src/components/CustomWorldRoleAssetStudioModal.tsx`
- `src/components/CustomWorldResultView.tsx`
- `src/components/CustomWorldEntityEditorModal.tsx`
- `src/components/game-shell/PreGameSelectionFlow.tsx`
5. 新组件入口已删除旧命名导出:
- `RpgCreationResultView.tsx` 只导出 `RpgCreationResultView`
- `RpgCreationEntityEditorModal.tsx` 只导出 `RpgCreationEntityEditorModal / RpgCreationEditorTarget`
- `RpgCreationRoleAssetStudioModal.tsx` 只导出 `RpgCreationRoleAssetStudioModal`
6. 已使用源码级扫描确认 `src / packages / server-node` 中不再存在以下旧主链符号引用:
- `createCustomWorldAgentSession`
- `executeCustomWorldAgentAction`
- `getCustomWorldAgentSession`
- `streamCustomWorldAgentMessage`
- `listCustomWorldWorks`
- `upsertCustomWorldProfile`
- `CustomWorldRoleAssetStudioModal`
- `CustomWorldResultView`
- `CustomWorldEntityEditorModal`
7. 本轮未删除 `CustomWorldProfile` 等历史数据结构类型名,也未删除 `server-node` 侧仍承担真实兼容职责的旧命名 façade这些属于后端兼容字段与契约命名迁移不再是前端老脚本依赖。
8. 本轮验证结果:
- `npm run test -- src/services/rpg-creation/rpgCreationPreviewAdapter.test.ts src/components/CustomWorldResultView.test.tsx src/components/CustomWorldEntityEditorModal.test.tsx src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx`
结果:通过,`42` 项测试全部通过。
- `npm run test -- src/services/rpg-creation/rpgCreationGenerationClient.test.ts`
结果:通过,`2` 项测试全部通过。
- `npm run check:encoding`
结果:通过,`1929` 个文件编码检查通过。