diff --git a/apps/ai-game-creator-shell/src/App.tsx b/apps/ai-game-creator-shell/src/App.tsx index 72285aa78..2abc16df0 100644 --- a/apps/ai-game-creator-shell/src/App.tsx +++ b/apps/ai-game-creator-shell/src/App.tsx @@ -3491,6 +3491,9 @@ export function App({ let runtimeError = ''; let loadedDirectHistoryHasMore = false; let loadedDirectHistoryFirstItemId: string | null = null; + // 首屏切片先暂存,待下方 staleness 守卫通过后再并入聊天 reducer: + // 迟到的切片属于已经切走的项目,不能在守卫之前就写进全局聊天状态。 + let loadedDirectHistorySlice: DirectThreadHistorySlice | null = null; const projectConversation = directCodexProductRuntime ? (() => { return invoke( @@ -3502,10 +3505,7 @@ export function App({ ).then((slice) => { loadedDirectHistoryHasMore = slice.hasMore; loadedDirectHistoryFirstItemId = slice.firstItemId; - // 首屏历史进聊天 reducer;`messages` 在 DirectProject 下只剩运行期本地消息。 - setDirectThreadChat((state) => - mergeDirectThreadHistorySlice(state, slice), - ); + loadedDirectHistorySlice = slice; return { path: nextProjectPath, agentId: null, @@ -3579,6 +3579,13 @@ export function App({ if (directCodexProductRuntime) { setDirectHistoryHasMore(loadedDirectHistoryHasMore); directHistoryOldestItemIdRef.current = loadedDirectHistoryFirstItemId; + if (loadedDirectHistorySlice) { + const slice = loadedDirectHistorySlice; + // 首屏历史进聊天 reducer;`messages` 在 DirectProject 下只剩运行期本地消息。 + setDirectThreadChat((state) => + mergeDirectThreadHistorySlice(state, slice), + ); + } } setMessages((current) => { // replace 分支同样不能丢掉尚未落盘的运行时消息(初始需求)。