fix: process queued messages immediately after any tool completion

- Add processQueuedMessages() call to pushToolResult in presentAssistantMessage.ts
- Remove redundant processQueuedMessages() calls from individual tool files
- Ensures queued messages are injected ASAP rather than waiting for approval-related actions

Fixes #9315
This commit is contained in:
Roo Code 2025-11-17 16:48:51 +00:00
parent 3e0bd0ea55
commit bbd8f78c86
5 changed files with 5 additions and 15 deletions

View file

@ -345,6 +345,11 @@ export async function presentAssistantMessage(cline: Task) {
// uses since we should only ever present one tool result per
// message.
cline.didAlreadyUseTool = true
// Process any queued messages immediately after tool completion
// This ensures queued messages are injected ASAP rather than waiting
// for approval-related actions
cline.processQueuedMessages()
}
const askApproval = async (

View file

@ -220,7 +220,6 @@ export class ApplyDiffTool extends BaseTool<"apply_diff"> {
if (!didApprove) {
await task.diffViewProvider.revertChanges()
task.processQueuedMessages()
return
}
@ -259,14 +258,10 @@ export class ApplyDiffTool extends BaseTool<"apply_diff"> {
await task.diffViewProvider.reset()
// Process any queued messages after file edit completes
task.processQueuedMessages()
return
} catch (error) {
await handleError("applying diff", error as Error)
await task.diffViewProvider.reset()
task.processQueuedMessages()
return
}
}

View file

@ -197,9 +197,6 @@ export class InsertContentTool extends BaseTool<"insert_content"> {
pushToolResult(message)
await task.diffViewProvider.reset()
// Process any queued messages after file edit completes
task.processQueuedMessages()
} catch (error) {
await handleError("insert content", error as Error)
await task.diffViewProvider.reset()

View file

@ -196,7 +196,6 @@ Original error: ${errorMessage}`
TelemetryService.instance.captureDiffApplicationError(cline.taskId, cline.consecutiveMistakeCount)
await cline.say("diff_error", `Failed to parse apply_diff XML: ${errorMessage}`)
pushToolResult(detailedError)
cline.processQueuedMessages()
return
}
} else if (legacyPath && typeof legacyDiffContent === "string") {
@ -220,7 +219,6 @@ Original error: ${errorMessage}`
"args (or legacy 'path' and 'diff' parameters)",
)
pushToolResult(errorMsg)
cline.processQueuedMessages()
return
}
@ -236,7 +234,6 @@ Original error: ${errorMessage}`
: "args (must contain at least one valid file element)",
),
)
cline.processQueuedMessages()
return
}
@ -746,12 +743,10 @@ ${errorDetails ? `\nTechnical details:\n${errorDetails}\n` : ""}
// Push the final result combining all operation results
pushToolResult(results.join("\n\n") + singleBlockNotice)
cline.processQueuedMessages()
return
} catch (error) {
await handleError("applying diff", error)
await cline.diffViewProvider.reset()
cline.processQueuedMessages()
return
}
}

View file

@ -268,8 +268,6 @@ export class WriteToFileTool extends BaseTool<"write_to_file"> {
await task.diffViewProvider.reset()
task.processQueuedMessages()
return
} catch (error) {
await handleError("writing file", error as Error)