From e82f0f3a53beda55ce0b2f38a0c93ea0c756e5c7 Mon Sep 17 00:00:00 2001 From: David Hasani Date: Tue, 10 Jun 2025 13:43:26 -0700 Subject: [PATCH 1/3] feat(amazonq): enable agentic workflow --- .../services/codemodernizer/CodeModernizerSession.kt | 1 + .../constants/CodeTransformChatItems.kt | 4 ++-- .../controller/CodeTransformChatController.kt | 12 +++++++++--- .../model/CodeModernizerSessionContext.kt | 1 + .../services/codemodernizer/model/ZipManifest.kt | 4 ++-- .../CodeWhispererCodeModernizerSessionTest.kt | 4 +++- .../aws/toolkits/resources/MessagesBundle.properties | 2 +- 7 files changed, 19 insertions(+), 9 deletions(-) diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerSession.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerSession.kt index 88b055a41b8..0f83724d1b4 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerSession.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerSession.kt @@ -73,6 +73,7 @@ import javax.net.ssl.SSLHandshakeException const val MAX_ZIP_SIZE = 2000000000 // 2GB const val EXPLAINABILITY_V1 = "EXPLAINABILITY_V1" +const val SELECTIVE_TRANSFORMATION_V2 = "SELECTIVE_TRANSFORMATION_V2" // constants for handling SDKClientException const val CONNECTION_REFUSED_ERROR: String = "Connection refused" diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/constants/CodeTransformChatItems.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/constants/CodeTransformChatItems.kt index 9baf422c500..0a97693adc6 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/constants/CodeTransformChatItems.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/constants/CodeTransformChatItems.kt @@ -554,7 +554,7 @@ fun buildTransformResumingChatContent() = CodeTransformChatMessageContent( type = CodeTransformChatMessageType.PendingAnswer, ) -fun buildTransformResultChatContent(result: CodeModernizerJobCompletedResult): CodeTransformChatMessageContent { +fun buildTransformResultChatContent(result: CodeModernizerJobCompletedResult, targetJdkVersion: String = ""): CodeTransformChatMessageContent { val resultMessage = when (result) { is CodeModernizerJobCompletedResult.JobAbortedZipTooLarge -> { "${message( @@ -568,7 +568,7 @@ fun buildTransformResultChatContent(result: CodeModernizerJobCompletedResult): C buildZipUploadFailedChatMessage(result.failureReason) } is CodeModernizerJobCompletedResult.JobCompletedSuccessfully -> { - message("codemodernizer.chat.message.result.success") + message("codemodernizer.chat.message.result.success", targetJdkVersion) } is CodeModernizerJobCompletedResult.JobPartiallySucceeded -> { message("codemodernizer.chat.message.result.partially_success") diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt index 0ee07954037..439da48d011 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt @@ -31,6 +31,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.CodeTransformTele import software.aws.toolkits.jetbrains.services.codemodernizer.EXPLAINABILITY_V1 import software.aws.toolkits.jetbrains.services.codemodernizer.HilTelemetryMetaData import software.aws.toolkits.jetbrains.services.codemodernizer.InboundAppMessagesHandler +import software.aws.toolkits.jetbrains.services.codemodernizer.SELECTIVE_TRANSFORMATION_V2 import software.aws.toolkits.jetbrains.services.codemodernizer.client.GumbyClient import software.aws.toolkits.jetbrains.services.codemodernizer.commands.CodeTransformActionMessage import software.aws.toolkits.jetbrains.services.codemodernizer.commands.CodeTransformCommand @@ -119,6 +120,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.utils.validateSct import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.QFeatureEvent import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.broadcastQEvent import software.aws.toolkits.jetbrains.services.cwc.messages.ChatMessageType +import software.aws.toolkits.jetbrains.utils.notifyStickyInfo import software.aws.toolkits.resources.message import software.aws.toolkits.telemetry.CodeTransformPreValidationError @@ -415,7 +417,7 @@ class CodeTransformChatController( it.sessionContext.customBuildCommand = customBuildCommand } // TODO: add CLIENT_SIDE_BUILD below when releasing CSB - val transformCapabilities = listOf(EXPLAINABILITY_V1) + val transformCapabilities = listOf(EXPLAINABILITY_V1, SELECTIVE_TRANSFORMATION_V2) codeModernizerManager.codeTransformationSession?.let { it.sessionContext.transformCapabilities = transformCapabilities codeModernizerManager.runLocalMavenBuild(context.project, it) @@ -476,7 +478,7 @@ dependencyManagement: - identifier: "com.example:library1" targetVersion: "2.1.0" versionProperty: "library1.version" # Optional - originType: "FIRST_PARTY" # or "THIRD_PARTY" # Optional + originType: "FIRST_PARTY" # or "THIRD_PARTY" - identifier: "com.example:library2" targetVersion: "3.0.0" originType: "THIRD_PARTY" @@ -797,8 +799,12 @@ dependencyManagement: is DownloadArtifactResult.Success -> { if (downloadResult.artifact !is CodeModernizerArtifact) return artifactHandler.notifyUnableToApplyPatch("") codeTransformChatHelper.updateLastPendingMessage( - buildTransformResultChatContent(result) + buildTransformResultChatContent( + result, + codeModernizerManager.codeTransformationSession?.sessionContext?.targetJavaVersion.toString() + ) ) + notifyStickyInfo("jdkVersion", codeModernizerManager.codeTransformationSession?.sessionContext?.targetJavaVersion.toString()) } is DownloadArtifactResult.DownloadFailure -> artifactHandler.notifyUnableToDownload(downloadResult.failureReason) is DownloadArtifactResult.ParseZipFailure -> artifactHandler.notifyUnableToApplyPatch(downloadResult.failureReason.errorMessage) diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/CodeModernizerSessionContext.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/CodeModernizerSessionContext.kt index 93bf8a20b1a..0f567285a09 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/CodeModernizerSessionContext.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/CodeModernizerSessionContext.kt @@ -49,6 +49,7 @@ const val CUSTOM_DEPENDENCY_VERSIONS_FILE_PATH = "custom-upgrades.yaml" const val UPLOAD_ZIP_MANIFEST_VERSION = "1.0" const val HIL_1P_UPGRADE_CAPABILITY = "HIL_1pDependency_VersionUpgrade" const val EXPLAINABILITY_V1 = "EXPLAINABILITY_V1" +const val SELECTIVE_TRANSFORMATION_V2 = "SELECTIVE_TRANSFORMATION_V2" const val CLIENT_SIDE_BUILD = "CLIENT_SIDE_BUILD" const val MAVEN_CONFIGURATION_FILE_NAME = "pom.xml" const val MAVEN_BUILD_RUN_UNIT_TESTS = "clean test" diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/ZipManifest.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/ZipManifest.kt index 9fb6b14a380..4dd20e630d0 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/ZipManifest.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/ZipManifest.kt @@ -11,8 +11,8 @@ data class ZipManifest( val version: String = UPLOAD_ZIP_MANIFEST_VERSION, val hilCapabilities: List = listOf(HIL_1P_UPGRADE_CAPABILITY), // TODO: add CLIENT_SIDE_BUILD to transformCapabilities when releasing CSB - // TODO: add AGENTIC_PLAN_V1 or something here AND in processCodeTransformSkipTests when backend allowlists everyone - val transformCapabilities: List = listOf(EXPLAINABILITY_V1), + val transformCapabilities: List = listOf(EXPLAINABILITY_V1, SELECTIVE_TRANSFORMATION_V2), + val noInteractiveMode: Boolean = true, val customBuildCommand: String = MAVEN_BUILD_RUN_UNIT_TESTS, val requestedConversions: RequestedConversions? = null, // only used for SQL conversions for now ) diff --git a/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerSessionTest.kt b/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerSessionTest.kt index f4ac5c09799..ab7242be2ea 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerSessionTest.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerSessionTest.kt @@ -146,7 +146,7 @@ class CodeWhispererCodeModernizerSessionTest : CodeWhispererCodeModernizerTestBa root.children[0], JavaSdkVersion.JDK_1_8, JavaSdkVersion.JDK_11, - listOf(EXPLAINABILITY_V1), + listOf(EXPLAINABILITY_V1, SELECTIVE_TRANSFORMATION_V2), MAVEN_BUILD_SKIP_UNIT_TESTS ) val mockFile = mock(File::class.java) @@ -164,6 +164,8 @@ class CodeWhispererCodeModernizerSessionTest : CodeWhispererCodeModernizerTestBa Path("manifest.json") -> { assertThat(fileContent).isNotNull() assertThat(fileContent).contains(MAVEN_BUILD_SKIP_UNIT_TESTS) + assertThat(fileContent).contains(SELECTIVE_TRANSFORMATION_V2) + assertThat(fileContent).contains("\"noInteractiveMode\":true") } Path("sources/src/tmp.txt") -> assertThat(fileContent).isEqualTo(fileText) Path("build-logs.txt") -> assertThat(fileContent).isNotNull() diff --git a/plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties b/plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties index 0aaf82bbd84..8b14b868e5b 100644 --- a/plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties +++ b/plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties @@ -677,7 +677,7 @@ codemodernizer.chat.message.result.fail_initial_build=I am having trouble buildi codemodernizer.chat.message.result.fail_initial_build_no_build_log=I am having trouble building your project in the secure build environment: {0}. codemodernizer.chat.message.result.fail_with_known_reason=Sorry, I couldn''t complete the transformation. {0} codemodernizer.chat.message.result.partially_success=I transformed part of your code. You can review the diff to see my proposed changes and accept or reject them. The transformation summary has details about the files I updated and the errors that prevented a complete transformation. -codemodernizer.chat.message.result.success=I successfully completed your transformation. You can review the diff to see my proposed changes and accept or reject them. The transformation summary has details about the changes I'm proposing. +codemodernizer.chat.message.result.success=I successfully completed your transformation. You can review the diff to see my proposed changes and accept or reject them. The transformation summary has details about the changes I'm proposing. If you want to upgrade additional libraries and other dependencies, run /transform with the transformed code and specify {0} as the source and target version. codemodernizer.chat.message.result.zip_too_large=Sorry, your project size exceeds the Amazon Q Code Transformation upload limit of 2GB. codemodernizer.chat.message.resume_ongoing=I'm still transforming your code. It can take 10 to 30 minutes to upgrade your code, depending on the size of your module. To monitor progress, go to the Transformation Hub. codemodernizer.chat.message.skip_tests=I will build your project using `mvn clean test` by default. If you would like me to build your project without running unit tests, I will use `mvn clean test-compile`. From 923bb80fcf4d78144c8ebe881ad945ee0eeb4ec9 Mon Sep 17 00:00:00 2001 From: David Hasani Date: Tue, 10 Jun 2025 13:46:58 -0700 Subject: [PATCH 2/3] fix apostrophe --- .../codemodernizer/controller/CodeTransformChatController.kt | 2 -- .../software/aws/toolkits/resources/MessagesBundle.properties | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt index 439da48d011..509d7b3735c 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt @@ -120,7 +120,6 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.utils.validateSct import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.QFeatureEvent import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.broadcastQEvent import software.aws.toolkits.jetbrains.services.cwc.messages.ChatMessageType -import software.aws.toolkits.jetbrains.utils.notifyStickyInfo import software.aws.toolkits.resources.message import software.aws.toolkits.telemetry.CodeTransformPreValidationError @@ -804,7 +803,6 @@ dependencyManagement: codeModernizerManager.codeTransformationSession?.sessionContext?.targetJavaVersion.toString() ) ) - notifyStickyInfo("jdkVersion", codeModernizerManager.codeTransformationSession?.sessionContext?.targetJavaVersion.toString()) } is DownloadArtifactResult.DownloadFailure -> artifactHandler.notifyUnableToDownload(downloadResult.failureReason) is DownloadArtifactResult.ParseZipFailure -> artifactHandler.notifyUnableToApplyPatch(downloadResult.failureReason.errorMessage) diff --git a/plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties b/plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties index 8b14b868e5b..843c7e7a896 100644 --- a/plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties +++ b/plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties @@ -677,7 +677,7 @@ codemodernizer.chat.message.result.fail_initial_build=I am having trouble buildi codemodernizer.chat.message.result.fail_initial_build_no_build_log=I am having trouble building your project in the secure build environment: {0}. codemodernizer.chat.message.result.fail_with_known_reason=Sorry, I couldn''t complete the transformation. {0} codemodernizer.chat.message.result.partially_success=I transformed part of your code. You can review the diff to see my proposed changes and accept or reject them. The transformation summary has details about the files I updated and the errors that prevented a complete transformation. -codemodernizer.chat.message.result.success=I successfully completed your transformation. You can review the diff to see my proposed changes and accept or reject them. The transformation summary has details about the changes I'm proposing. If you want to upgrade additional libraries and other dependencies, run /transform with the transformed code and specify {0} as the source and target version. +codemodernizer.chat.message.result.success=I successfully completed your transformation. You can review the diff to see my proposed changes and accept or reject them. The transformation summary has details about the changes I am proposing. If you want to upgrade additional libraries and other dependencies, run /transform with the transformed code and specify {0} as the source and target version. codemodernizer.chat.message.result.zip_too_large=Sorry, your project size exceeds the Amazon Q Code Transformation upload limit of 2GB. codemodernizer.chat.message.resume_ongoing=I'm still transforming your code. It can take 10 to 30 minutes to upgrade your code, depending on the size of your module. To monitor progress, go to the Transformation Hub. codemodernizer.chat.message.skip_tests=I will build your project using `mvn clean test` by default. If you would like me to build your project without running unit tests, I will use `mvn clean test-compile`. From 716486c4a8b19b67449d4f8f4f2bd7c312d97b97 Mon Sep 17 00:00:00 2001 From: David Hasani Date: Tue, 10 Jun 2025 14:21:08 -0700 Subject: [PATCH 3/3] fix test --- .../jetbrains/services/codemodernizer/CodeTransformChatTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatTest.kt b/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatTest.kt index 975f191f4df..91918c92db2 100644 --- a/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatTest.kt +++ b/plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatTest.kt @@ -30,7 +30,7 @@ class CodeTransformChatTest { fun `test that transform result chat item includes view summary button and view diff button with correct label when job fully succeeded`() { val result = CodeModernizerJobCompletedResult.JobCompletedSuccessfully(JobId("dummy-job-id-123")) val chatItem = buildTransformResultChatContent(result) - assertThat(chatItem.message).isEqualTo(message("codemodernizer.chat.message.result.success")) + assertThat(chatItem.message).contains("I successfully completed your transformation") assertThat(chatItem.buttons) .hasSize(2) .satisfiesKt { buttons ->