diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt index 004ce776b0a..e4f728fe745 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt @@ -18,6 +18,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.future.await import kotlinx.coroutines.launch import org.cef.browser.CefBrowser import org.eclipse.lsp4j.Position @@ -50,6 +51,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_READY import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SOURCE_LINK_CLICK import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_ADD +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_BAR_ACTIONS import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_CHANGE import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_REMOVE import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatNotification @@ -69,6 +71,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileC import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileClickParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickNotification import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResponse import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickNotification import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionNotification @@ -83,6 +87,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickNotification import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionRequest import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventRequest import software.aws.toolkits.jetbrains.services.amazonq.util.command @@ -222,7 +228,7 @@ class BrowserConnector( requestFromUi.params.tabId, chatPrompt, textDocumentIdentifier, - cursorState + cursorState, ) val tabId = requestFromUi.params.tabId @@ -339,6 +345,24 @@ class BrowserConnector( } } + GET_SERIALIZED_CHAT_REQUEST_METHOD -> { + val response = serializer.deserializeChatMessages(node) + ChatCommunicationManager.completeSerializedChatResponse( + response.requestId, + response.params.result.content + ) + } + + CHAT_TAB_BAR_ACTIONS -> { + handleChatNotification(node) { + server, params -> + val result = server.tabBarActions(params) + result.whenComplete { params1, error -> + val res = ChatCommunicationManager.convertNotificationToJsonForChat(CHAT_TAB_BAR_ACTIONS, params1) + browser.postChat(res) + } + } + } CHAT_CREATE_PROMPT -> { handleChatNotification(node) { server, params -> diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClient.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClient.kt index 1936ad0a606..a7dad74b179 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClient.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClient.kt @@ -8,8 +8,14 @@ import org.eclipse.lsp4j.jsonrpc.services.JsonRequest import org.eclipse.lsp4j.services.LanguageClient import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatUpdateParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata import java.util.concurrent.CompletableFuture @@ -24,6 +30,12 @@ interface AmazonQLanguageClient : LanguageClient { @JsonRequest("aws/chat/openTab") fun openTab(params: OpenTabParams): CompletableFuture + @JsonRequest(SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD) + fun showSaveFileDialog(params: ShowSaveFileDialogParams): CompletableFuture + + @JsonRequest(GET_SERIALIZED_CHAT_REQUEST_METHOD) + fun getSerializedChat(params: GetSerializedChatParams): CompletableFuture + @JsonNotification(CHAT_SEND_UPDATE) fun sendChatUpdate(params: ChatUpdateParams): CompletableFuture } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt index afc90346e52..ea23698aef6 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt @@ -1,12 +1,13 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 - @file:Suppress("BannedImports") package software.aws.toolkits.jetbrains.services.amazonq.lsp import com.google.gson.Gson import com.intellij.notification.NotificationType import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.fileChooser.FileChooserFactory +import com.intellij.openapi.fileChooser.FileSaverDescriptor import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFileManager @@ -29,13 +30,20 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatU import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatUpdateParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings +import java.util.UUID import java.util.concurrent.CompletableFuture +import java.util.concurrent.TimeUnit /** * Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server @@ -116,6 +124,59 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC // TODO implement chat history, this is here to unblock chat functionality CompletableFuture.completedFuture(OpenTabResult("")) + override fun showSaveFileDialog(params: ShowSaveFileDialogParams): CompletableFuture { + val filters = mutableListOf() + val formatMappings = mapOf("markdown" to "md", "html" to "html") + + params.supportedFormats.forEach { format -> + formatMappings[format]?.let { filters.add(it) } + } + val defaultUri = params.defaultUri ?: "export-chat.md" + val saveAtUri = defaultUri.substring(defaultUri.lastIndexOf("/")) + return CompletableFuture.supplyAsync( + { + val descriptor = FileSaverDescriptor("Export", "Choose a location to export").apply { + withFileFilter { file -> + filters.any { ext -> + file.name.endsWith(".$ext") + } + } + } + + val chosenFile = FileChooserFactory.getInstance().createSaveFileDialog(descriptor, project).save(saveAtUri) + + chosenFile?.let { + ShowSaveFileDialogResult(chosenFile.file.path) + // TODO: Add error state shown in chat ui instead of throwing + } ?: throw Error("Export failed") + }, + ApplicationManager.getApplication()::invokeLater + ) + } + + override fun getSerializedChat(params: GetSerializedChatParams): CompletableFuture { + val requestId = UUID.randomUUID().toString() + val result = CompletableFuture() + + ChatCommunicationManager.pendingSerializedChatRequests[requestId] = result + + val uiMessage = """ + { + "command": "$GET_SERIALIZED_CHAT_REQUEST_METHOD", + "params": ${Gson().toJson(params)}, + "requestId": "$requestId" + } + """.trimIndent() + AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage) + + result.orTimeout(30000, TimeUnit.MILLISECONDS) + .whenComplete { _, error -> + ChatCommunicationManager.pendingSerializedChatRequests.remove(requestId) + } + + return result + } + override fun configuration(params: ConfigurationParams): CompletableFuture> { if (params.items.isEmpty()) { return CompletableFuture.completedFuture(null) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageServer.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageServer.kt index cb31a47a5db..7f02ed89abc 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageServer.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageServer.kt @@ -25,6 +25,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_READY import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SOURCE_LINK_CLICK import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_ADD +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_BAR_ACTIONS import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_CHANGE import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_REMOVE import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CopyCodeToClipboardParams @@ -34,6 +35,9 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Encry import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FeedbackParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileClickParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams @@ -41,6 +45,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMP import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams @@ -114,6 +120,12 @@ interface AmazonQLanguageServer : LanguageServer { @JsonRequest(CHAT_BUTTON_CLICK) fun buttonClick(params: ButtonClickParams): CompletableFuture + @JsonRequest(CHAT_TAB_BAR_ACTIONS) + fun tabBarActions(params: TabBarActionParams): CompletableFuture + + @JsonRequest(GET_SERIALIZED_CHAT_REQUEST_METHOD) + fun getSerializedActions(params: GetSerializedChatParams): CompletableFuture + @JsonNotification(CHAT_CREATE_PROMPT) fun createPrompt(params: CreatePromptParams): CompletableFuture } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/ChatCommunicationManager.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/ChatCommunicationManager.kt index 1ee2c52fc92..c0fe93ef98f 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/ChatCommunicationManager.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/ChatCommunicationManager.kt @@ -1,16 +1,19 @@ // Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 - +@file:Suppress("BannedImports") package software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat +import com.google.gson.Gson import com.intellij.openapi.components.Service import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import org.eclipse.lsp4j.ProgressParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ProgressNotificationUtils.getObject +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT import java.util.UUID +import java.util.concurrent.CompletableFuture import java.util.concurrent.ConcurrentHashMap @Service(Service.Level.PROJECT) @@ -56,6 +59,11 @@ class ChatCommunicationManager { companion object { fun getInstance(project: Project) = project.service() + val pendingSerializedChatRequests = ConcurrentHashMap>() + fun completeSerializedChatResponse(requestId: String, content: String) { + pendingSerializedChatRequests.remove(requestId)?.complete(GetSerializedChatResult((content))) + } + fun convertToJsonToSendToChat(command: String, tabId: String, params: String, isPartialResult: Boolean): String = """ { @@ -65,5 +73,13 @@ class ChatCommunicationManager { "isPartialResult": $isPartialResult } """.trimIndent() + + inline fun convertNotificationToJsonForChat(command: String, params: T? = null) = + """ + { + "command":"$command", + "params": ${if (params != null) Gson().toJson(params) else "{}"} + } + """.trimIndent() } } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/ExtendedClientMetadata.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/ExtendedClientMetadata.kt index b25150c36bb..ab390212952 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/ExtendedClientMetadata.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/ExtendedClientMetadata.kt @@ -16,12 +16,17 @@ data class AwsMetadata( data class AwsClientCapabilities( val q: DeveloperProfiles, + val window: WindowSettings, ) data class DeveloperProfiles( val developerProfiles: Boolean, ) +data class WindowSettings( + val showSaveFileDialog: Boolean, +) + data class ClientInfoMetadata( val extension: ExtensionMetadata, val clientId: String, @@ -50,6 +55,9 @@ fun createExtendedClientMetadata(): ExtendedClientMetadata { awsClientCapabilities = AwsClientCapabilities( q = DeveloperProfiles( developerProfiles = true + ), + window = WindowSettings( + showSaveFileDialog = true ) ) ) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ChatPrompt.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ChatPrompt.kt index 79704888817..3e5f430c17a 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ChatPrompt.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ChatPrompt.kt @@ -32,5 +32,5 @@ data class InnerChatPrompt( data class InnerChatOptions( @JsonProperty("pair-programmer-mode") - val pairProgrammingMode: String, + val pairProgrammingMode: String?, ) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/FlareChatCommands.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/FlareChatCommands.kt index 8b296952ded..1bb22333a4e 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/FlareChatCommands.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/FlareChatCommands.kt @@ -24,5 +24,8 @@ const val CHAT_COPY_CODE_TO_CLIPBOARD = "copyToClipboard" const val CHAT_COPY_CODE_TO_CLIPBOARD_NOTIFICATION = "aws/chat/copyCodeToClipboard" const val CHAT_INSERT_TO_CURSOR = "insertToCursorPosition" const val CHAT_INSERT_TO_CURSOR_NOTIFICATION = "aws/chat/insertToCursorPosition" +const val CHAT_TAB_BAR_ACTIONS = "aws/chat/tabBarAction" const val CHAT_SEND_UPDATE = "aws/chat/sendChatUpdate" const val CHAT_CREATE_PROMPT = "aws/chat/createPrompt" +const val SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD = "aws/showSaveFileDialog" +const val GET_SERIALIZED_CHAT_REQUEST_METHOD = "aws/chat/getSerializedChat" diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/GetSerializedChatParams.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/GetSerializedChatParams.kt new file mode 100644 index 00000000000..d8750e9d591 --- /dev/null +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/GetSerializedChatParams.kt @@ -0,0 +1,44 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat + +data class GetSerializedChatParams( + val tabId: String, + val format: String, +) { + companion object { + fun create(tabId: String, format: SerializedChatFormat): GetSerializedChatParams = + GetSerializedChatParams(tabId, format.value) + } +} + +enum class SerializedChatFormat(val value: String) { + HTML("html"), + MARKDOWN("markdown"), + ; + + override fun toString(): String = + name.lowercase() +} + +data class GetSerializedChatResult( + val content: String, +) + +data class GetSerializedChatRequest( + val requestId: String, + override val command: String, + override val params: GetSerializedChatParams, +) : ChatNotification + +data class GetSerializedChatResponseParams( + val success: Boolean, + val result: GetSerializedChatResult, +) + +data class GetSerializedChatResponse( + val requestId: String, + val command: String, + val params: GetSerializedChatResponseParams, +) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ShowSaveFileDialogParams.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ShowSaveFileDialogParams.kt new file mode 100644 index 00000000000..56d4d3c66ea --- /dev/null +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ShowSaveFileDialogParams.kt @@ -0,0 +1,13 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat + +data class ShowSaveFileDialogParams( + val supportedFormats: List, + val defaultUri: String?, +) + +data class ShowSaveFileDialogResult( + val targetUri: String, +) diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/TabBarActionParams.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/TabBarActionParams.kt new file mode 100644 index 00000000000..1bbc445115c --- /dev/null +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/TabBarActionParams.kt @@ -0,0 +1,31 @@ +// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat + +data class TabBarActionParams( + val tabId: String?, + val action: String, +) { + companion object { + fun create(tabId: String?, action: TabBarAction): TabBarActionParams = + TabBarActionParams(tabId, action.value) + } +} + +enum class TabBarAction(val value: String) { + EXPORT("export"), + ; + + override fun toString(): String = + name.lowercase() +} + +data class TabBarActionResult( + val success: Boolean, +) + +data class TabBarActionRequest( + override val command: String, + override val params: TabBarActionParams, +) : ChatNotification