File tree Expand file tree Collapse file tree 6 files changed +39
-64
lines changed Expand file tree Collapse file tree 6 files changed +39
-64
lines changed Original file line number Diff line number Diff line change @@ -2897,4 +2897,28 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
28972897 public get cwd ( ) {
28982898 return this . workspacePath
28992899 }
2900+
2901+ /**
2902+ * Process any queued messages by dequeuing and submitting them.
2903+ * This ensures that queued user messages are sent when appropriate,
2904+ * preventing them from getting stuck in the queue.
2905+ *
2906+ * @param context - Context string for logging (e.g., the calling tool name)
2907+ */
2908+ public processQueuedMessages ( ) : void {
2909+ try {
2910+ if ( ! this . messageQueueService . isEmpty ( ) ) {
2911+ const queued = this . messageQueueService . dequeueMessage ( )
2912+ if ( queued ) {
2913+ setTimeout ( ( ) => {
2914+ this . submitUserMessage ( queued . text , queued . images ) . catch ( ( err ) =>
2915+ console . error ( `[Task] Failed to submit queued message:` , err ) ,
2916+ )
2917+ } , 0 )
2918+ }
2919+ }
2920+ } catch ( e ) {
2921+ console . error ( `[Task] Queue processing error:` , e )
2922+ }
2923+ }
29002924}
Original file line number Diff line number Diff line change @@ -207,6 +207,7 @@ export async function applyDiffToolLegacy(
207207
208208 if ( ! didApprove ) {
209209 await cline . diffViewProvider . revertChanges ( ) // Cline likely handles closing the diff view
210+ cline . processQueuedMessages ( )
210211 return
211212 }
212213
@@ -245,27 +246,15 @@ export async function applyDiffToolLegacy(
245246
246247 await cline . diffViewProvider . reset ( )
247248
248- // After completing file edits, process one queued user message if present
249- try {
250- if ( ! cline . messageQueueService . isEmpty ( ) ) {
251- const queued = cline . messageQueueService . dequeueMessage ( )
252- if ( queued ) {
253- setTimeout ( ( ) => {
254- cline
255- . submitUserMessage ( queued . text , queued . images )
256- . catch ( ( err ) => console . error ( "[applyDiffTool] Failed to submit queued message:" , err ) )
257- } , 0 )
258- }
259- }
260- } catch ( e ) {
261- console . error ( "[applyDiffTool] Queue processing error:" , e )
262- }
249+ // Process any queued messages after file edit completes
250+ cline . processQueuedMessages ( )
263251
264252 return
265253 }
266254 } catch ( error ) {
267255 await handleError ( "applying diff" , error )
268256 await cline . diffViewProvider . reset ( )
257+ cline . processQueuedMessages ( )
269258 return
270259 }
271260}
Original file line number Diff line number Diff line change @@ -188,21 +188,8 @@ export async function insertContentTool(
188188
189189 await cline . diffViewProvider . reset ( )
190190
191- // After completing file edits, process one queued user message if present
192- try {
193- if ( ! cline . messageQueueService . isEmpty ( ) ) {
194- const queued = cline . messageQueueService . dequeueMessage ( )
195- if ( queued ) {
196- setTimeout ( ( ) => {
197- cline
198- . submitUserMessage ( queued . text , queued . images )
199- . catch ( ( err ) => console . error ( "[insertContentTool] Failed to submit queued message:" , err ) )
200- } , 0 )
201- }
202- }
203- } catch ( e ) {
204- console . error ( "[insertContentTool] Queue processing error:" , e )
205- }
191+ // Process any queued messages after file edit completes
192+ cline . processQueuedMessages ( )
206193 } catch ( error ) {
207194 handleError ( "insert content" , error )
208195 await cline . diffViewProvider . reset ( )
Original file line number Diff line number Diff line change @@ -172,6 +172,7 @@ Original error: ${errorMessage}`
172172 TelemetryService . instance . captureDiffApplicationError ( cline . taskId , cline . consecutiveMistakeCount )
173173 await cline . say ( "diff_error" , `Failed to parse apply_diff XML: ${ errorMessage } ` )
174174 pushToolResult ( detailedError )
175+ cline . processQueuedMessages ( )
175176 return
176177 }
177178 } else if ( legacyPath && typeof legacyDiffContent === "string" ) {
@@ -195,6 +196,7 @@ Original error: ${errorMessage}`
195196 "args (or legacy 'path' and 'diff' parameters)" ,
196197 )
197198 pushToolResult ( errorMsg )
199+ cline . processQueuedMessages ( )
198200 return
199201 }
200202
@@ -210,6 +212,7 @@ Original error: ${errorMessage}`
210212 : "args (must contain at least one valid file element)" ,
211213 ) ,
212214 )
215+ cline . processQueuedMessages ( )
213216 return
214217 }
215218
@@ -675,10 +678,12 @@ ${errorDetails ? `\nTechnical details:\n${errorDetails}\n` : ""}
675678
676679 // Push the final result combining all operation results
677680 pushToolResult ( results . join ( "\n\n" ) + singleBlockNotice )
681+ cline . processQueuedMessages ( )
678682 return
679683 } catch ( error ) {
680684 await handleError ( "applying diff" , error )
681685 await cline . diffViewProvider . reset ( )
686+ cline . processQueuedMessages ( )
682687 return
683688 }
684689}
Original file line number Diff line number Diff line change @@ -264,23 +264,8 @@ export async function searchAndReplaceTool(
264264 cline . recordToolUsage ( "search_and_replace" )
265265 await cline . diffViewProvider . reset ( )
266266
267- // After completing file edits, process one queued user message if present
268- try {
269- if ( ! cline . messageQueueService . isEmpty ( ) ) {
270- const queued = cline . messageQueueService . dequeueMessage ( )
271- if ( queued ) {
272- setTimeout ( ( ) => {
273- cline
274- . submitUserMessage ( queued . text , queued . images )
275- . catch ( ( err ) =>
276- console . error ( "[searchAndReplaceTool] Failed to submit queued message:" , err ) ,
277- )
278- } , 0 )
279- }
280- }
281- } catch ( e ) {
282- console . error ( "[searchAndReplaceTool] Queue processing error:" , e )
283- }
267+ // Process any queued messages after file edit completes
268+ cline . processQueuedMessages ( )
284269 } catch ( error ) {
285270 handleError ( "search and replace" , error )
286271 await cline . diffViewProvider . reset ( )
Original file line number Diff line number Diff line change @@ -308,23 +308,8 @@ export async function writeToFileTool(
308308
309309 await cline . diffViewProvider . reset ( )
310310
311- // After completing file edits, process one queued user message if present
312- try {
313- if ( ! cline . messageQueueService . isEmpty ( ) ) {
314- const queued = cline . messageQueueService . dequeueMessage ( )
315- if ( queued ) {
316- setTimeout ( ( ) => {
317- cline
318- . submitUserMessage ( queued . text , queued . images )
319- . catch ( ( err ) =>
320- console . error ( "[writeToFileTool] Failed to submit queued message:" , err ) ,
321- )
322- } , 0 )
323- }
324- }
325- } catch ( e ) {
326- console . error ( "[writeToFileTool] Queue processing error:" , e )
327- }
311+ // Process any queued messages after file edit completes
312+ cline . processQueuedMessages ( )
328313
329314 return
330315 }
You can’t perform that action at this time.
0 commit comments