Skip to content

Commit 8c6014d

Browse files
committed
Add events to trigger file refresh on file changes in agentic
1 parent 810c815 commit 8c6014d

File tree

5 files changed

+77
-0
lines changed

5 files changed

+77
-0
lines changed

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ import org.eclipse.lsp4j.services.LanguageClient
99
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LSPAny
1010
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_CONTEXT_COMMANDS
1111
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE
12+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CopyFileParams
13+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.DID_APPEND_FILE
14+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.DID_COPY_FILE
15+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.DID_CREATE_DIRECTORY
16+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.DID_REMOVE_FILE
17+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.DID_WRITE_FILE
18+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileParams
1219
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
1320
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
1421
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_FILE_DIFF
@@ -45,4 +52,19 @@ interface AmazonQLanguageClient : LanguageClient {
4552

4653
@JsonNotification(CHAT_SEND_CONTEXT_COMMANDS)
4754
fun sendContextCommands(params: LSPAny): CompletableFuture<Unit>
55+
56+
@JsonNotification(DID_COPY_FILE)
57+
fun copyFile(params: CopyFileParams): CompletableFuture<Unit>
58+
59+
@JsonNotification(DID_WRITE_FILE)
60+
fun writeFile(params: FileParams): CompletableFuture<Unit>
61+
62+
@JsonNotification(DID_APPEND_FILE)
63+
fun appendFile(params: FileParams): CompletableFuture<Unit>
64+
65+
@JsonNotification(DID_REMOVE_FILE)
66+
fun removeFile(params: FileParams): CompletableFuture<Unit>
67+
68+
@JsonNotification(DID_CREATE_DIRECTORY)
69+
fun createDirectory(params: FileParams): CompletableFuture<Unit>
4870
}

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.intellij.openapi.fileChooser.FileSaverDescriptor
1414
import com.intellij.openapi.fileEditor.FileEditorManager
1515
import com.intellij.openapi.project.Project
1616
import com.intellij.openapi.vfs.LocalFileSystem
17+
import com.intellij.openapi.vfs.VfsUtil
1718
import com.intellij.openapi.vfs.VirtualFileManager
1819
import migration.software.aws.toolkits.jetbrains.settings.AwsSettings
1920
import org.eclipse.lsp4j.ConfigurationParams
@@ -38,6 +39,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LSPAny
3839
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_OPEN_TAB
3940
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_CONTEXT_COMMANDS
4041
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE
42+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CopyFileParams
43+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileParams
4144
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
4245
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
4346
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenFileDiffParams
@@ -55,6 +58,7 @@ import java.nio.file.Paths
5558
import java.util.UUID
5659
import java.util.concurrent.CompletableFuture
5760
import java.util.concurrent.TimeUnit
61+
import kotlin.io.path.Path
5862

5963
/**
6064
* Concrete implementation of [AmazonQLanguageClient] to handle messages sent from server
@@ -348,6 +352,34 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
348352
return CompletableFuture.completedFuture(Unit)
349353
}
350354

355+
override fun appendFile(params: FileParams): CompletableFuture<Unit> = refreshVfs(params.path, false)
356+
357+
override fun createDirectory(params: FileParams): CompletableFuture<Unit> = refreshVfs(params.path, true)
358+
359+
override fun removeFile(params: FileParams): CompletableFuture<Unit> = refreshVfs(params.path, true)
360+
361+
override fun writeFile(params: FileParams): CompletableFuture<Unit> = refreshVfs(params.path, false)
362+
363+
override fun copyFile(params: CopyFileParams): CompletableFuture<Unit> {
364+
refreshVfs(params.oldPath, false)
365+
return refreshVfs(params.newPath, false)
366+
}
367+
368+
fun refreshVfs(path: String, isDirectory: Boolean): CompletableFuture<Unit> {
369+
return try {
370+
CompletableFuture.supplyAsync(
371+
{
372+
VirtualFileManager.getInstance().refreshAndFindFileByNioPath(Path(path))
373+
val vfile = VirtualFileManager.getInstance().findFileByUrl(path) ?: return@supplyAsync
374+
VfsUtil.markDirtyAndRefresh(true, isDirectory, isDirectory, vfile)
375+
},
376+
ApplicationManager.getApplication()::invokeLater
377+
)
378+
} catch (e: Exception) {
379+
CompletableFuture.failedFuture(e)
380+
}
381+
}
382+
351383
companion object {
352384
private val LOG = getLogger<AmazonQLanguageClientImpl>()
353385
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat
5+
6+
data class CopyFileParams(
7+
val oldPath: String,
8+
val newPath: String,
9+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat
5+
6+
data class FileParams(
7+
val path: String,
8+
)

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ const val CHAT_TAB_BAR_ACTIONS = "aws/chat/tabBarAction"
3131
const val CHAT_TAB_CHANGE = "aws/chat/tabChange"
3232
const val CHAT_TAB_REMOVE = "aws/chat/tabRemove"
3333

34+
const val DID_COPY_FILE = "aws/didCopyFile"
35+
const val DID_WRITE_FILE = "aws/didWriteFile"
36+
const val DID_APPEND_FILE = "aws/didAppendFile"
37+
const val DID_REMOVE_FILE = "aws/didRemoveFileOrDirectory"
38+
const val DID_CREATE_DIRECTORY = "aws/didRemoveFileOrDirectory"
39+
3440
const val GET_SERIALIZED_CHAT_REQUEST_METHOD = "aws/chat/getSerializedChat"
3541

3642
const val OPEN_FILE_DIFF = "aws/openFileDiff"

0 commit comments

Comments
 (0)