From e53c02da85fd326d853c96e55ff6a895976b11be Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 12 Dec 2025 04:35:03 -0500 Subject: [PATCH] refactor: Improve message handling logic in useStepHandler - Enhanced the logic for managing messages in multi-tab scenarios, ensuring that the most up-to-date message history is utilized. - Removed existing response placeholders and ensured user messages are included, improving the accuracy of message updates in the chat flow. --- client/src/hooks/SSE/useStepHandler.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/client/src/hooks/SSE/useStepHandler.ts b/client/src/hooks/SSE/useStepHandler.ts index 24bcaf140d..fdb4d5823b 100644 --- a/client/src/hooks/SSE/useStepHandler.ts +++ b/client/src/hooks/SSE/useStepHandler.ts @@ -253,10 +253,21 @@ export default function useStepHandler({ }; messageMap.current.set(responseMessageId, response); - // If last message was user message, append response; otherwise replace last - const baseMessages = - lastMessage && !lastMessage.isCreatedByUser ? messages.slice(0, -1) : messages; - setMessages([...baseMessages, response]); + + // Get fresh messages to handle multi-tab scenarios where messages may have loaded + // after this handler started (Tab 2 may have more complete history now) + const freshMessages = getMessages() || []; + const currentMessages = freshMessages.length > messages.length ? freshMessages : messages; + + // Remove any existing response placeholder + let updatedMessages = currentMessages.filter((m) => m.messageId !== responseMessageId); + + // Ensure userMessage is present (multi-tab: Tab 2 may not have it yet) + if (!updatedMessages.some((m) => m.messageId === userMessage.messageId)) { + updatedMessages = [...updatedMessages, userMessage as TMessage]; + } + + setMessages([...updatedMessages, response]); } // Store tool call IDs if present