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
This commit is contained in:
Roo Code 2025-12-21 17:08:56 +00:00
parent 78dc34498b
commit 0480868746
3 changed files with 20 additions and 1 deletions

View file

@ -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": {

View file

@ -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

View file

@ -820,6 +820,13 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
)
}
break
case "queueMessageFailed":
// Restore the message that failed to queue
if (message.text || (message.images && message.images.length > 0)) {
setInputValue(message.text || "")
setSelectedImages(message.images || [])
}
break
case "invoke":
switch (message.invoke!) {
case "newChat":