Skip to content

Commit 95a5d34

Browse files
authored
feat(amazonq): Export chat conversations (#5663)
* initial * Merge conflicts resolved * revert * save * save * export chat: * compile * feedback
1 parent 2982393 commit 95a5d34

File tree

11 files changed

+228
-4
lines changed

11 files changed

+228
-4
lines changed

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
1818
import kotlinx.coroutines.flow.launchIn
1919
import kotlinx.coroutines.flow.merge
2020
import kotlinx.coroutines.flow.onEach
21+
import kotlinx.coroutines.future.await
2122
import kotlinx.coroutines.launch
2223
import org.cef.browser.CefBrowser
2324
import org.eclipse.lsp4j.Position
@@ -50,6 +51,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
5051
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_READY
5152
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SOURCE_LINK_CLICK
5253
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_ADD
54+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_BAR_ACTIONS
5355
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_CHANGE
5456
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_REMOVE
5557
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatNotification
@@ -69,6 +71,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileC
6971
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileClickParams
7072
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickNotification
7173
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickParams
74+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
75+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResponse
7276
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickNotification
7377
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams
7478
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionNotification
@@ -83,6 +87,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_
8387
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
8488
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickNotification
8589
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
90+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams
91+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionRequest
8692
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams
8793
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventRequest
8894
import software.aws.toolkits.jetbrains.services.amazonq.util.command
@@ -222,7 +228,7 @@ class BrowserConnector(
222228
requestFromUi.params.tabId,
223229
chatPrompt,
224230
textDocumentIdentifier,
225-
cursorState
231+
cursorState,
226232
)
227233

228234
val tabId = requestFromUi.params.tabId
@@ -339,6 +345,24 @@ class BrowserConnector(
339345
}
340346
}
341347

