Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import com.intellij.openapi.util.Disposer
import com.intellij.ui.jcef.JBCefJSQuery
import org.cef.CefApp
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMessage
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
import software.aws.toolkits.jetbrains.services.amazonq.util.HighlightCommand
Expand Down Expand Up @@ -117,7 +116,7 @@ class Browser(parent: Disposable, private val webUri: URI, val project: Project)
): String {
val postMessageToJavaJsCode = receiveMessageQuery.inject("JSON.stringify(message)")
val connectorAdapterPath = "http://mynah/js/connectorAdapter.js"
generateQuickActionConfig()

// https://github.com/highlightjs/highlight.js/issues/1387
// language=HTML
val jsScripts = """
Expand Down Expand Up @@ -309,10 +308,6 @@ class Browser(parent: Disposable, private val webUri: URI, val project: Project)
activeProfile
}

private fun generateQuickActionConfig() = AwsServerCapabilitiesProvider.getInstance(project).getChatOptions().quickActions.quickActionsCommandGroups
.let { OBJECT_MAPPER.writeValueAsString(it) }
?: "[]"

companion object {
private const val MAX_ONBOARDING_PAGE_COUNT = 3
private val OBJECT_MAPPER = jacksonObjectMapper()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
Expand All @@ -42,7 +43,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcMethod
import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcNotification
import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcRequest
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMessage
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.AUTH_FOLLOW_UP_CLICKED
Expand Down Expand Up @@ -605,8 +605,12 @@ class BrowserConnector(
val isCodeScanAvailable = isCodeScanAvailable(project)
val isCodeTestAvailable = isCodeTestAvailable(project)

val serverCapabilities = AmazonQLspService.getInstance(project).instanceFlow.first().initializeResult.await().awsServerCapabilities

// language=JavaScript
val script = """
try {
// hack to create the list of actions across all tab types
const tempConnector = connectorAdapter.initiateAdapter(
false,
true, // the two values are not used here, needed for constructor
Expand All @@ -619,7 +623,7 @@ class BrowserConnector(
);

const commands = tempConnector.initialQuickActions?.slice(0, 2) || [];
const options = ${Gson().toJson(AwsServerCapabilitiesProvider.getInstance(project).getChatOptions())};
const options = ${Gson().toJson(serverCapabilities.chatOptions)};
options.quickActions.quickActionsCommandGroups = [
...commands,
...options.quickActions.quickActionsCommandGroups
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ open class CodeWhispererTestBase {
get() = CompletableFuture()

override val initializeResult: Deferred<AwsExtendedInitializeResult>
get() = CompletableDeferred(AwsExtendedInitializeResult())
get() = CompletableDeferred(AwsExtendedInitializeResult(mockk()))

override val encryptionManager: JwtEncryptionManager
get() = TODO("Not yet implemented")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.map

Check warning on line 39 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive
import kotlinx.coroutines.future.asCompletableFuture
import kotlinx.coroutines.future.await
import kotlinx.coroutines.isActive
Expand Down Expand Up @@ -77,7 +77,6 @@
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.AwsExtendedInitializeResult
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.createExtendedClientMetadata
import software.aws.toolkits.jetbrains.services.amazonq.lsp.textdocument.TextDocumentServiceHandler
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.WorkspaceFolderUtil.createWorkspaceFolders
Expand Down Expand Up @@ -156,7 +155,7 @@
constructor(project: Project, cs: CoroutineScope) : this(DefaultAmazonQServerInstanceStarter, project, cs)

private val _flowInstance = MutableSharedFlow<AmazonQServerInstanceFacade>(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST)
val instanceFlow = _flowInstance.asSharedFlow().map { it.languageServer }
val instanceFlow = _flowInstance.asSharedFlow()

private var instance: Deferred<AmazonQServerInstanceFacade>

Expand Down Expand Up @@ -538,11 +537,6 @@
}
}

if (message is ResponseMessage && message.result is AwsExtendedInitializeResult) {
val result = message.result as AwsExtendedInitializeResult
AwsServerCapabilitiesProvider.getInstance(project).setAwsServerCapabilities(result.getAwsServerCapabilities())
}

// required
consumer?.consume(message)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.google.gson.reflect.TypeToken
import com.google.gson.stream.JsonReader
import com.google.gson.stream.JsonWriter
import org.eclipse.lsp4j.InitializeResult
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.AwsServerCapabilities
import java.io.IOException

class AmazonQLspTypeAdapterFactory : TypeAdapterFactory {
Expand All @@ -32,12 +33,4 @@ class AmazonQLspTypeAdapterFactory : TypeAdapterFactory {
}
}

class AwsExtendedInitializeResult(awsServerCapabilities: AwsServerCapabilities? = null) : InitializeResult() {
private var awsServerCapabilities: AwsServerCapabilities? = null

fun getAwsServerCapabilities(): AwsServerCapabilities? = awsServerCapabilities

fun setAwsServerCapabilities(awsServerCapabilities: AwsServerCapabilities?) {
this.awsServerCapabilities = awsServerCapabilities
}
}
data class AwsExtendedInitializeResult(val awsServerCapabilities: AwsServerCapabilities) : InitializeResult()

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ data class AwsMetadata(
)

data class AwsClientCapabilities(
val q: DeveloperProfiles,
val window: WindowSettings,
val q: QCapabilities,
val window: WindowCapabilities,
)

data class DeveloperProfiles(
data class QCapabilities(
val developerProfiles: Boolean,
val mcp: Boolean,
val pinnedContextEnabled: Boolean,
Expand All @@ -30,7 +30,7 @@ data class DeveloperProfiles(
val workspaceFilePath: String?,
)

data class WindowSettings(
data class WindowCapabilities(
val showSaveFileDialog: Boolean,
val showLogs: Boolean,
)
Expand Down Expand Up @@ -65,15 +65,15 @@ fun createExtendedClientMetadata(project: Project): ExtendedClientMetadata {
name = metadata.parentProduct
),
awsClientCapabilities = AwsClientCapabilities(
q = DeveloperProfiles(
q = QCapabilities(
developerProfiles = true,
mcp = true,
pinnedContextEnabled = true,
imageContextEnabled = true,
reroute = true,
workspaceFilePath = project.workspaceFile?.path,
),
window = WindowSettings(
window = WindowCapabilities(
showSaveFileDialog = true,
showLogs = true,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// 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

import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.IconType

data class AwsServerCapabilities(
val chatOptions: ChatOptions,
)

data class ChatOptions(
val quickActions: QuickActions,
val history: Boolean,
val export: Boolean,
val mcpServers: Boolean,
val reroute: Boolean,
val showLogs: Boolean,
)

data class QuickActions(
val quickActionsCommandGroups: List<QuickActionsCommandGroups>,
)

data class QuickActionsCommandGroups(
val commands: List<QuickActionCommand>,
)

open class QuickActionCommand(
open val command: String,
open val description: String?,
open val placeholder: String? = null,
open val icon: IconType? = null,
)

data class ContextCommand(
val id: String?,
val route: List<String>?,
val label: String?,
val children: ContextCommandGroup?,
override val command: String,
override val description: String?,
override val placeholder: String? = null,
override val icon: IconType? = null,
) : QuickActionCommand(
command = command,
description = description,
placeholder = placeholder,
icon = icon
)

data class ContextCommandGroup(
val groupName: String?,
val commands: List<ContextCommand>,
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat

import com.fasterxml.jackson.annotation.JsonProperty
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ContextCommand
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.ContextCommand

data class ChatPrompt(
val prompt: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat

import org.eclipse.lsp4j.TextDocumentIdentifier
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ContextCommand
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.ContextCommand

data class ChatParams(
val tabId: String,
Expand Down
Loading