33@file:Suppress(" BannedImports" )
44package software.aws.toolkits.jetbrains.services.amazonq.lsp
55
6- import com.google.gson.Gson
76import com.intellij.diff.DiffContentFactory
87import com.intellij.diff.DiffManager
98import com.intellij.diff.DiffManagerEx
@@ -26,13 +25,15 @@ import org.eclipse.lsp4j.PublishDiagnosticsParams
2625import org.eclipse.lsp4j.ShowDocumentParams
2726import org.eclipse.lsp4j.ShowDocumentResult
2827import org.eclipse.lsp4j.ShowMessageRequestParams
28+ import software.aws.toolkits.core.utils.error
2929import software.aws.toolkits.core.utils.getLogger
3030import software.aws.toolkits.core.utils.warn
3131import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
3232import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
3333import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
3434import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatUiListener
3535import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
36+ import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMessage
3637import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LSPAny
3738import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_OPEN_TAB
3839import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_CONTEXT_COMMANDS
@@ -136,20 +137,20 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
136137 override fun openTab (params : OpenTabParams ): CompletableFuture <OpenTabResult > {
137138 val requestId = UUID .randomUUID().toString()
138139 val result = CompletableFuture <OpenTabResult >()
139- ChatCommunicationManager .pendingTabRequests[requestId] = result
140-
141- val uiMessage = """
142- {
143- "command": " $CHAT_OPEN_TAB ",
144- "params": ${ Gson ().toJson(params)} ,
145- "requestId": " $requestId "
146- }
147- """ .trimIndent( )
148- AsyncChatUiListener .notifyPartialMessageUpdate(uiMessage )
140+ val chatManager = ChatCommunicationManager .getInstance(project)
141+ chatManager.addTabOpenRequest(requestId, result)
142+
143+ chatManager.notifyUi(
144+ FlareUiMessage (
145+ command = CHAT_OPEN_TAB ,
146+ params = params,
147+ requestId = requestId,
148+ )
149+ )
149150
150151 result.orTimeout(30000 , TimeUnit .MILLISECONDS )
151152 .whenComplete { _, error ->
152- ChatCommunicationManager .pendingTabRequests.remove (requestId)
153+ chatManager.removeTabOpenRequest (requestId)
153154 }
154155
155156 return result
@@ -188,21 +189,20 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
188189 override fun getSerializedChat (params : GetSerializedChatParams ): CompletableFuture <GetSerializedChatResult > {
189190 val requestId = UUID .randomUUID().toString()
190191 val result = CompletableFuture <GetSerializedChatResult >()
191-
192- ChatCommunicationManager .pendingSerializedChatRequests[requestId] = result
193-
194- val uiMessage = """
195- {
196- "command": "$GET_SERIALIZED_CHAT_REQUEST_METHOD ",
197- "params": ${Gson ().toJson(params)} ,
198- "requestId": "$requestId "
199- }
200- """ .trimIndent()
201- AsyncChatUiListener .notifyPartialMessageUpdate(uiMessage)
192+ val chatManager = ChatCommunicationManager .getInstance(project)
193+ chatManager.addSerializedChatRequest(requestId, result)
194+
195+ chatManager.notifyUi(
196+ FlareUiMessage (
197+ command = GET_SERIALIZED_CHAT_REQUEST_METHOD ,
198+ params = params,
199+ requestId = requestId,
200+ )
201+ )
202202
203203 result.orTimeout(30000 , TimeUnit .MILLISECONDS )
204204 .whenComplete { _, error ->
205- ChatCommunicationManager .pendingSerializedChatRequests.remove (requestId)
205+ chatManager.removeSerializedChatRequest (requestId)
206206 }
207207
208208 return result
@@ -257,19 +257,17 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
257257 try {
258258 chatCommunicationManager.handlePartialResultProgressNotification(project, params)
259259 } catch (e: Exception ) {
260- error(" Cannot handle partial chat" )
260+ LOG . error(e) { " Cannot handle partial chat" }
261261 }
262262 }
263263
264264 override fun sendChatUpdate (params : ChatUpdateParams ): CompletableFuture <Unit > {
265- val uiMessage = """
266- {
267- "command":"$CHAT_SEND_UPDATE ",
268- "params":${Gson ().toJson(params)}
269- }
270- """ .trimIndent()
271-
272- AsyncChatUiListener .notifyPartialMessageUpdate(uiMessage)
265+ AsyncChatUiListener .notifyPartialMessageUpdate(
266+ FlareUiMessage (
267+ command = CHAT_SEND_UPDATE ,
268+ params = params,
269+ )
270+ )
273271
274272 return CompletableFuture .completedFuture(Unit )
275273 }
@@ -343,15 +341,13 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
343341 )
344342
345343 override fun sendContextCommands (params : LSPAny ): CompletableFuture <Unit > {
346- val showContextCommands = """
347- {
348- "command":"$CHAT_SEND_CONTEXT_COMMANDS ",
349- "params": ${Gson ().toJson(params)}
350- }
351- """ .trimIndent()
352-
353- AsyncChatUiListener .notifyPartialMessageUpdate(showContextCommands)
354-
344+ val chatManager = ChatCommunicationManager .getInstance(project)
345+ chatManager.notifyUi(
346+ FlareUiMessage (
347+ command = CHAT_SEND_CONTEXT_COMMANDS ,
348+ params = params ? : error(" received empty payload for $CHAT_SEND_CONTEXT_COMMANDS " ),
349+ )
350+ )
355351 return CompletableFuture .completedFuture(Unit )
356352 }
357353
0 commit comments