in packages/core/src/amazonqFeatureDev/controllers/chat/controller.ts [105:209]
public constructor(
private readonly chatControllerMessageListeners: ChatControllerEventEmitters,
messenger: Messenger,
sessionStorage: BaseChatSessionStorage<Session>,
onDidChangeAmazonQVisibility: vscode.Event<boolean>
) {
this.messenger = messenger
this.sessionStorage = sessionStorage
this.authController = new AuthController()
this.contentController = new EditorContentController()
/**
* defaulted to true because onDidChangeAmazonQVisibility doesn't get fire'd until after
* the view is opened
*/
this.isAmazonQVisible = true
onDidChangeAmazonQVisibility((visible) => {
this.isAmazonQVisible = visible
})
this.chatControllerMessageListeners.processHumanChatMessage.event((data) => {
this.processUserChatMessage(data).catch((e) => {
getLogger().error('processUserChatMessage failed: %s', (e as Error).message)
})
})
this.chatControllerMessageListeners.processChatItemVotedMessage.event((data) => {
this.processChatItemVotedMessage(data.tabID, data.vote).catch((e) => {
getLogger().error('processChatItemVotedMessage failed: %s', (e as Error).message)
})
})
this.chatControllerMessageListeners.processChatItemFeedbackMessage.event((data) => {
this.processChatItemFeedbackMessage(data).catch((e) => {
getLogger().error('processChatItemFeedbackMessage failed: %s', (e as Error).message)
})
})
this.chatControllerMessageListeners.followUpClicked.event((data) => {
switch (data.followUp.type) {
case FollowUpTypes.InsertCode:
return this.insertCode(data)
case FollowUpTypes.ProvideFeedbackAndRegenerateCode:
return this.provideFeedbackAndRegenerateCode(data)
case FollowUpTypes.Retry:
return this.retryRequest(data)
case FollowUpTypes.ModifyDefaultSourceFolder:
return this.modifyDefaultSourceFolder(data)
case FollowUpTypes.DevExamples:
this.initialExamples(data)
break
case FollowUpTypes.NewTask:
this.messenger.sendAnswer({
type: 'answer',
tabID: data?.tabID,
message: i18n('AWS.amazonq.featureDev.answer.newTaskChanges'),
})
return this.newTask(data)
case FollowUpTypes.CloseSession:
return this.closeSession(data)
case FollowUpTypes.SendFeedback:
this.sendFeedback()
break
case FollowUpTypes.AcceptAutoBuild:
return this.processAutoBuildSetting(true, data)
case FollowUpTypes.DenyAutoBuild:
return this.processAutoBuildSetting(false, data)
case FollowUpTypes.GenerateDevFile:
this.messenger.sendAnswer({
type: 'system-prompt',
tabID: data?.tabID,
message: i18n('AWS.amazonq.featureDev.pillText.generateDevFile'),
})
return this.newTask(data, generateDevFilePrompt)
}
})
this.chatControllerMessageListeners.openDiff.event((data) => {
return this.openDiff(data)
})
this.chatControllerMessageListeners.stopResponse.event((data) => {
return this.stopResponse(data)
})
this.chatControllerMessageListeners.tabOpened.event((data) => {
return this.tabOpened(data)
})
this.chatControllerMessageListeners.tabClosed.event((data) => {
this.tabClosed(data)
})
this.chatControllerMessageListeners.authClicked.event((data) => {
this.authClicked(data)
})
this.chatControllerMessageListeners.processResponseBodyLinkClick.event((data) => {
this.processLink(data)
})
this.chatControllerMessageListeners.insertCodeAtPositionClicked.event((data) => {
this.insertCodeAtPosition(data)
})
this.chatControllerMessageListeners.fileClicked.event(async (data) => {
return await this.fileClicked(data)
})
this.chatControllerMessageListeners.storeCodeResultMessageId.event(async (data) => {
return await this.storeCodeResultMessageId(data)
})
AuthUtil.instance.regionProfileManager.onDidChangeRegionProfile(() => {
this.sessionStorage.deleteAllSessions()
})
}