@@ -87,11 +87,11 @@ import {
8787 defaultContextLengths ,
8888} from '../../constants'
8989import { ChatSession } from '../../clients/chat/v0/chat'
90- import { ChatHistoryManager } from '../../storages/chatHistory'
9190import { amazonQTabSuffix } from '../../../shared/constants'
9291import { OutputKind } from '../../tools/toolShared'
9392import { ToolUtils , Tool , ToolType } from '../../tools/toolUtils'
9493import { ChatStream } from '../../tools/chatStream'
94+ import { ChatHistoryStorage } from '../../storages/chatHistoryStorage'
9595import { FsWrite , FsWriteParams } from '../../tools/fsWrite'
9696import { tempDirPath } from '../../../shared/filesystemUtilities'
9797
@@ -155,7 +155,7 @@ export class ChatController {
155155 private readonly userIntentRecognizer : UserIntentRecognizer
156156 private readonly telemetryHelper : CWCTelemetryHelper
157157 private userPromptsWatcher : vscode . FileSystemWatcher | undefined
158- private readonly chatHistoryManager : ChatHistoryManager
158+ private readonly chatHistoryStorage : ChatHistoryStorage
159159
160160 public constructor (
161161 private readonly chatControllerMessageListeners : ChatControllerMessageListeners ,
@@ -173,7 +173,7 @@ export class ChatController {
173173 this . editorContentController = new EditorContentController ( )
174174 this . promptGenerator = new PromptsGenerator ( )
175175 this . userIntentRecognizer = new UserIntentRecognizer ( )
176- this . chatHistoryManager = new ChatHistoryManager ( )
176+ this . chatHistoryStorage = new ChatHistoryStorage ( )
177177
178178 onDidChangeAmazonQVisibility ( ( visible ) => {
179179 if ( visible ) {
@@ -424,7 +424,7 @@ export class ChatController {
424424
425425 private async processTabCloseMessage ( message : TabClosedMessage ) {
426426 this . sessionStorage . deleteSession ( message . tabID )
427- this . chatHistoryManager . clear ( )
427+ this . chatHistoryStorage . deleteHistory ( message . tabID )
428428 this . triggerEventsStorage . removeTabEvents ( message . tabID )
429429 // this.telemetryHelper.recordCloseChat(message.tabID)
430430 }
@@ -711,7 +711,7 @@ export class ChatController {
711711 customization : getSelectedCustomization ( ) ,
712712 toolResults : toolResults ,
713713 origin : Origin . IDE ,
714- chatHistory : this . chatHistoryManager . getHistory ( ) ,
714+ chatHistory : this . chatHistoryStorage . getTabHistory ( tabID ) . getHistory ( ) ,
715715 context : session . context ?? [ ] ,
716716 relevantTextDocuments : [ ] ,
717717 additionalContents : [ ] ,
@@ -891,7 +891,6 @@ export class ChatController {
891891 getLogger ( ) . error ( `error: ${ errorMessage } tabID: ${ tabID } requestID: ${ requestID } ` )
892892
893893 this . sessionStorage . deleteSession ( tabID )
894- this . chatHistoryManager . clear ( )
895894 }
896895
897896 private async processContextMenuCommand ( command : EditorContextCommand ) {
@@ -965,7 +964,6 @@ export class ChatController {
965964 codeQuery : context ?. focusAreaContext ?. names ,
966965 userIntent : this . userIntentRecognizer . getFromContextMenuCommand ( command ) ,
967966 customization : getSelectedCustomization ( ) ,
968- chatHistory : this . chatHistoryManager . getHistory ( ) ,
969967 additionalContents : [ ] ,
970968 relevantTextDocuments : [ ] ,
971969 documentReferences : [ ] ,
@@ -1013,7 +1011,7 @@ export class ChatController {
10131011 switch ( message . command ) {
10141012 case 'clear' :
10151013 this . sessionStorage . deleteSession ( message . tabID )
1016- this . chatHistoryManager . clear ( )
1014+ this . chatHistoryStorage . getTabHistory ( message . tabID ) . clear ( )
10171015 this . triggerEventsStorage . removeTabEvents ( message . tabID )
10181016 recordTelemetryChatRunCommand ( 'clear' )
10191017 return
@@ -1052,7 +1050,7 @@ export class ChatController {
10521050 codeQuery : lastTriggerEvent . context ?. focusAreaContext ?. names ,
10531051 userIntent : message . userIntent ,
10541052 customization : getSelectedCustomization ( ) ,
1055- chatHistory : this . chatHistoryManager . getHistory ( ) ,
1053+ chatHistory : this . chatHistoryStorage . getTabHistory ( message . tabID ) . getHistory ( ) ,
10561054 contextLengths : {
10571055 ...defaultContextLengths ,
10581056 } ,
@@ -1101,7 +1099,7 @@ export class ChatController {
11011099 codeQuery : context ?. focusAreaContext ?. names ,
11021100 userIntent : this . userIntentRecognizer . getFromPromptChatMessage ( message ) ,
11031101 customization : getSelectedCustomization ( ) ,
1104- chatHistory : this . chatHistoryManager . getHistory ( ) ,
1102+ chatHistory : this . chatHistoryStorage . getTabHistory ( message . tabID ) . getHistory ( ) ,
11051103 origin : Origin . IDE ,
11061104 context : message . context ?? [ ] ,
11071105 relevantTextDocuments : [ ] ,
@@ -1328,16 +1326,28 @@ export class ChatController {
13281326
13291327 triggerPayload . contextLengths . userInputContextLength = triggerPayload . message . length
13301328 triggerPayload . contextLengths . focusFileContextLength = triggerPayload . fileText . length
1331- const request = triggerPayloadToChatRequest ( triggerPayload )
1332- if (
1333- this . chatHistoryManager . getConversationId ( ) !== undefined &&
1334- this . chatHistoryManager . getConversationId ( ) !== ''
1335- ) {
1336- request . conversationState . conversationId = this . chatHistoryManager . getConversationId ( )
1337- } else {
1338- this . chatHistoryManager . setConversationId ( randomUUID ( ) )
1339- request . conversationState . conversationId = this . chatHistoryManager . getConversationId ( )
1329+
1330+ const chatHistory = this . chatHistoryStorage . getTabHistory ( tabID )
1331+ const newUserMessage = {
1332+ userInputMessage : {
1333+ content : triggerPayload . message ,
1334+ userIntent : triggerPayload . userIntent ,
1335+ ...( triggerPayload . origin && { origin : triggerPayload . origin } ) ,
1336+ userInputMessageContext : {
1337+ tools : tools ,
1338+ ...( triggerPayload . toolResults && { toolResults : triggerPayload . toolResults } ) ,
1339+ } ,
1340+ } ,
1341+ }
1342+ const fixedHistoryMessage = chatHistory . fixHistory ( newUserMessage )
1343+ if ( fixedHistoryMessage . userInputMessage ?. userInputMessageContext ) {
1344+ triggerPayload . toolResults = fixedHistoryMessage . userInputMessage . userInputMessageContext . toolResults
13401345 }
1346+ const request = triggerPayloadToChatRequest ( triggerPayload )
1347+ const conversationId = chatHistory . getConversationId ( ) || randomUUID ( )
1348+ chatHistory . setConversationId ( conversationId )
1349+ request . conversationState . conversationId = conversationId
1350+
13411351 triggerPayload . documentReferences = this . mergeRelevantTextDocuments ( triggerPayload . relevantTextDocuments )
13421352
13431353 // Update context transparency after it's truncated dynamically to show users only the context sent.
@@ -1387,32 +1397,14 @@ export class ChatController {
13871397 }
13881398 this . telemetryHelper . recordEnterFocusConversation ( triggerEvent . tabID )
13891399 this . telemetryHelper . recordStartConversation ( triggerEvent , triggerPayload )
1390-
1391- this . chatHistoryManager . appendUserMessage ( {
1392- userInputMessage : {
1393- content : triggerPayload . message ,
1394- userIntent : triggerPayload . userIntent ,
1395- ...( triggerPayload . origin && { origin : triggerPayload . origin } ) ,
1396- userInputMessageContext : {
1397- tools : tools ,
1398- ...( triggerPayload . toolResults && { toolResults : triggerPayload . toolResults } ) ,
1399- } ,
1400- } ,
1401- } )
1400+ chatHistory . appendUserMessage ( fixedHistoryMessage )
14021401
14031402 getLogger ( ) . info (
14041403 `response to tab: ${ tabID } conversationID: ${ session . sessionIdentifier } requestID: ${
14051404 response . $metadata . requestId
14061405 } metadata: ${ inspect ( response . $metadata , { depth : 12 } ) } `
14071406 )
1408- await this . messenger . sendAIResponse (
1409- response ,
1410- session ,
1411- tabID ,
1412- triggerID ,
1413- triggerPayload ,
1414- this . chatHistoryManager
1415- )
1407+ await this . messenger . sendAIResponse ( response , session , tabID , triggerID , triggerPayload , chatHistory )
14161408 } catch ( e : any ) {
14171409 this . telemetryHelper . recordMessageResponseError ( triggerPayload , tabID , getHttpStatusCode ( e ) ?? 0 )
14181410 // clears session, record telemetry before this call
0 commit comments