@@ -350,7 +350,17 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
350
350
return this . _replyMessage ( message , reply ) ;
351
351
}
352
352
353
+ private _scheduledRefresh : Promise < void > | undefined ;
353
354
protected async tryScheduleCopilotRefresh ( commentBody : string , reviewType ?: ReviewStateValue ) {
355
+ if ( ! this . _scheduledRefresh ) {
356
+ this . _scheduledRefresh = this . doScheduleCopilotRefresh ( commentBody , reviewType )
357
+ . finally ( ( ) => {
358
+ this . _scheduledRefresh = undefined ;
359
+ } ) ;
360
+ }
361
+ }
362
+
363
+ private async doScheduleCopilotRefresh ( commentBody : string , reviewType ?: ReviewStateValue ) {
354
364
if ( ! COPILOT_ACCOUNTS [ this . _item . author . login ] ) {
355
365
return ;
356
366
}
@@ -359,7 +369,31 @@ export class IssueOverviewPanel<TItem extends IssueModel = IssueModel> extends W
359
369
return ;
360
370
}
361
371
362
- await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
372
+ const initialTimeline = await this . _getTimeline ( ) ;
373
+ const delays = [ 250 , 500 , 1000 , 2000 ] ;
374
+
375
+ for ( const delay of delays ) {
376
+ await new Promise ( resolve => setTimeout ( resolve , delay ) ) ;
377
+ if ( this . _isDisposed ) {
378
+ return ;
379
+ }
380
+
381
+ try {
382
+ const currentTimeline = await this . _getTimeline ( ) ;
383
+
384
+ // Check if we have any new CopilotStarted events
385
+ if ( currentTimeline . length > initialTimeline . length ) {
386
+ // Found a new CopilotStarted event, refresh and stop
387
+ this . refreshPanel ( ) ;
388
+ return ;
389
+ }
390
+ } catch ( error ) {
391
+ // If timeline fetch fails, continue with the next retry
392
+ Logger . warn ( `Failed to fetch timeline during Copilot refresh retry: ${ error } ` , IssueOverviewPanel . ID ) ;
393
+ }
394
+ }
395
+
396
+ // If no new CopilotStarted events were found after all retries, still refresh once
363
397
if ( ! this . _isDisposed ) {
364
398
this . refreshPanel ( ) ;
365
399
}
0 commit comments