From 77a25d2543497efd6a97a527f5370c0dbde24fec Mon Sep 17 00:00:00 2001 From: Biki Kalita <86558912+Biki-dev@users.noreply.github.com> Date: Thu, 11 Dec 2025 17:18:48 +0530 Subject: [PATCH] Persist processed tool calls to prevent replay after chat restore (#224) --- components/chat-message-display.tsx | 5 ++++- components/chat-panel.tsx | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/components/chat-message-display.tsx b/components/chat-message-display.tsx index 9de439b..2ce33be 100644 --- a/components/chat-message-display.tsx +++ b/components/chat-message-display.tsx @@ -19,6 +19,7 @@ import { X, } from "lucide-react" import Image from "next/image" +import type { MutableRefObject } from "react" import { useCallback, useEffect, useRef, useState } from "react" import ReactMarkdown from "react-markdown" import { @@ -169,6 +170,7 @@ interface ChatMessageDisplayProps { messages: UIMessage[] setInput: (input: string) => void setFiles: (files: File[]) => void + processedToolCallsRef: MutableRefObject> sessionId?: string onRegenerate?: (messageIndex: number) => void onEditMessage?: (messageIndex: number, newText: string) => void @@ -179,6 +181,7 @@ export function ChatMessageDisplay({ messages, setInput, setFiles, + processedToolCallsRef, sessionId, onRegenerate, onEditMessage, @@ -187,7 +190,7 @@ export function ChatMessageDisplay({ const { chartXML, loadDiagram: onDisplayChart } = useDiagram() const messagesEndRef = useRef(null) const previousXML = useRef("") - const processedToolCalls = useRef>(new Set()) + const processedToolCalls = processedToolCallsRef const [expandedTools, setExpandedTools] = useState>( {}, ) diff --git a/components/chat-panel.tsx b/components/chat-panel.tsx index c72c4bb..b94aa5a 100644 --- a/components/chat-panel.tsx +++ b/components/chat-panel.tsx @@ -189,6 +189,9 @@ export default function ChatPanel({ // Ref to track consecutive auto-retry count (reset on user action) const autoRetryCountRef = useRef(0) + // Persist processed tool call IDs so collapsing the chat doesn't replay old tool outputs + const processedToolCallsRef = useRef>(new Set()) + const { messages, sendMessage, @@ -1081,6 +1084,7 @@ Please retry with an adjusted search pattern or use display_diagram if retries a messages={messages} setInput={setInput} setFiles={handleFileChange} + processedToolCallsRef={processedToolCallsRef} sessionId={sessionId} onRegenerate={handleRegenerate} status={status}