@@ -82,7 +82,6 @@ import {
82
82
createSavedPromptCommandId ,
83
83
aditionalContentNameLimit ,
84
84
additionalContentInnerContextLimit ,
85
- tools ,
86
85
workspaceChunkMaxSize ,
87
86
defaultContextLengths ,
88
87
} from '../../constants'
@@ -368,6 +367,7 @@ export class ChatController {
368
367
private async processStopResponseMessage ( message : StopResponseMessage ) {
369
368
const session = this . sessionStorage . getSession ( message . tabID )
370
369
session . tokenSource . cancel ( )
370
+ this . chatHistoryStorage . getTabHistory ( message . tabID ) . clearRecentHistory ( )
371
371
}
372
372
373
373
private async processTriggerTabIDReceived ( message : TriggerTabIDReceived ) {
@@ -650,6 +650,8 @@ export class ChatController {
650
650
const session = this . sessionStorage . getSession ( tabID )
651
651
const toolUse = session . toolUse
652
652
if ( ! toolUse || ! toolUse . input ) {
653
+ // Turn off AgentLoop flag if there's no tool use
654
+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
653
655
return
654
656
}
655
657
session . setToolUse ( undefined )
@@ -723,7 +725,6 @@ export class ChatController {
723
725
customization : getSelectedCustomization ( ) ,
724
726
toolResults : toolResults ,
725
727
origin : Origin . IDE ,
726
- chatHistory : this . chatHistoryStorage . getTabHistory ( tabID ) . getHistory ( ) ,
727
728
context : session . context ?? [ ] ,
728
729
relevantTextDocuments : [ ] ,
729
730
additionalContents : [ ] ,
@@ -899,10 +900,16 @@ export class ChatController {
899
900
errorMessage = e . message
900
901
}
901
902
903
+ // Turn off AgentLoop flag in case of exception
904
+ if ( tabID ) {
905
+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
906
+ }
907
+
902
908
this . messenger . sendErrorMessage ( errorMessage , tabID , requestID )
903
909
getLogger ( ) . error ( `error: ${ errorMessage } tabID: ${ tabID } requestID: ${ requestID } ` )
904
910
905
911
this . sessionStorage . deleteSession ( tabID )
912
+ this . chatHistoryStorage . getTabHistory ( tabID ) . clearRecentHistory ( )
906
913
}
907
914
908
915
private async processContextMenuCommand ( command : EditorContextCommand ) {
@@ -1062,7 +1069,6 @@ export class ChatController {
1062
1069
codeQuery : lastTriggerEvent . context ?. focusAreaContext ?. names ,
1063
1070
userIntent : message . userIntent ,
1064
1071
customization : getSelectedCustomization ( ) ,
1065
- chatHistory : this . chatHistoryStorage . getTabHistory ( message . tabID ) . getHistory ( ) ,
1066
1072
contextLengths : {
1067
1073
...defaultContextLengths ,
1068
1074
} ,
@@ -1111,7 +1117,6 @@ export class ChatController {
1111
1117
codeQuery : context ?. focusAreaContext ?. names ,
1112
1118
userIntent : undefined ,
1113
1119
customization : getSelectedCustomization ( ) ,
1114
- chatHistory : this . chatHistoryStorage . getTabHistory ( message . tabID ) . getHistory ( ) ,
1115
1120
origin : Origin . IDE ,
1116
1121
context : message . context ?? [ ] ,
1117
1122
relevantTextDocuments : [ ] ,
@@ -1293,6 +1298,16 @@ export class ChatController {
1293
1298
}
1294
1299
1295
1300
const tabID = triggerEvent . tabID
1301
+ if ( this . sessionStorage . isAgentLoopInProgress ( tabID ) ) {
1302
+ // If a response is already in progress, stop it first
1303
+ const stopResponseMessage : StopResponseMessage = {
1304
+ tabID : tabID ,
1305
+ }
1306
+ await this . processStopResponseMessage ( stopResponseMessage )
1307
+ }
1308
+
1309
+ // Ensure AgentLoop flag is set to true during response generation
1310
+ this . sessionStorage . setAgentLoopInProgress ( tabID , true )
1296
1311
1297
1312
const credentialsState = await AuthUtil . instance . getChatAuthState ( )
1298
1313
@@ -1339,23 +1354,15 @@ export class ChatController {
1339
1354
triggerPayload . contextLengths . userInputContextLength = triggerPayload . message . length
1340
1355
triggerPayload . contextLengths . focusFileContextLength = triggerPayload . fileText . length
1341
1356
1357
+ const request = triggerPayloadToChatRequest ( triggerPayload )
1358
+
1342
1359
const chatHistory = this . chatHistoryStorage . getTabHistory ( tabID )
1343
- const newUserMessage = {
1344
- userInputMessage : {
1345
- content : triggerPayload . message ,
1346
- userIntent : triggerPayload . userIntent ,
1347
- ...( triggerPayload . origin && { origin : triggerPayload . origin } ) ,
1348
- userInputMessageContext : {
1349
- tools : tools ,
1350
- ...( triggerPayload . toolResults && { toolResults : triggerPayload . toolResults } ) ,
1351
- } ,
1352
- } ,
1360
+ const currentMessage = request . conversationState . currentMessage
1361
+ if ( currentMessage ) {
1362
+ chatHistory . fixHistory ( currentMessage )
1353
1363
}
1354
- const fixedHistoryMessage = chatHistory . fixHistory ( newUserMessage )
1355
- if ( fixedHistoryMessage . userInputMessage ?. userInputMessageContext ) {
1356
- triggerPayload . toolResults = fixedHistoryMessage . userInputMessage . userInputMessageContext . toolResults
1357
- }
1358
- const request = triggerPayloadToChatRequest ( triggerPayload )
1364
+ request . conversationState . history = chatHistory . getHistory ( )
1365
+
1359
1366
const conversationId = chatHistory . getConversationId ( ) || randomUUID ( )
1360
1367
chatHistory . setConversationId ( conversationId )
1361
1368
request . conversationState . conversationId = conversationId
@@ -1409,16 +1416,23 @@ export class ChatController {
1409
1416
}
1410
1417
this . telemetryHelper . recordEnterFocusConversation ( triggerEvent . tabID )
1411
1418
this . telemetryHelper . recordStartConversation ( triggerEvent , triggerPayload )
1412
- chatHistory . appendUserMessage ( fixedHistoryMessage )
1419
+ if ( currentMessage ) {
1420
+ chatHistory . appendUserMessage ( currentMessage )
1421
+ }
1413
1422
1414
1423
getLogger ( ) . info (
1415
1424
`response to tab: ${ tabID } conversationID: ${ session . sessionIdentifier } requestID: ${
1416
1425
response . $metadata . requestId
1417
1426
} metadata: ${ inspect ( response . $metadata , { depth : 12 } ) } `
1418
1427
)
1419
1428
await this . messenger . sendAIResponse ( response , session , tabID , triggerID , triggerPayload , chatHistory )
1429
+
1430
+ // Turn off AgentLoop flag after sending the AI response
1431
+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
1420
1432
} catch ( e : any ) {
1421
1433
this . telemetryHelper . recordMessageResponseError ( triggerPayload , tabID , getHttpStatusCode ( e ) ?? 0 )
1434
+ // Turn off AgentLoop flag in case of exception
1435
+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
1422
1436
// clears session, record telemetry before this call
1423
1437
this . processException ( e , tabID )
1424
1438
}
0 commit comments