Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INFO_LINK_CLICK
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_INSERT_TO_CURSOR
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_LINK_CLICK
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_OPEN_TAB
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_PROMPT_OPTION_ACKNOWLEDGED
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_QUICK_ACTION
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_READY
Expand Down Expand Up @@ -75,6 +76,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Inser
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickNotification
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResponse
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMPT_INPUT_OPTIONS_CHANGE
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeNotification
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams
Expand Down Expand Up @@ -282,6 +284,13 @@ class BrowserConnector(
server.tabChange(params)
}
}
CHAT_OPEN_TAB -> {
val response = serializer.deserializeChatMessages<OpenTabResponse>(node)
ChatCommunicationManager.completeTabOpen(
response.requestId,
response.params.result.tabId
)
}
CHAT_INSERT_TO_CURSOR -> {
handleChatNotification<InsertToCursorPositionNotification, InsertToCursorPositionParams>(node) { server, params ->
server.insertToCursorPosition(params)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatUiListener
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_OPEN_TAB
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatUpdateParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabParams
Expand All @@ -35,7 +36,9 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credential
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.SsoProfileData
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
import java.util.UUID
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit

/**
* Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server
Expand Down Expand Up @@ -112,9 +115,27 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
}
}

override fun openTab(params: OpenTabParams): CompletableFuture<OpenTabResult> =
// TODO implement chat history, this is here to unblock chat functionality
CompletableFuture.completedFuture(OpenTabResult(""))
override fun openTab(params: OpenTabParams): CompletableFuture<OpenTabResult> {
val requestId = UUID.randomUUID().toString()
val result = CompletableFuture<OpenTabResult>()
ChatCommunicationManager.pendingTabRequests[requestId] = result

val uiMessage = """
{
"command": "$CHAT_OPEN_TAB",
"params": ${Gson().toJson(params)},
"requestId": "$requestId"
}
""".trimIndent()
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)

result.orTimeout(30000, TimeUnit.MILLISECONDS)
.whenComplete { _, error ->
ChatCommunicationManager.pendingTabRequests.remove(requestId)
}

return result
}

override fun configuration(params: ConfigurationParams): CompletableFuture<List<Any>> {
if (params.items.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import org.eclipse.lsp4j.ProgressParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ProgressNotificationUtils.getObject
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenTabResult
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
import java.util.UUID
import java.util.concurrent.CompletableFuture
import java.util.concurrent.ConcurrentHashMap

@Service(Service.Level.PROJECT)
Expand Down Expand Up @@ -53,6 +55,7 @@
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)
}
}

companion object {
fun getInstance(project: Project) = project.service<ChatCommunicationManager>()

Expand All @@ -65,5 +68,17 @@
"isPartialResult": $isPartialResult
}
""".trimIndent()

val pendingTabRequests = ConcurrentHashMap<String, CompletableFuture<OpenTabResult>>()

fun addPendingOpenTabRequest(requestId: String): CompletableFuture<OpenTabResult> {

Check warning on line 74 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/ChatCommunicationManager.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused symbol

Function "addPendingOpenTabRequest" is never used
return CompletableFuture<OpenTabResult>().also { future ->
pendingTabRequests[requestId] = future
}
}

fun completeTabOpen(requestId: String, tabId: String) {
pendingTabRequests.remove(requestId)?.complete(OpenTabResult(tabId))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,26 @@ data class TabEventParams(
val tabId: String,
)

data class OpenTabResult(
val tabId: String,
)

data class OpenTabParams(
val tabId: String? = null,
val newTabOptions: NewTabOptions? = null,
)

data class OpenTabResponse(
val requestId: String,
val command: String,
val params: OpenTabResponseParams,
)

data class OpenTabResponseParams(
val success: Boolean,
val result: OpenTabResult,
)

data class OpenTabResult(
val tabId: String,
)

data class NewTabOptions(
val state: TabState? = null,
val data: TabData? = null,
Expand Down
Loading