From 06f4a999516ff9e38b360b08b03b4a808f388f03 Mon Sep 17 00:00:00 2001 From: Manodnya Bhoite Date: Thu, 24 Apr 2025 19:45:19 -0700 Subject: [PATCH 1/2] Show context options in prompt --- .../amazonq/lsp/AmazonQLanguageClientImpl.kt | 15 ++++++++++ .../amazonq/lsp/AmazonQLspConstants.kt | 1 + .../services/amazonq/lsp/AmazonQLspService.kt | 28 +++++++++---------- 3 files changed, 30 insertions(+), 14 deletions(-) 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 76d2bd1eb0d..9889a0a3549 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 @@ -115,6 +115,21 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC ) ) } + AmazonQLspConstants.LSP_PROJECT_CONTEXT_KEY -> { + add( + AmazonQLspConfiguration( + optOutTelemetry = AwsSettings.getInstance().isTelemetryEnabled, + customization = CodeWhispererModelConfigurator.getInstance().activeCustomization(project)?.arn, + // local context + enableLocalIndexing = qSettings.isProjectContextEnabled(), + indexWorkerThreads = qSettings.getProjectContextIndexThreadCount(), + enableGpuAcceleration = qSettings.isProjectContextGpu(), + localIndexing = LocalIndexingConfiguration( + maxIndexSizeMB = qSettings.getProjectContextIndexMaxSize() + ) + ) + ) + } } } } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspConstants.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspConstants.kt index 0c93dec0550..c3a7f0ad7db 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspConstants.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspConstants.kt @@ -13,4 +13,5 @@ object AmazonQLspConstants { const val LSP_ENABLE_TELEMETRY_EVENTS_CONFIGURATION_KEY = "enableTelemetryEventsToDestination" const val LSP_CUSTOMIZATION_CONFIGURATION_KEY = "customization" const val LSP_WORKSPACE_CONTEXT_ENABLED_KEY = "workspaceContext" + const val LSP_PROJECT_CONTEXT_KEY = "projectContext" } 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 1c9b5530cf6..aa2418fc2fa 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 @@ -1,8 +1,9 @@ // 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.google.gson.ToNumberPolicy import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.execution.impl.ExecutionManagerImpl @@ -43,7 +44,7 @@ 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.Message +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 @@ -56,6 +57,7 @@ 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 @@ -287,6 +289,16 @@ private class AmazonQServerInstance(private val project: Project, private val cs 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) } } @@ -373,18 +385,6 @@ private class AmazonQServerInstance(private val project: Project, private val cs } } - class MessageTracer { - private val traceLogger = LOG.atLevel(if (isDeveloperMode()) Level.INFO else Level.DEBUG) - - fun trace(direction: String, message: Message) { - traceLogger.log { - buildString { - append("$direction: ") - append(message.toString()) - } - } - } - } companion object { private val LOG = getLogger() } From 8d1b93df1f7de96cc112f54cc7e958527a70f534 Mon Sep 17 00:00:00 2001 From: Manodnya Bhoite Date: Thu, 24 Apr 2025 23:08:56 -0700 Subject: [PATCH 2/2] Add support for creating a prompt --- .../services/amazonq/webview/BrowserConnector.kt | 10 ++++++++++ .../services/amazonq/lsp/AmazonQLanguageServer.kt | 5 +++++ .../lsp/model/aws/chat/CreatePromptParams.kt | 13 +++++++++++++ .../amazonq/lsp/model/aws/chat/FlareChatCommands.kt | 1 + 4 files changed, 29 insertions(+) create mode 100644 plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/CreatePromptParams.kt 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 607ce002d64..eadcb52234d 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 @@ -34,6 +34,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Butto import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ButtonClickParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ButtonClickResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_BUTTON_CLICK +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_CREATE_PROMPT import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FEEDBACK import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FOLLOW_UP_CLICK import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK @@ -49,6 +50,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatN import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatPrompt import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatReadyNotification +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CreatePromptNotification +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CreatePromptParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CursorState import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams @@ -307,6 +310,13 @@ class BrowserConnector( } } } + + CHAT_CREATE_PROMPT -> { + handleChatNotification(node) { + server, params -> + server.createPrompt(params) + } + } } } 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 e48b1428252..6ee13833279 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 @@ -13,6 +13,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.UpdateConf import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ButtonClickParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ButtonClickResult import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_BUTTON_CLICK +import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_CREATE_PROMPT import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FEEDBACK import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FOLLOW_UP_CLICK import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK @@ -23,6 +24,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_TAB_ADD 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.CreatePromptParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FeedbackParams @@ -96,4 +98,7 @@ interface AmazonQLanguageServer : LanguageServer { @JsonRequest(CHAT_BUTTON_CLICK) fun buttonClick(params: ButtonClickParams): 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/model/aws/chat/CreatePromptParams.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/CreatePromptParams.kt new file mode 100644 index 00000000000..8c089dabde6 --- /dev/null +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/CreatePromptParams.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 CreatePromptParams( + val promptName: String, +) + +data class CreatePromptNotification( + override val command: String, + override val params: CreatePromptParams, +) : ChatNotification 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 967d2f9f0a4..a927b228050 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 @@ -18,3 +18,4 @@ 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_CREATE_PROMPT = "aws/chat/createPrompt"