@@ -82,7 +82,6 @@ import {
8282 createSavedPromptCommandId ,
8383 aditionalContentNameLimit ,
8484 additionalContentInnerContextLimit ,
85- tools ,
8685 workspaceChunkMaxSize ,
8786 defaultContextLengths ,
8887} from '../../constants'
@@ -368,6 +367,7 @@ export class ChatController {
368367 private async processStopResponseMessage ( message : StopResponseMessage ) {
369368 const session = this . sessionStorage . getSession ( message . tabID )
370369 session . tokenSource . cancel ( )
370+ this . chatHistoryStorage . getTabHistory ( message . tabID ) . clearRecentHistory ( )
371371 }
372372
373373 private async processTriggerTabIDReceived ( message : TriggerTabIDReceived ) {
@@ -650,6 +650,8 @@ export class ChatController {
650650 const session = this . sessionStorage . getSession ( tabID )
651651 const toolUse = session . toolUse
652652 if ( ! toolUse || ! toolUse . input ) {
653+ // Turn off AgentLoop flag if there's no tool use
654+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
653655 return
654656 }
655657 session . setToolUse ( undefined )
@@ -723,7 +725,6 @@ export class ChatController {
723725 customization : getSelectedCustomization ( ) ,
724726 toolResults : toolResults ,
725727 origin : Origin . IDE ,
726- chatHistory : this . chatHistoryStorage . getTabHistory ( tabID ) . getHistory ( ) ,
727728 context : session . context ?? [ ] ,
728729 relevantTextDocuments : [ ] ,
729730 additionalContents : [ ] ,
@@ -899,10 +900,16 @@ export class ChatController {
899900 errorMessage = e . message
900901 }
901902
903+ // Turn off AgentLoop flag in case of exception
904+ if ( tabID ) {
905+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
906+ }
907+
902908 this . messenger . sendErrorMessage ( errorMessage , tabID , requestID )
903909 getLogger ( ) . error ( `error: ${ errorMessage } tabID: ${ tabID } requestID: ${ requestID } ` )
904910
905911 this . sessionStorage . deleteSession ( tabID )
912+ this . chatHistoryStorage . getTabHistory ( tabID ) . clearRecentHistory ( )
906913 }
907914
908915 private async processContextMenuCommand ( command : EditorContextCommand ) {
@@ -1062,7 +1069,6 @@ export class ChatController {
10621069 codeQuery : lastTriggerEvent . context ?. focusAreaContext ?. names ,
10631070 userIntent : message . userIntent ,
10641071 customization : getSelectedCustomization ( ) ,
1065- chatHistory : this . chatHistoryStorage . getTabHistory ( message . tabID ) . getHistory ( ) ,
10661072 contextLengths : {
10671073 ...defaultContextLengths ,
10681074 } ,
@@ -1111,7 +1117,6 @@ export class ChatController {
11111117 codeQuery : context ?. focusAreaContext ?. names ,
11121118 userIntent : undefined ,
11131119 customization : getSelectedCustomization ( ) ,
1114- chatHistory : this . chatHistoryStorage . getTabHistory ( message . tabID ) . getHistory ( ) ,
11151120 origin : Origin . IDE ,
11161121 context : message . context ?? [ ] ,
11171122 relevantTextDocuments : [ ] ,
@@ -1293,6 +1298,16 @@ export class ChatController {
12931298 }
12941299
12951300 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 )
12961311
12971312 const credentialsState = await AuthUtil . instance . getChatAuthState ( )
12981313
@@ -1339,23 +1354,15 @@ export class ChatController {
13391354 triggerPayload . contextLengths . userInputContextLength = triggerPayload . message . length
13401355 triggerPayload . contextLengths . focusFileContextLength = triggerPayload . fileText . length
13411356
1357+ const request = triggerPayloadToChatRequest ( triggerPayload )
1358+
13421359 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 )
13531363 }
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+
13591366 const conversationId = chatHistory . getConversationId ( ) || randomUUID ( )
13601367 chatHistory . setConversationId ( conversationId )
13611368 request . conversationState . conversationId = conversationId
@@ -1409,16 +1416,23 @@ export class ChatController {
14091416 }
14101417 this . telemetryHelper . recordEnterFocusConversation ( triggerEvent . tabID )
14111418 this . telemetryHelper . recordStartConversation ( triggerEvent , triggerPayload )
1412- chatHistory . appendUserMessage ( fixedHistoryMessage )
1419+ if ( currentMessage ) {
1420+ chatHistory . appendUserMessage ( currentMessage )
1421+ }
14131422
14141423 getLogger ( ) . info (
14151424 `response to tab: ${ tabID } conversationID: ${ session . sessionIdentifier } requestID: ${
14161425 response . $metadata . requestId
14171426 } metadata: ${ inspect ( response . $metadata , { depth : 12 } ) } `
14181427 )
14191428 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 )
14201432 } catch ( e : any ) {
14211433 this . telemetryHelper . recordMessageResponseError ( triggerPayload , tabID , getHttpStatusCode ( e ) ?? 0 )
1434+ // Turn off AgentLoop flag in case of exception
1435+ this . sessionStorage . setAgentLoopInProgress ( tabID , false )
14221436 // clears session, record telemetry before this call
14231437 this . processException ( e , tabID )
14241438 }
0 commit comments