From 7c5bcc4fb0e8fdb4ac922557fe1a52a76c90f9d8 Mon Sep 17 00:00:00 2001 From: Suzumiya Date: Sun, 4 Oct 2026 15:13:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E9=83=A8=E7=89=88=E6=9C=AC=E7=99=BB?= =?UTF-8?q?=E8=AE=B0=E5=90=8E=E7=AB=8B=E5=8D=B3=E5=AE=A3=E5=91=8A=E6=B8=85?= =?UTF-8?q?=E5=8D=95=E5=A4=B1=E6=95=88=EF=BC=8C=E7=89=88=E6=9C=AC=E5=8D=A1?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E9=9C=80=E8=A6=81=E9=87=8D=E5=BC=80=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=89=8D=E5=87=BA=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 根因:版本追加只写盘、不发「清单已变」事件,而前端被当作「回合结束刷新」的那次调用实际发生在入队时(useDirectProjectChatController.ts:588-592 紧跟 startTurn 的 finally,await 的只是 enqueue_direct_codex_turn),于是 agent 追加版本后无人重读清单,新卡必须先重开项目才出现(旁证:resource-layouts/dependency.json 里 74 分钟缺该版本,直到重开项目才补齐) - 修复:版本真正追加成功时才 emit_game_creator_manifest_invalidated(root, "direct-codex.version")(与素材工具桥同口径),订阅侧立刻重读清单 - 版本卡显示顺序:orderIndex(内部版本序数)+ compareResourceOrder,修正初始版本被排到最后(4 版读作 2/3/4/1 → 现为 1..N 单调);不带 orderIndex 的资源排序与坐标逐值不变 - 最新版本卡角标:`最新 · 发布标签 v{N}`(只给 versions 最后一条,N = versions.length = 发布面板取的标签) - 发布面板文案:「本次发布标签 = 最新内部版本 v{N};agent 再改进一次后,下一次发布将是 v{N+1}」,并保留「平台线上号是平台侧事实、与本标签互不推导」 - 验证:vitest apps/ai-game-creator-shell/tests 1935 passed / 0 failed;cargo check(带编辑器 feature)通过;encoding / typecheck 通过;真机未验(环境重新拉起前无法核验,待补) --- .../src-tauri/src/agent/direct_runtime/mod.rs | 10 +++++++++- .../GameDistributionPublishPanel.tsx | 18 +++++++++++++++++- apps/ai-game-creator-shell/src/styles.css | 16 ++++++++++++++++ .../src/view/project-development/index.tsx | 8 ++++++++ .../resourceProjectionModel.ts | 16 ++++++++++++++-- .../gameDistributionPublishPanel.test.tsx | 8 ++++++-- .../projectResourceProjectionModel.test.ts | 4 ++++ 7 files changed, 74 insertions(+), 6 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs index dc71492c0..53eff6757 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_runtime/mod.rs @@ -4179,10 +4179,18 @@ fn sync_direct_codex_project_file_projection_at( return Err("Codex 返回后没有可登记的游戏文件".to_string()); } update_manifest_task_status_at(root, "code-prototype", GameCreationAppTaskStatus::Completed)?; + let mut version_registered = false; if outputs_changed || manifest_requires_sync { let _lock = acquire_project_write_lock_with_wait(root, "direct-codex.version")?; let version_revision = advance_agent_runtime_project_revision_locked(root)?; - append_agent_game_iteration_version_at(root, version_revision)?; + version_registered = append_agent_game_iteration_version_at(root, version_revision)?; + } + if version_registered { + // 新增的内部版本只落在清单里:这条写入不经过任何工具桥,也就没有任何事件。 + // 必须显式宣告清单失效,否则渲染层的资源投影(「项目版本」卡、发布面板的版本标签) + // 在本回合结束后不会重读清单 —— 版本已经在盘上,用户却看不到新的版本卡。 + // 与工具桥的素材写入同一口径(见 direct_tool_bridge.rs 的 asset-import)。 + emit_game_creator_manifest_invalidated(root, "direct-codex.version"); } Ok(()) } diff --git a/apps/ai-game-creator-shell/src/components/game-distribution/GameDistributionPublishPanel.tsx b/apps/ai-game-creator-shell/src/components/game-distribution/GameDistributionPublishPanel.tsx index b030fa5e3..8f32bb5b0 100644 --- a/apps/ai-game-creator-shell/src/components/game-distribution/GameDistributionPublishPanel.tsx +++ b/apps/ai-game-creator-shell/src/components/game-distribution/GameDistributionPublishPanel.tsx @@ -282,6 +282,22 @@ export function GameDistributionPublishPanel({ () => resolveGameCreationAppProjectVersion(manifest), [manifest], ); + /** + * 「项目版本」这一格的说明。标签只有一个来源(`versions[]` 条数),平台线上版本号是 + * 另一套事实:两句都要说清,且不在这里做第二份口径派生。 + */ + const projectVersionHint = useMemo(() => { + const internalCount = manifest.versions?.length ?? 0; + const label = + internalCount > 0 + ? `本次发布标签 = 最新内部版本 v${projectVersion};agent 再改进一次后,下一次发布将是 v${projectVersion + 1}。` + : `这个项目还没有内部版本,本次发布按首版 v${projectVersion}。`; + const platform = + latestVersionNumber > 0 + ? `线上最近提交 v${latestVersionNumber} 是平台侧事实,与本标签互不推导。` + : '第一次发布即第一版。'; + return `${label}${platform}`; + }, [latestVersionNumber, manifest.versions, projectVersion]); const metadataSuggestionRequestRef = useRef(0); const publicationRequestRef = useRef(0); const publicationDraftAppliedRef = useRef(false); @@ -922,7 +938,7 @@ export function GameDistributionPublishPanel({ /> - {`来自 AGC 内部版本(版本 ${projectVersion}):每次智能体修订追加一个内部版本,发布标签随之推进;${latestVersionNumber > 0 ? `线上最近提交 v${latestVersionNumber} 是平台侧事实,与本标签互不推导。` : '第一次发布即第一版。'}`} + {projectVersionHint}