From 0480868746e88e8cb1de6bc373413e60222442a9 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Sun, 21 Dec 2025 17:08:56 +0000 Subject: [PATCH] fix: prevent message disappearing when task ends during queueing - Add null check in queueMessage handler to catch edge case where task ends between send click and message processing - Send queueMessageFailed message to webview to restore user input - Handle queueMessageFailed in ChatView to restore text and images - Prevents user frustration from losing typed messages --- src/core/webview/webviewMessageHandler.ts | 13 ++++++++++++- src/shared/ExtensionMessage.ts | 1 + webview-ui/src/components/chat/ChatView.tsx | 7 +++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index aa72ee253f5..ca97531aab6 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -3036,7 +3036,18 @@ export const webviewMessageHandler = async ( */ case "queueMessage": { - provider.getCurrentTask()?.messageQueueService.addMessage(message.text ?? "", message.images) + const currentTask = provider.getCurrentTask() + if (!currentTask) { + // Task ended between when the user clicked send and when the message was processed + provider.log("Cannot queue message: No active task") + await provider.postMessageToWebview({ + type: "queueMessageFailed", + text: message.text, + images: message.images, + }) + break + } + currentTask.messageQueueService.addMessage(message.text ?? "", message.images) break } case "removeQueuedMessage": { diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 20bb5759645..8df9f507e17 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -133,6 +133,7 @@ export interface ExtensionMessage { | "browserSessionUpdate" | "browserSessionNavigate" | "claudeCodeRateLimits" + | "queueMessageFailed" text?: string payload?: any // Add a generic payload for now, can refine later // Checkpoint warning message diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index a002abf8cfb..2e040a36336 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -820,6 +820,13 @@ const ChatViewComponent: React.ForwardRefRenderFunction 0)) { + setInputValue(message.text || "") + setSelectedImages(message.images || []) + } + break case "invoke": switch (message.invoke!) { case "newChat":