Skip to content

Commit 92b30dc

Browse files
committed
feat(q): enable image context
1 parent 29fd4e7 commit 92b30dc

File tree

5 files changed

+46
-0
lines changed

5 files changed

+46
-0
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_S
7474
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResponse
7575
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LIST_MCP_SERVERS_REQUEST_METHOD
7676
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.MCP_SERVER_CLICK_REQUEST_METHOD
77+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_FILE_DIALOG_REQUEST_METHOD
7778
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_SETTINGS
7879
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_WORKSPACE_SETTINGS_KEY
7980
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenSettingsNotification
@@ -85,6 +86,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMP
8586
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.QuickChatActionRequest
8687
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
8788
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.STOP_CHAT_RESPONSE
89+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_FILE_DIALOG
8890
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
8991
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.StopResponseMessage
9092
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TELEMETRY_EVENT
@@ -485,6 +487,17 @@ class BrowserConnector(
485487
)
486488
}
487489
}
490+
OPEN_FILE_DIALOG -> {
491+
handleChat(AmazonQChatServer.showOpenFileDialog, node)
492+
.whenComplete { response, _ ->
493+
browser.postChat(
494+
FlareUiMessage(
495+
command = OPEN_FILE_DIALOG_REQUEST_METHOD,
496+
params = response
497+
)
498+
)
499+
}
500+
}
488501
}
489502
}
490503

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LIST_
4242
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams
4343
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ListConversationsParams
4444
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.MCP_SERVER_CLICK_REQUEST_METHOD
45+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_FILE_DIALOG_REQUEST_METHOD
4546
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMPT_INPUT_OPTIONS_CHANGE
4647
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams
4748
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
@@ -222,4 +223,10 @@ object AmazonQChatServer : JsonRpcMethodProvider {
222223
TELEMETRY_EVENT,
223224
Any::class.java
224225
)
226+
227+
val showOpenFileDialog = JsonRpcRequest(
228+
OPEN_FILE_DIALOG_REQUEST_METHOD,
229+
Any::class.java,
230+
LSPAny::class.java
231+
)
225232
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_S
2222
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
2323
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_FILE_DIFF
2424
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenFileDiffParams
25+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SHOW_OPEN_FILE_DIALOG_REQUEST_METHOD
2526
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD
2627
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogParams
2728
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ShowSaveFileDialogResult
@@ -42,6 +43,9 @@ interface AmazonQLanguageClient : LanguageClient {
4243
@JsonRequest(SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD)
4344
fun showSaveFileDialog(params: ShowSaveFileDialogParams): CompletableFuture<ShowSaveFileDialogResult>
4445

46+
@JsonRequest(SHOW_OPEN_FILE_DIALOG_REQUEST_METHOD)
47+
fun showOpenFileDialog(params: LSPAny): CompletableFuture<LSPAny>
48+
4549
@JsonRequest(GET_SERIALIZED_CHAT_REQUEST_METHOD)
4650
fun getSerializedChat(params: LSPAny): CompletableFuture<GetSerializedChatResult>
4751

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import com.intellij.notification.NotificationType
1212
import com.intellij.openapi.application.ApplicationManager
1313
import com.intellij.openapi.fileChooser.FileChooserFactory
1414
import com.intellij.openapi.fileChooser.FileSaverDescriptor
15+
import com.intellij.openapi.fileChooser.FileChooser
16+
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
1517
import com.intellij.openapi.fileEditor.FileEditorManager
1618
import com.intellij.openapi.project.Project
1719
import com.intellij.openapi.vfs.LocalFileSystem
@@ -249,6 +251,23 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
249251
)
250252
}
251253

254+
override fun showOpenFileDialog(params: LSPAny): CompletableFuture<LSPAny> {
255+
return CompletableFuture.supplyAsync(
256+
{
257+
val descriptor = FileChooserDescriptorFactory.createMultipleFilesNoJarsDescriptor().apply {
258+
title = "Select Files"
259+
description = "Choose files to open"
260+
}
261+
262+
val chosenFiles = FileChooser.chooseFiles(descriptor, project, null)
263+
val uris = chosenFiles.map { it.url }
264+
265+
mapOf("uris" to uris) as LSPAny
266+
},
267+
ApplicationManager.getApplication()::invokeLater
268+
)
269+
}
270+
252271
override fun getSerializedChat(params: LSPAny): CompletableFuture<GetSerializedChatResult> {
253272
val requestId = UUID.randomUUID().toString()
254273
val result = CompletableFuture<GetSerializedChatResult>()

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,13 @@ const val PROMPT_INPUT_OPTIONS_CHANGE = "aws/chat/promptInputOptionChange"
4848

4949
const val SEND_CHAT_COMMAND_PROMPT = "aws/chat/sendChatPrompt"
5050
const val SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD = "aws/showSaveFileDialog"
51+
const val SHOW_OPEN_FILE_DIALOG_REQUEST_METHOD = "aws/showOpenFileDialog"
5152
const val STOP_CHAT_RESPONSE = "stopChatResponse"
5253
const val SEND_TO_PROMPT = "sendToPrompt"
54+
const val OPEN_FILE_DIALOG = "openFileDialog"
5355
const val TELEMETRY_EVENT = "telemetry/event"
5456

5557
// https://github.com/aws/language-server-runtimes/blob/112feba70219a98a12f13727d67c540205fa9c9f/types/chat.ts#L32
5658
const val LIST_MCP_SERVERS_REQUEST_METHOD = "aws/chat/listMcpServers"
5759
const val MCP_SERVER_CLICK_REQUEST_METHOD = "aws/chat/mcpServerClick"
60+
const val OPEN_FILE_DIALOG_REQUEST_METHOD = "aws/chat/openFileDialog"

0 commit comments

Comments
 (0)