mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 20:30:45 +00:00
fix(control-ui): preserve optimistic messages on empty history
This commit is contained in:
@@ -818,6 +818,33 @@ describe("loadChatHistory", () => {
|
||||
expect(state.chatStream).toBeNull();
|
||||
});
|
||||
|
||||
it("keeps local optimistic messages when history reload returns empty", async () => {
|
||||
const optimisticUser = {
|
||||
role: "user",
|
||||
content: [{ type: "text", text: "first ask" }],
|
||||
timestamp: 10,
|
||||
};
|
||||
const optimisticAssistant = {
|
||||
role: "assistant",
|
||||
content: [{ type: "text", text: "first answer" }],
|
||||
timestamp: 11,
|
||||
};
|
||||
const request = vi.fn().mockResolvedValue({
|
||||
messages: [],
|
||||
thinkingLevel: "low",
|
||||
});
|
||||
const state = createState({
|
||||
connected: true,
|
||||
client: { request } as unknown as ChatState["client"],
|
||||
chatMessages: [optimisticUser, optimisticAssistant],
|
||||
});
|
||||
|
||||
await loadChatHistory(state);
|
||||
|
||||
expect(state.chatMessages).toEqual([optimisticUser, optimisticAssistant]);
|
||||
expect(state.chatStream).toBeNull();
|
||||
});
|
||||
|
||||
it("does not duplicate optimistic tail messages after history catches up", async () => {
|
||||
const optimisticUser = {
|
||||
role: "user",
|
||||
|
||||
@@ -268,9 +268,17 @@ function preserveOptimisticTailMessages(
|
||||
historyMessages: unknown[],
|
||||
previousMessages: unknown[],
|
||||
): unknown[] {
|
||||
if (historyMessages.length === 0 || previousMessages.length === 0) {
|
||||
if (previousMessages.length === 0) {
|
||||
return historyMessages;
|
||||
}
|
||||
if (historyMessages.length === 0) {
|
||||
const optimisticMessages = previousMessages.filter(
|
||||
(message) => isLocallyOptimisticHistoryMessage(message) && !shouldHideHistoryMessage(message),
|
||||
);
|
||||
return optimisticMessages.length === previousMessages.length
|
||||
? previousMessages
|
||||
: historyMessages;
|
||||
}
|
||||
const historySignatures = new Set(
|
||||
historyMessages
|
||||
.map((message) => messageDisplaySignature(message))
|
||||
|
||||
Reference in New Issue
Block a user