Skip to content

Commit 73e4cb2

Browse files
Merge main into feature/model-selection
2 parents 4dd118c + 1211c41 commit 73e4cb2

File tree

10 files changed

+75
-127
lines changed

10 files changed

+75
-127
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import com.intellij.openapi.util.Disposer
1111
import com.intellij.ui.jcef.JBCefJSQuery
1212
import org.cef.CefApp
1313
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService
14-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
1514
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMessage
1615
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
1716
import software.aws.toolkits.jetbrains.services.amazonq.util.HighlightCommand
@@ -117,7 +116,7 @@ class Browser(parent: Disposable, private val webUri: URI, val project: Project)
117116
): String {
118117
val postMessageToJavaJsCode = receiveMessageQuery.inject("JSON.stringify(message)")
119118
val connectorAdapterPath = "http://mynah/js/connectorAdapter.js"
120-
generateQuickActionConfig()
119+
121120
// https://github.com/highlightjs/highlight.js/issues/1387
122121
// language=HTML
123122
val jsScripts = """
@@ -309,10 +308,6 @@ class Browser(parent: Disposable, private val webUri: URI, val project: Project)
309308
activeProfile
310309
}
311310

312-
private fun generateQuickActionConfig() = AwsServerCapabilitiesProvider.getInstance(project).getChatOptions().quickActions.quickActionsCommandGroups
313-
.let { OBJECT_MAPPER.writeValueAsString(it) }
314-
?: "[]"
315-
316311
companion object {
317312
private const val MAX_ONBOARDING_PAGE_COUNT = 3
318313
private val OBJECT_MAPPER = jacksonObjectMapper()

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import kotlinx.coroutines.coroutineScope
2121
import kotlinx.coroutines.flow.Flow
2222
import kotlinx.coroutines.flow.callbackFlow
2323
import kotlinx.coroutines.flow.distinctUntilChanged
24+
import kotlinx.coroutines.flow.first
2425
import kotlinx.coroutines.flow.launchIn
2526
import kotlinx.coroutines.flow.merge
2627
import kotlinx.coroutines.flow.onEach
@@ -42,7 +43,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcMethod
4243
import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcNotification
4344
import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcRequest
4445
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
45-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
4646
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
4747
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMessage
4848
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.AUTH_FOLLOW_UP_CLICKED
@@ -598,15 +598,19 @@ class BrowserConnector(
598598
}
599599
}
600600

601-
private fun updateQuickActionsInBrowser(browser: Browser) {
601+
private suspend fun updateQuickActionsInBrowser(browser: Browser) {
602602
val isFeatureDevAvailable = isFeatureDevAvailable(project)
603603
val isCodeTransformAvailable = isCodeTransformAvailable(project)
604604
val isDocAvailable = isDocAvailable(project)
605605
val isCodeScanAvailable = isCodeScanAvailable(project)
606606
val isCodeTestAvailable = isCodeTestAvailable(project)
607607

608+
val serverCapabilities = AmazonQLspService.getInstance(project).instanceFlow.first().initializeResult.await().awsServerCapabilities
609+
610+
// language=JavaScript
608611
val script = """
609612
try {
613+
// hack to create the list of actions across all tab types
610614
const tempConnector = connectorAdapter.initiateAdapter(
611615
false,
612616
true, // the two values are not used here, needed for constructor
@@ -619,7 +623,7 @@ class BrowserConnector(
619623
);
620624
621625
const commands = tempConnector.initialQuickActions?.slice(0, 2) || [];
622-
const options = ${Gson().toJson(AwsServerCapabilitiesProvider.getInstance(project).getChatOptions())};
626+
const options = ${Gson().toJson(serverCapabilities.chatOptions)};
623627
options.quickActions.quickActionsCommandGroups = [
624628
...commands,
625629
...options.quickActions.quickActionsCommandGroups

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ open class CodeWhispererTestBase {
131131
get() = CompletableFuture()
132132

133133
override val initializeResult: Deferred<AwsExtendedInitializeResult>
134-
get() = CompletableDeferred(AwsExtendedInitializeResult())
134+
get() = CompletableDeferred(AwsExtendedInitializeResult(mockk()))
135135

136136
override val encryptionManager: JwtEncryptionManager
137137
get() = TODO("Not yet implemented")

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import kotlinx.coroutines.channels.BufferOverflow
3636
import kotlinx.coroutines.delay
3737
import kotlinx.coroutines.flow.MutableSharedFlow
3838
import kotlinx.coroutines.flow.asSharedFlow
39-
import kotlinx.coroutines.flow.map
4039
import kotlinx.coroutines.future.asCompletableFuture
4140
import kotlinx.coroutines.future.await
4241
import kotlinx.coroutines.isActive
@@ -77,7 +76,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.Default
7776
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
7877
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AmazonQLspTypeAdapterFactory
7978
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsExtendedInitializeResult
80-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
8179
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.createExtendedClientMetadata
8280
import software.aws.toolkits.jetbrains.services.amazonq.lsp.textdocument.TextDocumentServiceHandler
8381
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.WorkspaceFolderUtil.createWorkspaceFolders
@@ -156,7 +154,7 @@ class AmazonQLspService @VisibleForTesting constructor(
156154
constructor(project: Project, cs: CoroutineScope) : this(DefaultAmazonQServerInstanceStarter, project, cs)
157155

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

161159
private var instance: Deferred<AmazonQServerInstanceFacade>
162160

@@ -538,11 +536,6 @@ private class AmazonQServerInstance(private val project: Project, private val cs
538536
}
539537
}
540538

541-
if (message is ResponseMessage && message.result is AwsExtendedInitializeResult) {
542-
val result = message.result as AwsExtendedInitializeResult
543-
AwsServerCapabilitiesProvider.getInstance(project).setAwsServerCapabilities(result.getAwsServerCapabilities())
544-
}
545-
546539
// required
547540
consumer?.consume(message)
548541
}

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.google.gson.reflect.TypeToken
1010
import com.google.gson.stream.JsonReader
1111
import com.google.gson.stream.JsonWriter
1212
import org.eclipse.lsp4j.InitializeResult
13+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.AwsServerCapabilities
1314
import java.io.IOException
1415

1516
class AmazonQLspTypeAdapterFactory : TypeAdapterFactory {
@@ -32,12 +33,4 @@ class AmazonQLspTypeAdapterFactory : TypeAdapterFactory {
3233
}
3334
}
3435

35-
class AwsExtendedInitializeResult(awsServerCapabilities: AwsServerCapabilities? = null) : InitializeResult() {
36-
private var awsServerCapabilities: AwsServerCapabilities? = null
37-
38-
fun getAwsServerCapabilities(): AwsServerCapabilities? = awsServerCapabilities
39-
40-
fun setAwsServerCapabilities(awsServerCapabilities: AwsServerCapabilities?) {
41-
this.awsServerCapabilities = awsServerCapabilities
42-
}
43-
}
36+
data class AwsExtendedInitializeResult(val awsServerCapabilities: AwsServerCapabilities) : InitializeResult()

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AwsServerCapabilitiesProvider.kt

Lines changed: 0 additions & 92 deletions
This file was deleted.

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/ExtendedClientMetadata.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ data class AwsMetadata(
1717
)
1818

1919
data class AwsClientCapabilities(
20-
val q: DeveloperProfiles,
21-
val window: WindowSettings,
20+
val q: QCapabilities,
21+
val window: WindowCapabilities,
2222
)
2323

24-
data class DeveloperProfiles(
24+
data class QCapabilities(
2525
val developerProfiles: Boolean,
2626
val mcp: Boolean,
2727
val pinnedContextEnabled: Boolean,
@@ -30,7 +30,7 @@ data class DeveloperProfiles(
3030
val workspaceFilePath: String?,
3131
)
3232

33-
data class WindowSettings(
33+
data class WindowCapabilities(
3434
val showSaveFileDialog: Boolean,
3535
val showLogs: Boolean,
3636
)
@@ -65,15 +65,15 @@ fun createExtendedClientMetadata(project: Project): ExtendedClientMetadata {
6565
name = metadata.parentProduct
6666
),
6767
awsClientCapabilities = AwsClientCapabilities(
68-
q = DeveloperProfiles(
68+
q = QCapabilities(
6969
developerProfiles = true,
7070
mcp = true,
7171
pinnedContextEnabled = true,
7272
imageContextEnabled = true,
7373
reroute = true,
7474
workspaceFilePath = project.workspaceFile?.path,
7575
),
76-
window = WindowSettings(
76+
window = WindowCapabilities(
7777
showSaveFileDialog = true,
7878
showLogs = true,
7979
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws
5+
6+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.IconType
7+
8+
data class AwsServerCapabilities(
9+
val chatOptions: ChatOptions,
10+
)
11+
12+
data class ChatOptions(
13+
val quickActions: QuickActions,
14+
val history: Boolean,
15+
val export: Boolean,
16+
val mcpServers: Boolean,
17+
val reroute: Boolean,
18+
val showLogs: Boolean,
19+
)
20+
21+
data class QuickActions(
22+
val quickActionsCommandGroups: List<QuickActionsCommandGroups>,
23+
)
24+
25+
data class QuickActionsCommandGroups(
26+
val commands: List<QuickActionCommand>,
27+
)
28+
29+
open class QuickActionCommand(
30+
open val command: String,
31+
open val description: String?,
32+
open val placeholder: String? = null,
33+
open val icon: IconType? = null,
34+
)
35+
36+
data class ContextCommand(
37+
val id: String?,
38+
val route: List<String>?,
39+
val label: String?,
40+
val children: ContextCommandGroup?,
41+
override val command: String,
42+
override val description: String?,
43+
override val placeholder: String? = null,
44+
override val icon: IconType? = null,
45+
) : QuickActionCommand(
46+
command = command,
47+
description = description,
48+
placeholder = placeholder,
49+
icon = icon
50+
)
51+
52+
data class ContextCommandGroup(
53+
val groupName: String?,
54+
val commands: List<ContextCommand>,
55+
)

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ChatPrompt.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat
55

66
import com.fasterxml.jackson.annotation.JsonProperty
7-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ContextCommand
7+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.ContextCommand
88

99
data class ChatPrompt(
1010
val prompt: String,

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/SendChatPrompt.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat
55

66
import org.eclipse.lsp4j.TextDocumentIdentifier
7-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ContextCommand
7+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.ContextCommand
88

99
data class ChatParams(
1010
val tabId: String,

0 commit comments

Comments
 (0)