Skip to content

Commit fe668ee

Browse files
rliblakelaz-amazon
authored andcommitted
fix(amazonq): delete AwsServerCapabilitiesProvider (aws#5833)
It is not actually needed; we can read the values from AmazonQLspService
1 parent d37106e commit fe668ee

File tree

10 files changed

+75
-131
lines changed

10 files changed

+75
-131
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
@@ -25,6 +25,7 @@ import kotlinx.coroutines.coroutineScope
2525
import kotlinx.coroutines.flow.Flow
2626
import kotlinx.coroutines.flow.callbackFlow
2727
import kotlinx.coroutines.flow.distinctUntilChanged
28+
import kotlinx.coroutines.flow.first
2829
import kotlinx.coroutines.flow.launchIn
2930
import kotlinx.coroutines.flow.merge
3031
import kotlinx.coroutines.flow.onEach
@@ -46,7 +47,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcMethod
4647
import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcNotification
4748
import software.aws.toolkits.jetbrains.services.amazonq.lsp.JsonRpcRequest
4849
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
49-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
5050
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
5151
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMessage
5252
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.AUTH_FOLLOW_UP_CLICKED
@@ -704,15 +704,19 @@ class BrowserConnector(
704704
}
705705
}
706706

707-
private fun updateQuickActionsInBrowser(browser: Browser) {
707+
private suspend fun updateQuickActionsInBrowser(browser: Browser) {
708708
val isFeatureDevAvailable = isFeatureDevAvailable(project)
709709
val isCodeTransformAvailable = isCodeTransformAvailable(project)
710710
val isDocAvailable = isDocAvailable(project)
711711
val isCodeScanAvailable = isCodeScanAvailable(project)
712712
val isCodeTestAvailable = isCodeTestAvailable(project)
713713

714+
val serverCapabilities = AmazonQLspService.getInstance(project).instanceFlow.first().initializeResult.await().awsServerCapabilities
715+
716+
// language=JavaScript
714717
val script = """
715718
try {
719+
// hack to create the list of actions across all tab types
716720
const tempConnector = connectorAdapter.initiateAdapter(
717721
false,
718722
true, // the two values are not used here, needed for constructor
@@ -725,7 +729,7 @@ class BrowserConnector(
725729
);
726730
727731
const commands = tempConnector.initialQuickActions?.slice(0, 2) || [];
728-
const options = ${Gson().toJson(AwsServerCapabilitiesProvider.getInstance(project).getChatOptions())};
732+
const options = ${Gson().toJson(serverCapabilities.chatOptions)};
729733
options.quickActions.quickActionsCommandGroups = [
730734
...commands,
731735
...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()
Original file line numberDiff line numberDiff line change
@@ -1,96 +0,0 @@
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.flareChat
5-
6-
import com.intellij.openapi.components.Service
7-
import com.intellij.openapi.components.service
8-
import com.intellij.openapi.project.Project
9-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.IconType
10-
11-
@Service(Service.Level.PROJECT)
12-
class AwsServerCapabilitiesProvider {
13-
private var serverCapabilities: AwsServerCapabilities? = null
14-
15-
fun setAwsServerCapabilities(serverCapabilities: AwsServerCapabilities?) {
16-
this.serverCapabilities = serverCapabilities
17-
}
18-
19-
fun getChatOptions() = serverCapabilities?.chatOptions ?: DEFAULT_CHAT_OPTIONS
20-
21-
companion object {
22-
fun getInstance(project: Project) = project.service<AwsServerCapabilitiesProvider>()
23-
24-
private val DEFAULT_CHAT_OPTIONS: ChatOptions = ChatOptions(
25-
QuickActions(
26-
listOf(
27-
QuickActionsCommandGroups(
28-
listOf(
29-
QuickActionCommand("/help", "Learn more about Amazon Q then"),
30-
QuickActionCommand("/clear", "Clear this session")
31-
)
32-
)
33-
)
34-
),
35-
history = true,
36-
export = true,
37-
mcpServers = true,
38-
// Seems like this is the only way to bounce reroute back to the LSP?
39-
reroute = true,
40-
showLogs = true,
41-
codeReviewInChat = true,
42-
displayFindings = true
43-
)
44-
}
45-
}
46-
47-
data class AwsServerCapabilities(
48-
val chatOptions: ChatOptions,
49-
)
50-
51-
data class ChatOptions(
52-
val quickActions: QuickActions,
53-
val history: Boolean,
54-
val export: Boolean,
55-
val mcpServers: Boolean,
56-
val reroute: Boolean,
57-
val showLogs: Boolean,
58-
val codeReviewInChat: Boolean,
59-
val displayFindings: Boolean
60-
)
61-
62-
data class QuickActions(
63-
val quickActionsCommandGroups: List<QuickActionsCommandGroups>,
64-
)
65-
66-
data class QuickActionsCommandGroups(
67-
val commands: List<QuickActionCommand>,
68-
)
69-
70-
open class QuickActionCommand(
71-
open val command: String,
72-
open val description: String?,
73-
open val placeholder: String? = null,
74-
open val icon: IconType? = null,
75-
)
76-
77-
data class ContextCommand(
78-
val id: String?,
79-
val route: List<String>?,
80-
val label: String?,
81-
val children: ContextCommandGroup?,
82-
override val command: String,
83-
override val description: String?,
84-
override val placeholder: String? = null,
85-
override val icon: IconType? = null,
86-
) : QuickActionCommand(
87-
command = command,
88-
description = description,
89-
placeholder = placeholder,
90-
icon = icon
91-
)
92-
93-
data class ContextCommandGroup(
94-
val groupName: String?,
95-
val commands: List<ContextCommand>,
96-
)

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,
@@ -32,7 +32,7 @@ data class DeveloperProfiles(
3232
val workspaceFilePath: String?,
3333
)
3434

35-
data class WindowSettings(
35+
data class WindowCapabilities(
3636
val showSaveFileDialog: Boolean,
3737
val showLogs: Boolean,
3838
)
@@ -67,7 +67,7 @@ fun createExtendedClientMetadata(project: Project): ExtendedClientMetadata {
6767
name = metadata.parentProduct
6868
),
6969
awsClientCapabilities = AwsClientCapabilities(
70-
q = DeveloperProfiles(
70+
q = QCapabilities(
7171
developerProfiles = true,
7272
mcp = true,
7373
pinnedContextEnabled = true,
@@ -77,7 +77,7 @@ fun createExtendedClientMetadata(project: Project): ExtendedClientMetadata {
7777
displayFindings = true,
7878
workspaceFilePath = project.workspaceFile?.path,
7979
),
80-
window = WindowSettings(
80+
window = WindowCapabilities(
8181
showSaveFileDialog = true,
8282
showLogs = true,
8383
)
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)