Files
Genarrative/docs/technical/RPG_GENERATION_RESTORE_AND_PERSISTENCE_2026-04-24.md
kdletters cbc27bad4a
Some checks failed
CI / verify (push) Has been cancelled
init with react+axum+spacetimedb
2026-04-26 18:06:23 +08:00

1.9 KiB
Raw Blame History

RPG 生成流程刷新恢复与即时持久化设计2026-04-24

背景

  • RPG 共创从 Agent 聊天页触发 draft_foundation 后进入生成过程页。
  • 旧实现只持久化 activeSessionIdactiveOperationId,刷新时恢复入口会无条件回到 Agent 聊天页。
  • operation 失败后继续创作也会因为 operation 指针被清空而缺失生成页上下文。

目标

  1. 生成中刷新网页后仍停留在生成过程页。
  2. 生成完成后结果页内容第一时间落入作品持久化链路。
  3. 生成失败后从创作入口继续处理该草稿时,优先回到生成过程页展示失败状态,而不是 Agent 聊天页。

落地规则

  • 前端只保存恢复指针,不在 UI 持久层复制世界数据。
  • sessionStorage 与 URL query 中增加生成页来源字段 customWorldGenerationSource,当前仅支持 agent-draft-foundation
  • 初始恢复时:
    • 若存在 activeOperationId 且来源为 agent-draft-foundation,先进入 custom-world-generating
    • 否则若 session 已经可构建结果预览,进入 custom-world-result
    • 其他情况进入 agent-workspace
  • operation 进入 completedfailed 后仍保留 activeOperationId,直到用户离开、重新发起操作或清理工作区,保证刷新和继续创作能恢复完成/失败状态。
  • 生成完成后由 useRpgCreationResultAutosave 在结果页立即保存。生成页跳结果页前必须先同步最新 session 并写入 generatedCustomWorldProfile,确保自动保存消费的是最新快照。

验收点

  • 生成中刷新URL/sessionStorage 可恢复 custom-world-generating,页面显示“世界草稿生成进度”。
  • 生成失败刷新或继续创作:页面仍显示生成过程页和失败信息,不展示 Agent 聊天页。
  • 生成完成:跳到结果页后触发 upsertRpgWorldProfile,保存请求带 sourceAgentSessionId