首屏历史切片改到 staleness 守卫之后再并入聊天 reducer
- loadProjectConversation 不再在 read_direct_project_history_slice 的 then 回调里直接写 directThreadChat - 切片先暂存,等 loadVersion / localProjectPathRef 守卫通过后再与 hasMore、锚点一起落到状态 - 现有 launcher 按项目路径 key 重挂载 App,跨项目污染暂不可复现;本次只是让这条写入与其它状态写入的时序一致
This commit is contained in:
@@ -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<DirectThreadHistorySlice>(
|
||||
@@ -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 分支同样不能丢掉尚未落盘的运行时消息(初始需求)。
|
||||
|
||||
Reference in New Issue
Block a user