348+
GET_SERIALIZED_CHAT_REQUEST_METHOD -> {
349+
val response = serializer.deserializeChatMessages<GetSerializedChatResponse>(node)
350+
ChatCommunicationManager.completeSerializedChatResponse(
351+
response.requestId,
352+
response.params.result.content
353+
)
354+
}
355+
356+
CHAT_TAB_BAR_ACTIONS -> {
357+
handleChatNotification<TabBarActionRequest, TabBarActionParams>(node) {
358+
server, params ->
359+
val result = server.tabBarActions(params)
360+
result.whenComplete { params1, error ->
361+
val res = ChatCommunicationManager.convertNotificationToJsonForChat(CHAT_TAB_BAR_ACTIONS, params1)
362+
browser.postChat(res)
363+
}
364+
}
365+
}
342366
CHAT_CREATE_PROMPT -> {
343367
handleChatNotification<CreatePromptNotification, CreatePromptParams>(node) {
344368
server, params ->

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@ import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
88
import org.eclipse.lsp4j.services.LanguageClient
99
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE
1010
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatUpdateParams
11+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
12+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatParams
13+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
1114
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabParams
1215
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult
16+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD
17+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogParams
18+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult
1319
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
1420
import java.util.concurrent.CompletableFuture
1521

@@ -24,6 +30,12 @@ interface AmazonQLanguageClient : LanguageClient {
2430
@JsonRequest("aws/chat/openTab")
2531
fun openTab(params: OpenTabParams): CompletableFuture<OpenTabResult>
2632

33+
@JsonRequest(SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD)
34+
fun showSaveFileDialog(params: ShowSaveFileDialogParams): CompletableFuture<ShowSaveFileDialogResult>
35+
36+
@JsonRequest(GET_SERIALIZED_CHAT_REQUEST_METHOD)
37+
fun getSerializedChat(params: GetSerializedChatParams): CompletableFuture<GetSerializedChatResult>
38+
2739
@JsonNotification(CHAT_SEND_UPDATE)
2840
fun sendChatUpdate(params: ChatUpdateParams): CompletableFuture<Unit>
2941
}

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

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
3-
43
@file:Suppress("BannedImports")
54
package software.aws.toolkits.jetbrains.services.amazonq.lsp
65

76
import com.google.gson.Gson
87
import com.intellij.notification.NotificationType
98
import com.intellij.openapi.application.ApplicationManager
9+
import com.intellij.openapi.fileChooser.FileChooserFactory
10+
import com.intellij.openapi.fileChooser.FileSaverDescriptor
1011
import com.intellij.openapi.fileEditor.FileEditorManager
1112
import com.intellij.openapi.project.Project
1213
import com.intellij.openapi.vfs.VirtualFileManager
@@ -29,13 +30,20 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatU
2930
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
3031
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE
3132
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatUpdateParams
33+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
34+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatParams
35+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
3236
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabParams
3337
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult
38+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogParams
39+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult
3440
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
3541
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData
3642
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
3743
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
44+
import java.util.UUID
3845
import java.util.concurrent.CompletableFuture
46+
import java.util.concurrent.TimeUnit
3947

4048
/**
4149
* Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server
@@ -116,6 +124,59 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
116124
// TODO implement chat history, this is here to unblock chat functionality
117125
CompletableFuture.completedFuture(OpenTabResult(""))
118126

127+
override fun showSaveFileDialog(params: ShowSaveFileDialogParams): CompletableFuture<ShowSaveFileDialogResult> {
128+
val filters = mutableListOf<String>()
129+
val formatMappings = mapOf("markdown" to "md", "html" to "html")
130+
131+
params.supportedFormats.forEach { format ->
132+
formatMappings[format]?.let { filters.add(it) }
133+
}
134+
val defaultUri = params.defaultUri ?: "export-chat.md"
135+
val saveAtUri = defaultUri.substring(defaultUri.lastIndexOf("/"))
136+
return CompletableFuture.supplyAsync(
137+
{
138+
val descriptor = FileSaverDescriptor("Export", "Choose a location to export").apply {
139+
withFileFilter { file ->
140+
filters.any { ext ->
141+
file.name.endsWith(".$ext")
142+
}
143+
}
144+
}
145+
146+
val chosenFile = FileChooserFactory.getInstance().createSaveFileDialog(descriptor, project).save(saveAtUri)
147+
148+
chosenFile?.let {
149+
ShowSaveFileDialogResult(chosenFile.file.path)
150+
// TODO: Add error state shown in chat ui instead of throwing
151+
} ?: throw Error("Export failed")
152+
},
153+
ApplicationManager.getApplication()::invokeLater
154+
)
155+
}
156+
157+
override fun getSerializedChat(params: GetSerializedChatParams): CompletableFuture<GetSerializedChatResult> {
158+
val requestId = UUID.randomUUID().toString()
159+
val result = CompletableFuture<GetSerializedChatResult>()
160+
161+
ChatCommunicationManager.pendingSerializedChatRequests[requestId] = result
162+
163+
val uiMessage = """
164+
{
165+
"command": "$GET_SERIALIZED_CHAT_REQUEST_METHOD",
166+
"params": ${Gson().toJson(params)},
167+
"requestId": "$requestId"
168+
}
169+
""".trimIndent()
170+
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)
171+
172+
result.orTimeout(30000, TimeUnit.MILLISECONDS)
173+
.whenComplete { _, error ->
174+
ChatCommunicationManager.pendingSerializedChatRequests.remove(requestId)
175+
}
176+
177+
return result
178+
}
179+
119180
override fun configuration(params: ConfigurationParams): CompletableFuture<List<Any>> {
120181
if (params.items.isEmpty()) {
121182
return CompletableFuture.completedFuture(null)

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
2525
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_READY
2626
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SOURCE_LINK_CLICK
2727
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_ADD
28+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_BAR_ACTIONS
2829
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_CHANGE
2930
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_REMOVE
3031
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CopyCodeToClipboardParams
@@ -34,13 +35,18 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Encry
3435
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FeedbackParams
3536
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileClickParams
3637
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FollowUpClickParams
38+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
39+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatParams
40+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
3741
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams
3842
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionParams
3943
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams
4044
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMPT_INPUT_OPTIONS_CHANGE
4145
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams
4246
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
4347
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams
48+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionParams
49+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabBarActionResult
4450
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TabEventParams
4551
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload
4652
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
@@ -114,6 +120,12 @@ interface AmazonQLanguageServer : LanguageServer {
114120
@JsonRequest(CHAT_BUTTON_CLICK)
115121
fun buttonClick(params: ButtonClickParams): CompletableFuture<ButtonClickResult>
116122

123+
@JsonRequest(CHAT_TAB_BAR_ACTIONS)
124+
fun tabBarActions(params: TabBarActionParams): CompletableFuture<TabBarActionResult>
125+
126+
@JsonRequest(GET_SERIALIZED_CHAT_REQUEST_METHOD)
127+
fun getSerializedActions(params: GetSerializedChatParams): CompletableFuture<GetSerializedChatResult>
128+
117129
@JsonNotification(CHAT_CREATE_PROMPT)
118130
fun createPrompt(params: CreatePromptParams): CompletableFuture<Unit>
119131
}

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
3-
3+
@file:Suppress("BannedImports")
44
package software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat
55

6+
import com.google.gson.Gson
67
import com.intellij.openapi.components.Service
78
import com.intellij.openapi.components.service
89
import com.intellij.openapi.project.Project
910
import org.eclipse.lsp4j.ProgressParams
1011
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
1112
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ProgressNotificationUtils.getObject
13+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
1214
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
1315
import java.util.UUID
16+
import java.util.concurrent.CompletableFuture
1417
import java.util.concurrent.ConcurrentHashMap
1518

1619
@Service(Service.Level.PROJECT)
@@ -56,6 +59,11 @@ class ChatCommunicationManager {
5659
companion object {
5760
fun getInstance(project: Project) = project.service<ChatCommunicationManager>()
5861

62+
val pendingSerializedChatRequests = ConcurrentHashMap<String, CompletableFuture<GetSerializedChatResult>>()
63+
fun completeSerializedChatResponse(requestId: String, content: String) {
64+
pendingSerializedChatRequests.remove(requestId)?.complete(GetSerializedChatResult((content)))
65+
}
66+
5967
fun convertToJsonToSendToChat(command: String, tabId: String, params: String, isPartialResult: Boolean): String =
6068
"""
6169
{
@@ -65,5 +73,13 @@ class ChatCommunicationManager {
6573
"isPartialResult": $isPartialResult
6674
}
6775
""".trimIndent()
76+
77+
inline fun <reified T> convertNotificationToJsonForChat(command: String, params: T? = null) =
78+
"""
79+
{
80+
"command":"$command",
81+
"params": ${if (params != null) Gson().toJson(params) else "{}"}
82+
}
83+
""".trimIndent()
6884
}
6985
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,17 @@ data class AwsMetadata(
1616

1717
data class AwsClientCapabilities(
1818
val q: DeveloperProfiles,
19+
val window: WindowSettings,
1920
)
2021

2122
data class DeveloperProfiles(
2223
val developerProfiles: Boolean,
2324
)
2425

26+
data class WindowSettings(
27+
val showSaveFileDialog: Boolean,
28+
)
29+
2530
data class ClientInfoMetadata(
2631
val extension: ExtensionMetadata,
2732
val clientId: String,
@@ -50,6 +55,9 @@ fun createExtendedClientMetadata(): ExtendedClientMetadata {
5055
awsClientCapabilities = AwsClientCapabilities(
5156
q = DeveloperProfiles(
5257
developerProfiles = true
58+
),
59+
window = WindowSettings(
60+
showSaveFileDialog = true
5361
)
5462
)
5563
)

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
@@ -32,5 +32,5 @@ data class InnerChatPrompt(
3232

3333
data class InnerChatOptions(
3434
@JsonProperty("pair-programmer-mode")
35-
val pairProgrammingMode: String,
35+
val pairProgrammingMode: String?,
3636
)

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,8 @@ const val CHAT_COPY_CODE_TO_CLIPBOARD = "copyToClipboard"
2424
const val CHAT_COPY_CODE_TO_CLIPBOARD_NOTIFICATION = "aws/chat/copyCodeToClipboard"
2525
const val CHAT_INSERT_TO_CURSOR = "insertToCursorPosition"
2626
const val CHAT_INSERT_TO_CURSOR_NOTIFICATION = "aws/chat/insertToCursorPosition"
27+
const val CHAT_TAB_BAR_ACTIONS = "aws/chat/tabBarAction"
2728
const val CHAT_SEND_UPDATE = "aws/chat/sendChatUpdate"
2829
const val CHAT_CREATE_PROMPT = "aws/chat/createPrompt"
30+
const val SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD = "aws/showSaveFileDialog"
31+
const val GET_SERIALIZED_CHAT_REQUEST_METHOD = "aws/chat/getSerializedChat"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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+
GetSerializedChatParams(tabId, format.value)
13+
}
14+
}
15+
16+
enum class SerializedChatFormat(val value: String) {
17+
HTML("html"),
18+
MARKDOWN("markdown"),
19+
;
20+
21+
override fun toString(): String =
22+
name.lowercase()
23+
}
24+
25+
data class GetSerializedChatResult(
26+
val content: String,
27+
)
28+
29+
data class GetSerializedChatRequest(
30+
val requestId: String,
31+
override val command: String,
32+
override val params: GetSerializedChatParams,
33+
) : ChatNotification<GetSerializedChatParams>
34+
35+
data class GetSerializedChatResponseParams(
36+
val success: Boolean,
37+
val result: GetSerializedChatResult,
38+
)
39+
40+
data class GetSerializedChatResponse(
41+
val requestId: String,
42+
val command: String,
43+
val params: GetSerializedChatResponseParams,
44+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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 ShowSaveFileDialogParams(
7+
val supportedFormats: List<String>,
8+
val defaultUri: String?,
9+
)
10+
11+
data class ShowSaveFileDialogResult(
12+
val targetUri: String,
13+
)

0 commit comments

Comments
 (0)