@@ -368,6 +368,7 @@ export class ChatController {
368368 private async processStopResponseMessage ( message : StopResponseMessage ) {
369369 const session = this . sessionStorage . getSession ( message . tabID )
370370 session . tokenSource . cancel ( )
371+ this . chatHistoryStorage . getTabHistory ( message . tabID ) . clearRecentHistory ( )
371372 }
372373
373374 private async processTriggerTabIDReceived ( message : TriggerTabIDReceived ) {
@@ -650,6 +651,8 @@ export class ChatController {
650651 const session = this . sessionStorage . getSession ( tabID )
651652 const toolUse = session . toolUse
652653 if ( ! toolUse || ! toolUse . input ) {
654+ // Turn off AgentLoop flag if there's no tool use
655+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
653656 return
654657 }
655658 session . setToolUse ( undefined )
@@ -711,7 +714,6 @@ export class ChatController {
711714 customization : getSelectedCustomization ( ) ,
712715 toolResults : toolResults ,
713716 origin : Origin . IDE ,
714- chatHistory : this . chatHistoryStorage . getTabHistory ( tabID ) . getHistory ( ) ,
715717 context : session . context ?? [ ] ,
716718 relevantTextDocuments : [ ] ,
717719 additionalContents : [ ] ,
@@ -887,10 +889,16 @@ export class ChatController {
887889 errorMessage = e . message
888890 }
889891
892+ // Turn off AgentLoop flag in case of exception
893+ if ( tabID ) {
894+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
895+ }
896+
890897 this . messenger . sendErrorMessage ( errorMessage , tabID , requestID )
891898 getLogger ( ) . error ( `error: ${ errorMessage } tabID: ${ tabID } requestID: ${ requestID } ` )
892899
893900 this . sessionStorage . deleteSession ( tabID )
901+ this . chatHistoryStorage . getTabHistory ( tabID ) . clearRecentHistory ( )
894902 }
895903
896904 private async processContextMenuCommand ( command : EditorContextCommand ) {
@@ -1050,7 +1058,6 @@ export class ChatController {
10501058 codeQuery : lastTriggerEvent . context ?. focusAreaContext ?. names ,
10511059 userIntent : message . userIntent ,
10521060 customization : getSelectedCustomization ( ) ,
1053- chatHistory : this . chatHistoryStorage . getTabHistory ( message . tabID ) . getHistory ( ) ,
10541061 contextLengths : {
10551062 ...defaultContextLengths ,
10561063 } ,
@@ -1099,7 +1106,6 @@ export class ChatController {
10991106 codeQuery : context ?. focusAreaContext ?. names ,
11001107 userIntent : this . userIntentRecognizer . getFromPromptChatMessage ( message ) ,
11011108 customization : getSelectedCustomization ( ) ,
1102- chatHistory : this . chatHistoryStorage . getTabHistory ( message . tabID ) . getHistory ( ) ,
11031109 origin : Origin . IDE ,
11041110 context : message . context ?? [ ] ,
11051111 relevantTextDocuments : [ ] ,
@@ -1281,6 +1287,16 @@ export class ChatController {
12811287 }
12821288
12831289 const tabID = triggerEvent . tabID
1290+ if ( this . sessionStorage . isAgentLoopInProgress ( tabID ) ) {
1291+ // If a response is already in progress, stop it first
1292+ const stopResponseMessage : StopResponseMessage = {
1293+ tabID : tabID ,
1294+ }
1295+ await this . processStopResponseMessage ( stopResponseMessage )
1296+ }
1297+
1298+ // Ensure AgentLoop flag is set to true during response generation
1299+ this . sessionStorage . setAgentLoopInProgress ( tabID , true )
12841300
12851301 const credentialsState = await AuthUtil . instance . getChatAuthState ( )
12861302
@@ -1343,6 +1359,7 @@ export class ChatController {
13431359 if ( fixedHistoryMessage . userInputMessage ?. userInputMessageContext ) {
13441360 triggerPayload . toolResults = fixedHistoryMessage . userInputMessage . userInputMessageContext . toolResults
13451361 }
1362+ triggerPayload . chatHistory = chatHistory . getHistory ( )
13461363 const request = triggerPayloadToChatRequest ( triggerPayload )
13471364 const conversationId = chatHistory . getConversationId ( ) || randomUUID ( )
13481365 chatHistory . setConversationId ( conversationId )
@@ -1405,8 +1422,13 @@ export class ChatController {
14051422 } metadata: ${ inspect ( response . $metadata , { depth : 12 } ) } `
14061423 )
14071424 await this . messenger . sendAIResponse ( response , session , tabID , triggerID , triggerPayload , chatHistory )
1425+
1426+ // Turn off AgentLoop flag after sending the AI response
1427+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
14081428 } catch ( e : any ) {
14091429 this . telemetryHelper . recordMessageResponseError ( triggerPayload , tabID , getHttpStatusCode ( e ) ?? 0 )
1430+ // Turn off AgentLoop flag in case of exception
1431+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
14101432 // clears session, record telemetry before this call
14111433 this . processException ( e , tabID )
14121434 }
0 commit comments