11// Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22// SPDX-License-Identifier: Apache-2.0
3-
3+ @file:Suppress( " BannedImports " )
44package software.aws.toolkits.jetbrains.services.amazonq.webview
55
66import com.fasterxml.jackson.databind.JsonNode
7+ import com.google.gson.Gson
78import com.intellij.ide.BrowserUtil
89import com.intellij.ide.util.RunOnceUtil
910import com.intellij.openapi.project.Project
@@ -28,6 +29,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.commands.MessageSerializ
2829import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
2930import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
3031import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
32+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
3133import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
3234import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.getTextDocumentIdentifier
3335import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ButtonClickNotification
@@ -36,6 +38,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Butto
3638import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_BUTTON_CLICK
3739import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_COPY_CODE_TO_CLIPBOARD
3840import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FEEDBACK
41+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FILE_CLICK
3942import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FOLLOW_UP_CLICK
4043import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK
4144import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INSERT_TO_CURSOR
@@ -58,6 +61,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Encry
5861import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
5962import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FeedbackNotification
6063import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FeedbackParams
64+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileClickNotification
65+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileClickParams
6166import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickNotification
6267import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickParams
6368import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickNotification
@@ -146,6 +151,14 @@ class BrowserConnector(
146151 // Wait for UI ready before starting to send messages to the UI.
147152 uiReady.await()
148153
154+ // Chat options including history and quick actions need to be sent in once UI is ready
155+ val showChatOptions = """ {
156+ "command": "chatOptions",
157+ "params": ${Gson ().toJson(AwsServerCapabilitiesProvider .getInstance(project).getChatOptions())}
158+ }
159+ """ .trimIndent()
160+ browser.postChat(showChatOptions)
161+
149162 // Send inbound messages to the browser
150163 val inboundMessages = connections.map { it.messagesFromAppToUi.flow }.merge()
151164 inboundMessages
@@ -277,33 +290,33 @@ class BrowserConnector(
277290 server.linkClick(params)
278291 }
279292 }
280-
281293 CHAT_INFO_LINK_CLICK -> {
282294 handleChatNotification<InfoLinkClickNotification , InfoLinkClickParams >(node) { server, params ->
283295 server.infoLinkClick(params)
284296 }
285297 }
286-
287298 CHAT_SOURCE_LINK_CLICK -> {
288299 handleChatNotification<SourceLinkClickNotification , SourceLinkClickParams >(node) { server, params ->
289300 server.sourceLinkClick(params)
290301 }
291302 }
292-
303+ CHAT_FILE_CLICK -> {
304+ handleChatNotification<FileClickNotification , FileClickParams >(node) { server, params ->
305+ server.fileClick(params)
306+ }
307+ }
293308 PROMPT_INPUT_OPTIONS_CHANGE -> {
294309 handleChatNotification<PromptInputOptionChangeNotification , PromptInputOptionChangeParams >(node) {
295310 server, params ->
296311 server.promptInputOptionsChange(params)
297312 }
298313 }
299-
300314 CHAT_PROMPT_OPTION_ACKNOWLEDGED -> {
301315 val acknowledgedMessage = node.get(" params" ).get(" messageId" )
302316 if (acknowledgedMessage.asText() == " programmerModeCardId" ) {
303317 MeetQSettings .getInstance().amazonQChatPairProgramming = false
304318 }
305319 }
306-
307320 CHAT_FOLLOW_UP_CLICK -> {
308321 handleChatNotification<FollowUpClickNotification , FollowUpClickParams >(node) { server, params ->
309322 server.followUpClick(params)
0 commit comments