@@ -17,26 +17,36 @@ import kotlinx.coroutines.flow.distinctUntilChanged
1717import  kotlinx.coroutines.flow.launchIn 
1818import  kotlinx.coroutines.flow.merge 
1919import  kotlinx.coroutines.flow.onEach 
20- import  kotlinx.coroutines.future.await 
2120import  kotlinx.coroutines.launch 
2221import  org.cef.browser.CefBrowser 
2322import  org.eclipse.lsp4j.Position 
2423import  org.eclipse.lsp4j.Range 
2524import  software.aws.toolkits.jetbrains.services.amazonq.apps.AppConnection 
2625import  software.aws.toolkits.jetbrains.services.amazonq.commands.MessageSerializer 
26+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer 
2727import  software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService 
2828import  software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager 
2929import  software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager 
3030import  software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.getTextDocumentIdentifier 
31+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK 
32+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_LINK_CLICK 
3133import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_QUICK_ACTION 
34+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SOURCE_LINK_CLICK 
35+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatNotification 
3236import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatParams 
3337import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatPrompt 
3438import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CursorState 
3539import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams 
3640import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams 
41+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickNotification 
42+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams 
43+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickNotification 
44+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams 
3745import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.QuickChatActionRequest 
3846import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT 
3947import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest 
48+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickNotification 
49+ import  software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SourceLinkClickParams 
4050import  software.aws.toolkits.jetbrains.services.amazonq.util.command 
4151import  software.aws.toolkits.jetbrains.services.amazonq.util.tabType 
4252import  software.aws.toolkits.jetbrains.services.amazonq.webview.theme.AmazonQTheme 
@@ -205,6 +215,23 @@ class BrowserConnector(
205215
206216                showResult(result, partialResultToken, tabId, encryptionManager, browser)
207217            }
218+             CHAT_LINK_CLICK  ->  {
219+                 handleChatNotification<LinkClickNotification , LinkClickParams >(node) { server, params -> 
220+                     server.linkClick(params)
221+                 }
222+             }
223+ 
224+             CHAT_INFO_LINK_CLICK  ->  {
225+                 handleChatNotification<InfoLinkClickNotification , InfoLinkClickParams >(node) { server, params -> 
226+                     server.infoLinkClick(params)
227+                 }
228+             }
229+ 
230+             CHAT_SOURCE_LINK_CLICK  ->  {
231+                 handleChatNotification<SourceLinkClickNotification , SourceLinkClickParams >(node) { server, params -> 
232+                     server.sourceLinkClick(params)
233+                 }
234+             }
208235        }
209236    }
210237
@@ -226,4 +253,14 @@ class BrowserConnector(
226253            browser.postChat(messageToChat)
227254        }
228255    }
256+ 
257+     private  inline  fun  <reified  T , R > handleChatNotification (
258+         node :  JsonNode ,
259+         crossinline serverAction :  (server: AmazonQLanguageServer , params: R ) ->  CompletableFuture <* >,
260+     ): CompletableFuture <* > where T  : ChatNotification <R > {
261+         val  requestFromUi =  serializer.deserializeChatMessages<T >(node)
262+         return  AmazonQLspService .executeIfRunning(project) { server -> 
263+             serverAction(server, requestFromUi.params)
264+         } ? :  CompletableFuture .failedFuture<Unit >(IllegalStateException (" LSP Server not running"  ))
265+     }
229266}
0 commit comments