Skip to content

Commit c78e99c

Browse files
deps(amazonq): client handles openTab requests from server (#5630)
* add openTab message * todo * detekt
1 parent a05d2c0 commit c78e99c

File tree

5 files changed

+163
-0
lines changed

5 files changed

+163
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp
55

66
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
77
import org.eclipse.lsp4j.services.LanguageClient
8+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabParams
9+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult
810
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
911
import java.util.concurrent.CompletableFuture
1012

@@ -15,4 +17,7 @@ import java.util.concurrent.CompletableFuture
1517
interface AmazonQLanguageClient : LanguageClient {
1618
@JsonRequest("aws/credentials/getConnectionMetadata")
1719
fun getConnectionMetadata(): CompletableFuture<ConnectionMetadata>
20+
21+
@JsonRequest("aws/chat/openTab")
22+
fun openTab(params: OpenTabParams): CompletableFuture<OpenTabResult>
1823
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
1616
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
1717
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
1818
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
19+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabParams
20+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult
1921
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.ConnectionMetadata
2022
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData
2123
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
@@ -72,6 +74,10 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
7274
}
7375
}
7476

77+
override fun openTab(params: OpenTabParams): CompletableFuture<OpenTabResult> =
78+
// TODO implement chat history, this is here to unblock chat functionality
79+
CompletableFuture.completedFuture(OpenTabResult(""))
80+
7581
override fun configuration(params: ConfigurationParams): CompletableFuture<List<Any>> {
7682
if (params.items.isEmpty()) {
7783
return CompletableFuture.completedFuture(null)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
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 ChatMessage(
7+
val type: MessageType? = MessageType.ANSWER,
8+
val header: MessageHeader? = null,
9+
val buttons: List<Button>? = null,
10+
val body: String? = null,
11+
val messageId: String? = null,
12+
val canBeVoted: Boolean? = null,
13+
val relatedContent: RelatedContent? = null,
14+
val followUp: FollowUp? = null,
15+
val codeReference: List<ReferenceTrackerInformation>? = null,
16+
val fileList: FileList? = null,
17+
val contextList: FileList? = null,
18+
)
19+
20+
data class MessageHeader(
21+
val type: MessageType? = MessageType.ANSWER,
22+
val buttons: List<Button>? = null,
23+
val body: String? = null,
24+
val messageId: String? = null,
25+
val canBeVoted: Boolean? = null,
26+
val relatedContent: RelatedContent? = null,
27+
val followUp: FollowUp? = null,
28+
val codeReference: List<ReferenceTrackerInformation>? = null,
29+
val fileList: FileList? = null,
30+
val contextList: FileList? = null,
31+
val icon: IconType? = null,
32+
val status: MessageStatus? = null,
33+
)
34+
35+
data class MessageStatus(
36+
val status: Status? = null,
37+
val icon: IconType? = null,
38+
val text: String? = null,
39+
)
40+
41+
data class Button(
42+
val id: String,
43+
val text: String? = null,
44+
val description: String? = null,
45+
val icon: IconType? = null,
46+
val disabled: Boolean? = null,
47+
val keepCardAfterClick: Boolean? = null,
48+
val status: ButtonStatus? = null,
49+
)
50+
51+
data class FileList(
52+
val rootFolderTitle: String? = null,
53+
val filePaths: List<String>? = null,
54+
val deletedFiles: List<String>? = null,
55+
val details: Map<String, FileDetails>? = null,
56+
)
57+
58+
data class FileDetails(
59+
val description: String? = null,
60+
val lineRanges: List<Pair<Int, Int>>? = null,
61+
val changes: Changes? = null,
62+
)
63+
64+
data class Changes(
65+
val added: Int? = null,
66+
val deleted: Int? = null,
67+
val total: Int? = null,
68+
)
69+
70+
enum class IconType {
71+
FILE,
72+
FOLDER,
73+
CODE_BLOCK,
74+
LIST_ADD,
75+
MAGIC,
76+
HELP,
77+
TRASH,
78+
SEARCH,
79+
CALENDAR,
80+
;
81+
82+
val value: String
83+
get() = name.lowercase().replace('_', '-')
84+
85+
companion object {
86+
private val stringToEnum: Map<String, IconType> = entries.associateBy { it.name.lowercase() }
87+
88+
fun fromString(value: String): IconType = stringToEnum[value] ?: throw IllegalArgumentException("Unknown IconType: $value")
89+
}
90+
}
91+
92+
enum class Status {
93+
INFO,
94+
SUCCESS,
95+
WARNING,
96+
ERROR,
97+
;
98+
99+
val value: String
100+
get() = name.lowercase()
101+
}
102+
103+
enum class ButtonStatus {
104+
MAIN,
105+
PRIMARY,
106+
CLEAR,
107+
INFO,
108+
SUCCESS,
109+
WARNING,
110+
ERROR,
111+
;
112+
113+
val value: String
114+
get() = name.lowercase()
115+
}
116+
117+
enum class MessageType {
118+
ANSWER,
119+
PROMPT,
120+
SYSTEM_PROMPT,
121+
DIRECTIVE,
122+
TOOL,
123+
;
124+
125+
val value: String
126+
get() = name.lowercase().replace('_', '-')
127+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@ const val CHAT_FOLLOW_UP_CLICK = "aws/chat/followUpClick"
1616
const val CHAT_TAB_ADD = "aws/chat/tabAdd"
1717
const val CHAT_TAB_CHANGE = "aws/chat/tabChange"
1818
const val CHAT_TAB_REMOVE = "aws/chat/tabRemove"
19+
const val CHAT_OPEN_TAB = "aws/chat/openTab"
1920
const val CHAT_BUTTON_CLICK = "aws/chat/buttonClick"

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,27 @@ data class TabEventRequest(
1111
data class TabEventParams(
1212
val tabId: String,
1313
)
14+
15+
data class OpenTabResult(
16+
val tabId: String,
17+
)
18+
19+
data class OpenTabParams(
20+
val tabId: String? = null,
21+
val newTabOptions: NewTabOptions? = null,
22+
)
23+
24+
data class NewTabOptions(
25+
val state: TabState? = null,
26+
val data: TabData? = null,
27+
)
28+
29+
data class TabState(
30+
val inProgress: Boolean? = null,
31+
val cancellable: Boolean? = null,
32+
)
33+
34+
data class TabData(
35+
val placeholderText: String? = null,
36+
val messages: List<ChatMessage>,
37+
)

0 commit comments

Comments
 (0)