Skip to content

Commit d90e230

Browse files
committed
initial
1 parent 7c104ec commit d90e230

File tree

7 files changed

+128
-3
lines changed

7 files changed

+128
-3
lines changed

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package software.aws.toolkits.jetbrains.services.amazonq.webview
55

66
import com.fasterxml.jackson.databind.JsonNode
7+
import com.google.gson.Gson
78
import com.intellij.ide.BrowserUtil
89
import com.intellij.ide.util.RunOnceUtil
910
import com.intellij.openapi.project.Project
@@ -28,6 +29,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.commands.MessageSerializ
2829
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
2930
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
3031
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
32+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
3133
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
3234
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.getTextDocumentIdentifier
3335
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ButtonClickNotification
@@ -37,6 +39,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
3739
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_COPY_CODE_TO_CLIPBOARD
3840
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FEEDBACK
3941
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FOLLOW_UP_CLICK
42+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_GET_SERIALIZED_CHAT
4043
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK
4144
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INSERT_TO_CURSOR
4245
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_LINK_CLICK
@@ -45,6 +48,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
4548
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_READY
4649
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SOURCE_LINK_CLICK
4750
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_ADD
51+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_BAR_ACTIONS
4852
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_CHANGE
4953
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_REMOVE
5054
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatNotification
@@ -60,6 +64,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Feedb
6064
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FeedbackParams
6165
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickNotification
6266
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickParams
67+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatParams
68+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatRequest
6369
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickNotification
6470
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams
6571
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionNotification
@@ -74,6 +80,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_
7480
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
7581
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickNotification
7682
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
83+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams
84+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionRequest
7785
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams
7886
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventRequest
7987
import software.aws.toolkits.jetbrains.services.amazonq.util.command
@@ -146,6 +154,14 @@ class BrowserConnector(
146154
// Wait for UI ready before starting to send messages to the UI.
147155
uiReady.await()
148156

157+
// Chat options including history and quick actions need to be sent in once UI is ready
158+
val showChatOptions = """{
159+
"command": "chatOptions",
160+
"params": ${Gson().toJson(AwsServerCapabilitiesProvider.getInstance(project).getChatOptions())}
161+
}
162+
""".trimIndent()
163+
browser.postChat(showChatOptions)
164+
149165
// Send inbound messages to the browser
150166
val inboundMessages = connections.map { it.messagesFromAppToUi.flow }.merge()
151167
inboundMessages
@@ -323,6 +339,21 @@ class BrowserConnector(
323339
server.copyCodeToClipboard(params)
324340
}
325341
}
342+
343+
CHAT_GET_SERIALIZED_CHAT -> {
344+
handleChatNotification<GetSerializedChatRequest, GetSerializedChatParams>(node)
345+
{
346+
server, params -> server.getSerializedActions(params)
347+
}
348+
}
349+
350+
CHAT_TAB_BAR_ACTIONS -> {
351+
handleChatNotification<TabBarActionRequest, TabBarActionParams>(node)
352+
{
353+
server, params -> server.tabBarActions(params)
354+
}
355+
356+
}
326357
}
327358
}
328359

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,34 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
1616
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_COPY_CODE_TO_CLIPBOARD_NOTIFICATION
1717
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FEEDBACK
1818
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_FOLLOW_UP_CLICK
19+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_GET_SERIALIZED_CHAT
1920
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK
2021
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INSERT_TO_CURSOR_NOTIFICATION
2122
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_LINK_CLICK
2223
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_QUICK_ACTION
2324
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_READY
2425
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SOURCE_LINK_CLICK
2526
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_ADD
27+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_BAR_ACTIONS
2628
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_CHANGE
2729
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_REMOVE
2830
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CopyCodeToClipboardParams
2931
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams
3032
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
3133
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FeedbackParams
3234
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickParams
35+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatParams
36+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatRequest
37+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
3338
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams
3439
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionParams
3540
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams
3641
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMPT_INPUT_OPTIONS_CHANGE
3742
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams
3843
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
3944
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
45+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams
46+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionResult
4047
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams
4148
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload
4249
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
@@ -106,4 +113,11 @@ interface AmazonQLanguageServer : LanguageServer {
106113

107114
@JsonRequest(CHAT_BUTTON_CLICK)
108115
fun buttonClick(params: ButtonClickParams): CompletableFuture<ButtonClickResult>
116+
117+
@JsonRequest(CHAT_TAB_BAR_ACTIONS)
118+
fun tabBarActions(params: TabBarActionParams): CompletableFuture<TabBarActionResult>
119+
120+
@JsonRequest(CHAT_GET_SERIALIZED_CHAT)
121+
fun getSerializedActions(params: GetSerializedChatParams): CompletableFuture<GetSerializedChatResult>
122+
109123
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class ManifestFetcher(
2525
private val logger = getLogger<ManifestFetcher>()
2626

2727
private const val DEFAULT_MANIFEST_URL =
28-
"https://aws-toolkit-language-servers.amazonaws.com/remoteWorkspaceContext/0/manifest.json"
28+
"https://d3akiidp1wvqyg.cloudfront.net/qAgenticChatServer/0/manifest.json"
2929

3030
private val DEFAULT_MANIFEST_PATH: Path = getToolkitsCommonCacheRoot()
3131
.resolve("aws")

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class AwsServerCapabilitiesProvider {
1515
this.serverCapabilities = serverCapabilities
1616
}
1717

18-
fun getChatOptions() = serverCapabilities?.chatOptions ?: DEFAULT_CHAT_OPTIONS
18+
fun getChatOptions() = DEFAULT_CHAT_OPTIONS
1919

2020
companion object {
2121
fun getInstance(project: Project) = project.service<AwsServerCapabilitiesProvider>()
@@ -30,7 +30,9 @@ class AwsServerCapabilitiesProvider {
3030
)
3131
)
3232
)
33-
)
33+
),
34+
history = true,
35+
export = true
3436
)
3537
}
3638
}
@@ -41,6 +43,8 @@ data class AwsServerCapabilities(
4143

4244
data class ChatOptions(
4345
val quickActions: QuickActions,
46+
val history: Boolean,
47+
val export: Boolean
4448
)
4549

4650
data class QuickActions(

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ const val CHAT_COPY_CODE_TO_CLIPBOARD = "copyToClipboard"
2222
const val CHAT_COPY_CODE_TO_CLIPBOARD_NOTIFICATION = "aws/chat/copyCodeToClipboard"
2323
const val CHAT_INSERT_TO_CURSOR = "insertToCursorPosition"
2424
const val CHAT_INSERT_TO_CURSOR_NOTIFICATION = "aws/chat/insertToCursorPosition"
25+
const val CHAT_GET_SERIALIZED_CHAT="aws/chat/getSerializedChat"
26+
const val CHAT_TAB_BAR_ACTIONS="aws/chat/tabBarAction"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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.chat
5+
6+
data class GetSerializedChatParams(
7+
val tabId: String,
8+
val format : String
9+
) {
10+
companion object {
11+
fun create(tabId: String, format: SerializedChatFormat): GetSerializedChatParams {
12+
return GetSerializedChatParams(tabId, format.value)
13+
}
14+
}
15+
}
16+
17+
enum class SerializedChatFormat(val value: String) {
18+
HTML("html"),
19+
MARKDOWN("markdown");
20+
21+
override fun toString(): String {
22+
return name.lowercase()
23+
}
24+
}
25+
26+
data class GetSerializedChatResult(
27+
val content: String
28+
)
29+
30+
data class GetSerializedChatRequest(
31+
val requestId: String,
32+
override val command: String,
33+
override val params: GetSerializedChatParams,
34+
) : ChatNotification<GetSerializedChatParams>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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.chat
5+
6+
//data class TabBarActionParams(
7+
// val tabId: String?,
8+
// val action: TabBarAction
9+
//)
10+
data class TabBarActionParams(
11+
val tabId: String?,
12+
val action: String
13+
) {
14+
companion object {
15+
fun create(tabId: String?, action: TabBarAction): TabBarActionParams {
16+
return TabBarActionParams(tabId, action.value)
17+
}
18+
}
19+
}
20+
21+
22+
enum class TabBarAction(val value: String) {
23+
EXPORT("export"),
24+
HISTORY("history");
25+
26+
override fun toString(): String {
27+
return name.lowercase()
28+
}
29+
30+
}
31+
32+
data class TabBarActionResult(
33+
val success: Boolean
34+
)
35+
36+
data class TabBarActionRequest(
37+
override val command: String,
38+
override val params: TabBarActionParams,
39+
) : ChatNotification<TabBarActionParams>
40+

0 commit comments

Comments
 (0)