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 5cb296926f4..fe00aa835d6 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 @@ -6,6 +6,8 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp import org.eclipse.lsp4j.jsonrpc.services.JsonNotification import org.eclipse.lsp4j.jsonrpc.services.JsonRequest import org.eclipse.lsp4j.services.LanguageClient +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LSPAny +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_CONTEXT_COMMANDS 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 @@ -43,4 +45,7 @@ interface AmazonQLanguageClient : LanguageClient { @JsonNotification(OPEN_FILE_DIFF) fun openFileDiff(params: OpenFileDiffParams): CompletableFuture + + @JsonNotification(CHAT_SEND_CONTEXT_COMMANDS) + fun sendContextCommands(params: LSPAny): 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 45bd77b8749..aecf8692113 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 @@ -33,7 +33,9 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatUiListener import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LSPAny import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_OPEN_TAB +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_CONTEXT_COMMANDS 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 @@ -340,6 +342,19 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC ApplicationManager.getApplication()::invokeLater ) + override fun sendContextCommands(params: LSPAny): CompletableFuture { + val showContextCommands = """ + { + "command":"$CHAT_SEND_CONTEXT_COMMANDS", + "params": ${Gson().toJson(params)} + } + """.trimIndent() + + AsyncChatUiListener.notifyPartialMessageUpdate(showContextCommands) + + return CompletableFuture.completedFuture(Unit) + } + companion object { private val LOG = getLogger() } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt index 7de94a494f7..97c56e80cdb 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt @@ -3,7 +3,6 @@ @file:Suppress("BannedImports") package software.aws.toolkits.jetbrains.services.amazonq.lsp -import com.google.gson.Gson import com.google.gson.ToNumberPolicy import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.execution.impl.ExecutionManagerImpl @@ -44,7 +43,6 @@ import org.eclipse.lsp4j.WorkspaceClientCapabilities import org.eclipse.lsp4j.jsonrpc.Launcher import org.eclipse.lsp4j.jsonrpc.Launcher.Builder import org.eclipse.lsp4j.jsonrpc.MessageConsumer -import org.eclipse.lsp4j.jsonrpc.messages.NotificationMessage import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage import org.eclipse.lsp4j.launch.LSPLauncher import org.slf4j.event.Level @@ -57,7 +55,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.auth.DefaultAuthCred import software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.DefaultModuleDependenciesService import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AmazonQLspTypeAdapterFactory -import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatUiListener import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsExtendedInitializeResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.createExtendedClientMetadata @@ -282,23 +279,12 @@ private class AmazonQServerInstance(private val project: Project, private val cs launcher = LSPLauncher.Builder() .wrapMessages { consumer -> - MessageConsumer { - message -> + MessageConsumer { message -> if (message is ResponseMessage && message.result is AwsExtendedInitializeResult) { val result = message.result as AwsExtendedInitializeResult AwsServerCapabilitiesProvider.getInstance(project).setAwsServerCapabilities(result.getAwsServerCapabilities()) AmazonQLspService.getInstance(project).notifyInitializeMessageReceived() } - if (message is NotificationMessage && message.method == "aws/chat/sendContextCommands") { - val showContextCommands = """ - { - "command":"aws/chat/sendContextCommands", - "params": ${Gson().toJson(message.params)} - } - """.trimIndent() - - AsyncChatUiListener.notifyPartialMessageUpdate(showContextCommands) - } consumer?.consume(message) } } 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 b1a53077a39..8896e6b3727 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 @@ -3,35 +3,40 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat -const val SEND_CHAT_COMMAND_PROMPT = "aws/chat/sendChatPrompt" -const val CHAT_QUICK_ACTION = "aws/chat/sendChatQuickAction" -const val CHAT_READY = "aws/chat/ready" -const val CHAT_LINK_CLICK = "aws/chat/linkClick" -const val CHAT_INFO_LINK_CLICK = "aws/chat/infoLinkClick" -const val CHAT_SOURCE_LINK_CLICK = "aws/chat/sourceLinkClick" -const val PROMPT_INPUT_OPTIONS_CHANGE = "aws/chat/promptInputOptionChange" -const val CHAT_PROMPT_OPTION_ACKNOWLEDGED = "chatPromptOptionAcknowledged" -const val CHAT_FEEDBACK = "aws/chat/feedback" -const val CHAT_FOLLOW_UP_CLICK = "aws/chat/followUpClick" -const val CHAT_LIST_CONVERSATIONS = "aws/chat/listConversations" -const val CHAT_CONVERSATION_CLICK = "aws/chat/conversationClick" -const val CHAT_FILE_CLICK = "aws/chat/fileClick" -const val CHAT_TAB_ADD = "aws/chat/tabAdd" -const val CHAT_TAB_CHANGE = "aws/chat/tabChange" -const val CHAT_TAB_REMOVE = "aws/chat/tabRemove" -const val CHAT_OPEN_TAB = "aws/chat/openTab" const val CHAT_BUTTON_CLICK = "aws/chat/buttonClick" -const val CHAT_DISCLAIMER_ACKNOWLEDGED = "disclaimerAcknowledged" +const val CHAT_CONVERSATION_CLICK = "aws/chat/conversationClick" const val CHAT_COPY_CODE_TO_CLIPBOARD = "copyToClipboard" const val CHAT_COPY_CODE_TO_CLIPBOARD_NOTIFICATION = "aws/chat/copyCodeToClipboard" +const val CHAT_CREATE_PROMPT = "aws/chat/createPrompt" +const val CHAT_DISCLAIMER_ACKNOWLEDGED = "disclaimerAcknowledged" +const val CHAT_ERROR_PARAMS = "errorMessage" +const val CHAT_FEEDBACK = "aws/chat/feedback" +const val CHAT_FILE_CLICK = "aws/chat/fileClick" +const val CHAT_FOLLOW_UP_CLICK = "aws/chat/followUpClick" +const val CHAT_INFO_LINK_CLICK = "aws/chat/infoLinkClick" 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_LINK_CLICK = "aws/chat/linkClick" +const val CHAT_LIST_CONVERSATIONS = "aws/chat/listConversations" +const val CHAT_OPEN_TAB = "aws/chat/openTab" +const val CHAT_PROMPT_OPTION_ACKNOWLEDGED = "chatPromptOptionAcknowledged" +const val CHAT_QUICK_ACTION = "aws/chat/sendChatQuickAction" +const val CHAT_READY = "aws/chat/ready" +const val CHAT_SEND_CONTEXT_COMMANDS = "aws/chat/sendContextCommands" 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 CHAT_SOURCE_LINK_CLICK = "aws/chat/sourceLinkClick" +const val CHAT_TAB_ADD = "aws/chat/tabAdd" +const val CHAT_TAB_BAR_ACTIONS = "aws/chat/tabBarAction" +const val CHAT_TAB_CHANGE = "aws/chat/tabChange" +const val CHAT_TAB_REMOVE = "aws/chat/tabRemove" + const val GET_SERIALIZED_CHAT_REQUEST_METHOD = "aws/chat/getSerializedChat" + const val OPEN_FILE_DIFF = "aws/openFileDiff" -const val CHAT_ERROR_PARAMS = "errorMessage" + +const val PROMPT_INPUT_OPTIONS_CHANGE = "aws/chat/promptInputOptionChange" + +const val SEND_CHAT_COMMAND_PROMPT = "aws/chat/sendChatPrompt" +const val SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD = "aws/showSaveFileDialog" const val STOP_CHAT_RESPONSE = "stopChatResponse" const val OPEN_SETTINGS = "openSettings"