Skip to content

Commit 09be52d

Browse files
fix(amazonq): implement logic so aws/chat/openTab returns correct tabID to server (#5658)
* send openTab to browser * initial * Show options to for chat history and export in tab bar * add requestID and mapping * remove println * move tab request map into ChatCommunicationManager * refactor for consistency * detekt * detekt --------- Co-authored-by: Manodnya Bhoite <[email protected]>
1 parent 95a5d34 commit 09be52d

File tree

4 files changed

+54
-7
lines changed

4 files changed

+54
-7
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
4646
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK
4747
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INSERT_TO_CURSOR
4848
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_LINK_CLICK
49+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_OPEN_TAB
4950
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_PROMPT_OPTION_ACKNOWLEDGED
5051
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_QUICK_ACTION
5152
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_READY
@@ -79,6 +80,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Inser
7980
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionParams
8081
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickNotification
8182
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams
83+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResponse
8284
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMPT_INPUT_OPTIONS_CHANGE
8385
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeNotification
8486
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams
@@ -288,6 +290,13 @@ class BrowserConnector(
288290
server.tabChange(params)
289291
}
290292
}
293+
CHAT_OPEN_TAB -> {
294+
val response = serializer.deserializeChatMessages<OpenTabResponse>(node)
295+
ChatCommunicationManager.completeTabOpen(
296+
response.requestId,
297+
response.params.result.tabId
298+
)
299+
}
291300
CHAT_INSERT_TO_CURSOR -> {
292301
handleChatNotification<InsertToCursorPositionNotification, InsertToCursorPositionParams>(node) { server, params ->
293302
server.insertToCursorPosition(params)

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

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
2828
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
2929
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatUiListener
3030
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
31+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_OPEN_TAB
3132
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE
3233
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatUpdateParams
3334
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
@@ -120,9 +121,27 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
120121
}
121122
}
122123

123-
override fun openTab(params: OpenTabParams): CompletableFuture<OpenTabResult> =
124-
// TODO implement chat history, this is here to unblock chat functionality
125-
CompletableFuture.completedFuture(OpenTabResult(""))
124+
override fun openTab(params: OpenTabParams): CompletableFuture<OpenTabResult> {
125+
val requestId = UUID.randomUUID().toString()
126+
val result = CompletableFuture<OpenTabResult>()
127+
ChatCommunicationManager.pendingTabRequests[requestId] = result
128+
129+
val uiMessage = """
130+
{
131+
"command": "$CHAT_OPEN_TAB",
132+
"params": ${Gson().toJson(params)},
133+
"requestId": "$requestId"
134+
}
135+
""".trimIndent()
136+
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)
137+
138+
result.orTimeout(30000, TimeUnit.MILLISECONDS)
139+
.whenComplete { _, error ->
140+
ChatCommunicationManager.pendingTabRequests.remove(requestId)
141+
}
142+
143+
return result
144+
}
126145

127146
override fun showSaveFileDialog(params: ShowSaveFileDialogParams): CompletableFuture<ShowSaveFileDialogResult> {
128147
val filters = mutableListOf<String>()

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.eclipse.lsp4j.ProgressParams
1111
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
1212
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ProgressNotificationUtils.getObject
1313
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
14+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult
1415
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
1516
import java.util.UUID
1617
import java.util.concurrent.CompletableFuture
@@ -56,6 +57,7 @@ class ChatCommunicationManager {
5657
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)
5758
}
5859
}
60+
5961
companion object {
6062
fun getInstance(project: Project) = project.service<ChatCommunicationManager>()
6163

@@ -74,6 +76,12 @@ class ChatCommunicationManager {
7476
}
7577
""".trimIndent()
7678

79+
val pendingTabRequests = ConcurrentHashMap<String, CompletableFuture<OpenTabResult>>()
80+
81+
fun completeTabOpen(requestId: String, tabId: String) {
82+
pendingTabRequests.remove(requestId)?.complete(OpenTabResult(tabId))
83+
}
84+
7785
inline fun <reified T> convertNotificationToJsonForChat(command: String, params: T? = null) =
7886
"""
7987
{

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,26 @@ data class TabEventParams(
1212
val tabId: String,
1313
)
1414

15-
data class OpenTabResult(
16-
val tabId: String,
17-
)
18-
1915
data class OpenTabParams(
2016
val tabId: String? = null,
2117
val newTabOptions: NewTabOptions? = null,
2218
)
2319

20+
data class OpenTabResponse(
21+
val requestId: String,
22+
val command: String,
23+
val params: OpenTabResponseParams,
24+
)
25+
26+
data class OpenTabResponseParams(
27+
val success: Boolean,
28+
val result: OpenTabResult,
29+
)
30+
31+
data class OpenTabResult(
32+
val tabId: String,
33+
)
34+
2435
data class NewTabOptions(
2536
val state: TabState? = null,
2637
val data: TabData? = null,

0 commit comments

Comments
 (0)