fix(frontend): reset paged state on send to prevent misordering during streaming

When a completed session (forwardPaginated=true) has forward-loaded history
pages and the user sends a new message, pagedMessages would appear after the
new streaming turn instead of before it. Reset pagedRawMessages before calling
sendMessage so ordering is always correct during the active stream.

Expose resetPaged() from useLoadMoreMessages for this purpose.
This commit is contained in:
Zamil Majdy
2026-04-15 20:50:13 +07:00
parent f35791170a
commit a0f149fcb2
2 changed files with 21 additions and 2 deletions

View File

@@ -86,7 +86,7 @@ export function useCopilotPage() {
copilotModel: isModeToggleEnabled ? copilotLlmModel : undefined,
});
const { pagedMessages, hasMore, isLoadingMore, loadMore } =
const { pagedMessages, hasMore, isLoadingMore, loadMore, resetPaged } =
useLoadMoreMessages({
sessionId,
initialOldestSequence: oldestSequence,
@@ -261,6 +261,15 @@ export function useCopilotPage() {
isUserStoppingRef.current = false;
if (sessionId) {
// When continuing a completed session that had forward-paginated history
// loaded, the paged messages would appear in wrong position relative to
// the new streaming turn (pagedMessages are newer pages, so they'd end
// up after the streaming turn). Reset paged state so ordering is correct
// during streaming; the user can reload history afterward if needed.
if (forwardPaginated && pagedMessages.length > 0) {
resetPaged();
}
if (files && files.length > 0) {
setIsUploadingFiles(true);
try {

View File

@@ -188,5 +188,15 @@ export function useLoadMoreMessages({
}
}
return { pagedMessages, hasMore, isLoadingMore, loadMore };
function resetPaged() {
setPagedRawMessages([]);
setOldestSequence(initialOldestSequence);
setNewestSequence(initialNewestSequence);
setHasMore(initialHasMore);
isLoadingMoreRef.current = false;
consecutiveErrorsRef.current = 0;
epochRef.current += 1;
}
return { pagedMessages, hasMore, isLoadingMore, loadMore, resetPaged };
}