Skip to content

Commit 8d81e99

Browse files
committed
fix(acp): Replace optimistic message in-place to preserve order
The previous approach removed the optimistic message and appended the persisted version at the end of the array, which broke chronological order when assistant messages had already been added after it. Now uses `findIndex` + in-place replacement to keep the message at its correct position in the chat history.
1 parent 634321d commit 8d81e99

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

apps/tauri/src/hooks/useSessionMessages.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,16 @@ export function useSessionMessages(sessionId: string): UseSessionMessagesReturn
9595
if (msgSessionId !== sessionId) return;
9696
setMessages((prev) => {
9797
if (prev.some((m) => m.id === id)) return prev;
98-
const withoutOptimistic = prev.filter(
99-
(m) => !(m.id.startsWith("optimistic-") && m.role === "user" && m.content === content)
98+
const idx = prev.findIndex(
99+
(m) => m.id.startsWith("optimistic-") && m.role === "user" && m.content === content
100100
);
101-
return [...withoutOptimistic, { id, role: "user", content, timestamp: new Date() }];
101+
const persisted: AcpMessage = { id, role: "user", content, timestamp: new Date() };
102+
if (idx >= 0) {
103+
const updated = [...prev];
104+
updated[idx] = persisted;
105+
return updated;
106+
}
107+
return [...prev, persisted];
102108
});
103109
});
104110
return () => { void unlisten.then((fn) => fn()); };

0 commit comments

Comments
 (0)