From d437638fa9c4b60816d544a5426223a7c24f7deb Mon Sep 17 00:00:00 2001 From: Roo Code Date: Thu, 31 Jul 2025 20:36:31 +0000 Subject: [PATCH] fix: allow diff save feedback to bypass message queueing - Add bypassQueue parameter to handleSendMessage function - Detect tool operations (diff saves) in button click handlers - Allow messages to be sent immediately during tool operations - Fixes issue where user feedback during diff saves was being queued - Resolves #6509 --- webview-ui/src/components/chat/ChatView.tsx | 31 +++++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index 1fe93eb4700..9b8be90d805 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -556,12 +556,12 @@ const ChatViewComponent: React.ForwardRefRenderFunction { + (text: string, images: string[], fromQueue = false, bypassQueue = false) => { try { text = text.trim() if (text || images.length > 0) { - if (sendingDisabled && !fromQueue) { + if (sendingDisabled && !fromQueue && !bypassQueue) { // Generate a more unique ID using timestamp + random component const messageId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}` setMessageQueue((prev) => [...prev, { id: messageId, text, images }]) @@ -718,7 +718,6 @@ const ChatViewComponent: React.ForwardRefRenderFunction 0)) { + // Use handleSendMessage with bypassQueue=true to ensure message is sent immediately + // even if sendingDisabled is true (which happens during diff saves) + handleSendMessage(trimmedInput || "", images || [], false, true) + } else { + vscode.postMessage({ type: "askResponse", askResponse: "yesButtonClicked" }) + } + break case "completion_result": case "resume_completed_task": // Waiting for feedback, but we can just present a new task button @@ -752,7 +761,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction 0)) { + // Use handleSendMessage with bypassQueue=true to ensure message is sent immediately + // even if sendingDisabled is true (which happens during diff saves) + handleSendMessage(trimmedInput || "", images || [], false, true) + } else { + // Responds to the API with a "This operation failed" and lets it try again + vscode.postMessage({ type: "askResponse", askResponse: "noButtonClicked" }) + } + break case "command_output": vscode.postMessage({ type: "terminalOperation", terminalOperation: "abort" }) break @@ -802,7 +821,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction startNewTask(), [startNewTask])