@@ -18,7 +18,7 @@ import { DocumentHistory, HistoryContext, IHistoryContextProvider } from '../../
1818import { IXtabHistoryEditEntry , NesXtabHistoryTracker } from '../../../platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker' ;
1919import { ILogger , ILogService , LogTarget } from '../../../platform/log/common/logService' ;
2020import { CapturingToken } from '../../../platform/requestLogger/common/capturingToken' ;
21- import { IRequestLogger } from '../../../platform/requestLogger/node/requestLogger' ;
21+ import { IRequestLogger , LoggedRequestKind } from '../../../platform/requestLogger/node/requestLogger' ;
2222import { ISnippyService } from '../../../platform/snippy/common/snippyService' ;
2323import { IExperimentationService } from '../../../platform/telemetry/common/nullExperimentationService' ;
2424import { ErrorUtils } from '../../../util/common/errors' ;
@@ -992,20 +992,24 @@ export class NextEditProvider extends Disposable implements INextEditProvider<Ne
992992 }
993993
994994 private async _triggerSpeculativeRequest ( suggestion : NextEditResult ) : Promise < void > {
995- const logger = this . _logger . createSubLogger ( '_triggerSpeculativeRequest' ) ;
996-
997995 const result = suggestion . result ;
998996 if ( ! result ?. edit ) {
999- logger . trace ( 'no edit in suggestion result' ) ;
1000997 return ;
1001998 }
1002999
10031000 const docId = result . targetDocumentId ;
10041001 if ( ! docId ) {
1005- logger . trace ( 'no target document ID in suggestion result' ) ;
10061002 return ;
10071003 }
10081004
1005+ const logContext = new InlineEditRequestLogContext ( docId . uri , 0 , undefined ) ;
1006+
1007+ const sw = new StopWatch ( ) ;
1008+ const logger = this . _logger . createSubLogger ( '_triggerSpeculativeRequest' )
1009+ . withExtraTarget ( LogTarget . fromCallback ( ( _level , msg ) => {
1010+ logContext . trace ( `[${ Math . floor ( sw . elapsed ( ) ) . toString ( ) . padStart ( 4 , ' ' ) } ms] ${ msg } ` ) ;
1011+ } ) ) ;
1012+
10091013 // Compute the post-edit document content
10101014 const postEditContent = result . edit . replace ( result . documentBeforeEdits . value ) ;
10111015 const preciseEdit = result . edit . removeCommonSuffixPrefix ( result . documentBeforeEdits . value ) ;
@@ -1074,9 +1078,6 @@ export class NextEditProvider extends Disposable implements INextEditProvider<Ne
10741078 return ;
10751079 }
10761080
1077- // Create a speculative request
1078- // Use a dummy version since this is speculative and we don't have the actual post-edit version
1079- const logContext = new InlineEditRequestLogContext ( docId . uri , 0 , undefined ) ;
10801081 const req = new NextEditFetchRequest ( `sp-${ suggestion . source . opportunityId } ` , logContext , undefined , true , `sp-${ generateUuid ( ) } ` ) ;
10811082
10821083 logger . trace ( `triggering speculative request for post-edit state (opportunityId=${ req . opportunityId } , headerRequestId=${ req . headerRequestId } )` ) ;
@@ -1125,11 +1126,13 @@ export class NextEditProvider extends Disposable implements INextEditProvider<Ne
11251126 { triggeredBySpeculativeRequest, isSubsequentEdit } : { triggeredBySpeculativeRequest : boolean ; isSubsequentEdit : boolean } ,
11261127 parentLogger : ILogger
11271128 ) : Promise < StatelessNextEditRequest < CachedOrRebasedEdit > | undefined > {
1128- const logger = parentLogger . createSubLogger ( '_createSpeculativeRequest' ) ;
11291129 const curDocId = doc . id ;
11301130
11311131 const recording = this . _debugRecorder ?. getRecentLog ( ) ;
11321132 const logContext = req . log ;
1133+ logContext . setStatelessNextEditProviderId ( this . _statelessNextEditProvider . ID ) ;
1134+
1135+ const logger = parentLogger . createSubLogger ( '_createSpeculativeRequest' ) ;
11331136
11341137 const activeDocAndIdx = historyContext . getDocumentAndIdx ( curDocId ) ;
11351138 if ( ! activeDocAndIdx ) {
@@ -1213,14 +1216,22 @@ export class NextEditProvider extends Disposable implements INextEditProvider<Ne
12131216 undefined , // providerRequestStartDateTime
12141217 ) ;
12151218
1219+ logContext . setRequestInput ( nextEditRequest ) ;
1220+
12161221 logger . trace ( 'starting speculative provider call' ) ;
12171222
12181223 // Start the provider call - this runs in the background and populates the cache
1219- const label = `NES | spec | ${ basename ( doc . id . toUri ( ) . fsPath ) } (v${ doc . version } )` ;
1224+ const label = `NES | spec | ${ basename ( doc . id . toUri ( ) . fsPath ) } (v${ doc . version . get ( ) } )` ;
12201225
1221- const capturingToken = new CapturingToken ( label , undefined , true , true ) ;
1226+ const capturingToken = new CapturingToken ( label , undefined , false , true ) ;
12221227
1223- void this . _requestLogger . captureInvocation ( capturingToken , ( ) => this . _runSpeculativeProviderCall ( nextEditRequest , projectedDocuments , curDocId , req , logger ) ) ;
1228+ void this . _requestLogger . captureInvocation ( capturingToken , async ( ) => {
1229+ try {
1230+ await this . _runSpeculativeProviderCall ( nextEditRequest , projectedDocuments , curDocId , req , logger ) ;
1231+ } finally {
1232+ this . _addLogContextEntry ( logContext , label ) ;
1233+ }
1234+ } ) ;
12241235
12251236 return nextEditRequest ;
12261237 }
@@ -1413,6 +1424,19 @@ export class NextEditProvider extends Disposable implements INextEditProvider<Ne
14131424 this . _snippyService . handlePostInsertion ( docId . toUri ( ) , suggestion . result . documentBeforeEdits , suggestion . result . edit ) ;
14141425 }
14151426
1427+ private _addLogContextEntry ( logContext : InlineEditRequestLogContext , debugNameOverride ?: string ) : void {
1428+ if ( ! logContext . includeInLogTree ) {
1429+ return ;
1430+ }
1431+ this . _requestLogger . addEntry ( {
1432+ type : LoggedRequestKind . MarkdownContentRequest ,
1433+ debugName : debugNameOverride ?? logContext . getDebugName ( ) ,
1434+ icon : logContext . getIcon ( ) ,
1435+ startTimeMs : logContext . time ,
1436+ markdownContent : logContext . toLogDocument ( ) ,
1437+ } ) ;
1438+ }
1439+
14161440 public clearCache ( ) {
14171441 this . _nextEditCache . clear ( ) ;
14181442 this . _rejectionCollector . clear ( ) ;
0 commit comments