diff --git a/.changes/next-release/bugfix-34e86cbc-9ae3-4d53-ac6b-67f2215c1930.json b/.changes/next-release/bugfix-34e86cbc-9ae3-4d53-ac6b-67f2215c1930.json new file mode 100644 index 00000000000..25adf39f8ce --- /dev/null +++ b/.changes/next-release/bugfix-34e86cbc-9ae3-4d53-ac6b-67f2215c1930.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : " fix(featureDev): File Rejection stopped working" +} \ No newline at end of file diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt index 056d4f91059..4a62e044de2 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt @@ -44,7 +44,6 @@ import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.Follo import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.IncomingFeatureDevMessage import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.initialExamples import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendAnswer -import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendAnswerPart import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendAsyncEventProgress import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendAuthNeededException import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendAuthenticationInProgressMessage @@ -231,6 +230,7 @@ class FeatureDevController( override suspend fun processFileClicked(message: IncomingFeatureDevMessage.FileClicked) { val fileToUpdate = message.filePath val session = getSessionInfo(message.tabId) + val messageId = message.messageId var filePaths: List = emptyList() var deletedFiles: List = emptyList() @@ -245,7 +245,7 @@ class FeatureDevController( filePaths.find { it.zipFilePath == fileToUpdate }?.let { it.rejected = !it.rejected } deletedFiles.find { it.zipFilePath == fileToUpdate }?.let { it.rejected = !it.rejected } - messenger.updateFileComponent(message.tabId, filePaths, deletedFiles) + messenger.updateFileComponent(message.tabId, filePaths, deletedFiles, messageId) } private suspend fun newTabOpened(tabId: String) { @@ -522,19 +522,16 @@ class FeatureDevController( messenger.sendAnswer( tabId = tabId, - messageType = FeatureDevMessageType.Answer, + messageType = FeatureDevMessageType.AnswerStream, message = message("amazonqFeatureDev.create_plan"), ) - // Ensure that the loading icon stays showing - messenger.sendAsyncEventProgress(tabId = tabId, inProgress = true) - messenger.sendUpdatePlaceholder(tabId, message("amazonqFeatureDev.placeholder.generating_approach")) val interactions = session.send(message) messenger.sendUpdatePlaceholder(tabId, message("amazonqFeatureDev.placeholder.iterate_plan")) - messenger.sendAnswerPart(tabId = tabId, message = interactions.content, canBeVoted = interactions.interactionSucceeded) + messenger.sendAnswer(tabId = tabId, message = interactions.content, messageType = FeatureDevMessageType.Answer, canBeVoted = true) if (interactions.interactionSucceeded) { messenger.sendAnswer( diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessage.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessage.kt index e702aad73bb..bbdac562607 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessage.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessage.kt @@ -133,7 +133,8 @@ data class UpdatePlaceholderMessage( data class FileComponent( @JsonProperty("tabID") override val tabId: String, val filePaths: List, - val deletedFiles: List + val deletedFiles: List, + val messageId: String ) : UiMessage( tabId = tabId, type = "updateFileComponent" diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessagePublisherExtensions.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessagePublisherExtensions.kt index cff594c5586..4891ebccb83 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessagePublisherExtensions.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessagePublisherExtensions.kt @@ -58,11 +58,12 @@ suspend fun MessagePublisher.sendSystemPrompt( ) } -suspend fun MessagePublisher.updateFileComponent(tabId: String, filePaths: List, deletedFiles: List) { +suspend fun MessagePublisher.updateFileComponent(tabId: String, filePaths: List, deletedFiles: List, messageId: String) { val fileComponentMessage = FileComponent( tabId = tabId, filePaths = filePaths, deletedFiles = deletedFiles, + messageId = messageId, ) this.publish(fileComponentMessage) } diff --git a/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevControllerTest.kt b/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevControllerTest.kt index 2ae7b56886a..1a9edabf5de 100644 --- a/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevControllerTest.kt +++ b/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevControllerTest.kt @@ -388,6 +388,6 @@ class FeatureDevControllerTest : FeatureDevTestBase() { val newFileContentsCopy = newFileContents.toList() newFileContentsCopy[0].rejected = !newFileContentsCopy[0].rejected - coVerify { messenger.updateFileComponent(testTabId, newFileContentsCopy, deletedFiles) } + coVerify { messenger.updateFileComponent(testTabId, newFileContentsCopy, deletedFiles, "") } } } diff --git a/plugins/amazonq/mynah-ui/package-lock.json b/plugins/amazonq/mynah-ui/package-lock.json index 3a9cf174504..0d78f26f0b3 100644 --- a/plugins/amazonq/mynah-ui/package-lock.json +++ b/plugins/amazonq/mynah-ui/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@aws/mynah-ui-chat": "npm:@aws/mynah-ui@4.9.0", + "@aws/mynah-ui-chat": "npm:@aws/mynah-ui@4.9.2", "@types/node": "^14.18.5", "fs-extra": "^10.0.1", "sanitize-html": "^2.12.1", @@ -57,9 +57,9 @@ }, "node_modules/@aws/mynah-ui-chat": { "name": "@aws/mynah-ui", - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@aws/mynah-ui/-/mynah-ui-4.9.0.tgz", - "integrity": "sha512-XlvtQ89km6NI9EwJ0DRTbFv6hvs+0vW/gdsmwoD6fBJLSl8kfiRUCteUjTDsnfVMMqtfx+7FnmHo5p6+xbG0gg==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/@aws/mynah-ui/-/mynah-ui-4.9.2.tgz", + "integrity": "sha512-w8xAyFhi5nTy+aMBo/AEGSx+FtPhzaVrjjtfQz5g8gJDFoWmVdGI1vIJCZcz6cHHyV/7acb7ULcOYY5Do4uWoQ==", "hasInstallScript": true, "dependencies": { "just-clone": "^6.2.0", diff --git a/plugins/amazonq/mynah-ui/package.json b/plugins/amazonq/mynah-ui/package.json index 8f056c6549e..2ac83bb0250 100644 --- a/plugins/amazonq/mynah-ui/package.json +++ b/plugins/amazonq/mynah-ui/package.json @@ -12,7 +12,7 @@ "lintfix": "eslint -c .eslintrc.js --fix --ext .ts ." }, "dependencies": { - "@aws/mynah-ui-chat": "npm:@aws/mynah-ui@4.9.0", + "@aws/mynah-ui-chat": "npm:@aws/mynah-ui@4.9.2", "@types/node": "^14.18.5", "fs-extra": "^10.0.1", "ts-node": "^10.7.0", diff --git a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/featureDevChatConnector.ts b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/featureDevChatConnector.ts index cc9f2af394a..482e3b0addc 100644 --- a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/featureDevChatConnector.ts +++ b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/featureDevChatConnector.ts @@ -28,7 +28,7 @@ export interface ConnectorProps { onUpdateAuthentication: (featureDevEnabled: boolean, codeTransformEnabled: boolean, authenticatingTabIDs: string[]) => void onNewTab: (tabType: TabType) => void tabsStorage: TabsStorage - onFileComponentUpdate: (tabID: string, filePaths: DiffTreeFileInfo[], deletedFiles: DiffTreeFileInfo[]) => void + onFileComponentUpdate: (tabID: string, filePaths: DiffTreeFileInfo[], deletedFiles: DiffTreeFileInfo[], messageId: string) => void } export class Connector { @@ -201,7 +201,7 @@ export class Connector { handleMessageReceive = async (messageData: any): Promise => { if (messageData.type === 'updateFileComponent') { - this.onFileComponentUpdate(messageData.tabID, messageData.filePaths, messageData.deletedFiles) + this.onFileComponentUpdate(messageData.tabID, messageData.filePaths, messageData.deletedFiles, messageData.messageId) return } if (messageData.type === 'errorMessage') { diff --git a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts index e6772de79ba..c233e1b12be 100644 --- a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts +++ b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts @@ -43,7 +43,7 @@ export interface ConnectorProps { onCWCOnboardingPageInteractionMessage: (message: ChatItem) => string | undefined onError: (tabID: string, message: string, title: string) => void onWarning: (tabID: string, message: string, title: string) => void - onFileComponentUpdate: (tabID: string, filePaths: DiffTreeFileInfo[], deletedFiles: DiffTreeFileInfo[]) => void + onFileComponentUpdate: (tabID: string, filePaths: DiffTreeFileInfo[], deletedFiles: DiffTreeFileInfo[], messageId: string) => void onUpdatePlaceholder: (tabID: string, newPlaceholder: string) => void onChatInputEnabled: (tabID: string, enabled: boolean) => void onUpdateAuthentication: (featureDevEnabled: boolean, codeTransformEnabled: boolean, authenticatingTabIDs: string[]) => void diff --git a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts index e860f0c6589..002df38b8af 100644 --- a/plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts +++ b/plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts @@ -274,7 +274,7 @@ export const createMynahUI = (ideApi: any, featureDevInitEnabled: boolean, codeT onMessageReceived: (tabID: string, messageData: MynahUIDataModel) => { mynahUI.updateStore(tabID, messageData) }, - onFileComponentUpdate: (tabID: string, filePaths: DiffTreeFileInfo[], deletedFiles: DiffTreeFileInfo[]) => { + onFileComponentUpdate: (tabID: string, filePaths: DiffTreeFileInfo[], deletedFiles: DiffTreeFileInfo[], messageId: string) => { const updateWith: Partial = { type: ChatItemType.ANSWER, fileList: { @@ -285,7 +285,7 @@ export const createMynahUI = (ideApi: any, featureDevInitEnabled: boolean, codeT actions: getActions([...filePaths, ...deletedFiles]), }, } - mynahUI.updateLastChatAnswer(tabID, updateWith) + mynahUI.updateChatAnswerWithMessageId(tabID, messageId, updateWith) }, onWarning: (tabID: string, message: string, title: string) => { mynahUI.notify({