Skip to content

Commit 3440dc3

Browse files
author
David Hasani
committed
add permissions form prompt
1 parent 1939413 commit 3440dc3

File tree

9 files changed

+120
-3
lines changed

9 files changed

+120
-3
lines changed

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeTransformChatApp.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ private enum class CodeTransformMessageTypes(val type: String) {
4343
CodeTransformCancel("codetransform-cancel"),
4444
CodeTransformConfirmSkipTests("codetransform-confirm-skip-tests"),
4545
CodeTransformConfirmOneOrMultipleDiffs("codetransform-confirm-one-or-multiple-diffs"),
46+
CodeTransformConfirmPermissionsSelection("codetransform-confirm-permissions"),
4647
CodeTransformNew("codetransform-new"),
4748
CodeTransformOpenTransformHub("codetransform-open-transform-hub"),
4849
CodeTransformOpenMvnBuild("codetransform-open-mvn-build"),
@@ -77,6 +78,7 @@ class CodeTransformChatApp : AmazonQApp {
7778
CodeTransformMessageTypes.ChatPrompt.type to IncomingCodeTransformMessage.ChatPrompt::class,
7879
CodeTransformMessageTypes.CodeTransformConfirmSkipTests.type to IncomingCodeTransformMessage.CodeTransformConfirmSkipTests::class,
7980
CodeTransformMessageTypes.CodeTransformConfirmOneOrMultipleDiffs.type to IncomingCodeTransformMessage.CodeTransformConfirmOneOrMultipleDiffs::class,
81+
CodeTransformMessageTypes.CodeTransformConfirmPermissionsSelection.type to IncomingCodeTransformMessage.CodeTransformConfirmPermissions::class,
8082
CodeTransformMessageTypes.CodeTransformNew.type to IncomingCodeTransformMessage.CodeTransformNew::class,
8183
CodeTransformMessageTypes.CodeTransformOpenTransformHub.type to IncomingCodeTransformMessage.CodeTransformOpenTransformHub::class,
8284
CodeTransformMessageTypes.CodeTransformOpenMvnBuild.type to IncomingCodeTransformMessage.CodeTransformOpenMvnBuild::class,
@@ -176,6 +178,7 @@ class CodeTransformChatApp : AmazonQApp {
176178
is IncomingCodeTransformMessage.ChatPrompt -> inboundAppMessagesHandler.processChatPromptMessage(message)
177179
is IncomingCodeTransformMessage.CodeTransformConfirmSkipTests -> inboundAppMessagesHandler.processCodeTransformConfirmSkipTests(message)
178180
is IncomingCodeTransformMessage.CodeTransformConfirmOneOrMultipleDiffs -> inboundAppMessagesHandler.processCodeTransformOneOrMultipleDiffs(message)
181+
is IncomingCodeTransformMessage.CodeTransformConfirmPermissions -> inboundAppMessagesHandler.processCodeTransformConfirmPermissions(message)
179182
is IncomingCodeTransformMessage.CodeTransformNew -> inboundAppMessagesHandler.processCodeTransformNewAction(message)
180183
is IncomingCodeTransformMessage.CodeTransformOpenTransformHub -> inboundAppMessagesHandler.processCodeTransformOpenTransformHub(message)
181184
is IncomingCodeTransformMessage.CodeTransformOpenMvnBuild -> inboundAppMessagesHandler.processCodeTransformOpenMvnBuild(message)

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/InboundAppMessagesHandler.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ interface InboundAppMessagesHandler {
2525

2626
suspend fun processCodeTransformOneOrMultipleDiffs(message: IncomingCodeTransformMessage.CodeTransformConfirmOneOrMultipleDiffs)
2727

28+
suspend fun processCodeTransformConfirmPermissions(message: IncomingCodeTransformMessage.CodeTransformConfirmPermissions)
29+
2830
suspend fun processCodeTransformOpenTransformHub(message: IncomingCodeTransformMessage.CodeTransformOpenTransformHub)
2931

3032
suspend fun processCodeTransformOpenMvnBuild(message: IncomingCodeTransformMessage.CodeTransformOpenMvnBuild)

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/constants/CodeTransformChatItems.kt

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ private val confirmOneOrMultipleDiffsSelectionButton = Button(
7979
id = CodeTransformButtonId.ConfirmOneOrMultipleDiffs.id,
8080
)
8181

82+
private val confirmUserSelectionPermissionsButton = Button(
83+
keepCardAfterClick = false,
84+
waitMandatoryFormItems = true,
85+
text = message("codemodernizer.chat.message.button.confirm"),
86+
id = CodeTransformButtonId.ConfirmPermissions.id,
87+
)
88+
8289
private val openMvnBuildButton = Button(
8390
id = CodeTransformButtonId.OpenMvnBuild.id,
8491
text = message("codemodernizer.chat.message.button.view_build"),
@@ -231,6 +238,50 @@ private val selectOneOrMultipleDiffsFlagFormItem = FormItem(
231238
)
232239
)
233240

241+
private val selectCanRerunJobFormItem = FormItem(
242+
id = CodeTransformFormItemId.SelectCanRerunJob.id,
243+
title = "To improve our service, do we have permission to re-run your job?",
244+
type = "radiogroup",
245+
mandatory = true,
246+
options = listOf(
247+
FormItemOption(
248+
label = "Yes",
249+
value = "Yes",
250+
),
251+
FormItemOption(
252+
label = "No",
253+
value = "No",
254+
)
255+
)
256+
)
257+
258+
private val selectCanViewLogsFormItem = FormItem(
259+
id = CodeTransformFormItemId.SelectCanViewLogs.id,
260+
title = "Do we also have permission to view the logs?",
261+
type = "radiogroup",
262+
mandatory = true,
263+
options = listOf(
264+
FormItemOption(
265+
label = "Yes",
266+
value = "Yes",
267+
),
268+
FormItemOption(
269+
label = "No",
270+
value = "No",
271+
)
272+
)
273+
)
274+
275+
private fun getUserPermissionsSelectionMarkdown(canRerunJob: String, canViewLogs: String) = """
276+
### Feedback received
277+
-------------
278+
279+
| | |
280+
| :------------------- | -------: |
281+
| **Can re-run job** | $canRerunJob |
282+
| **Can view logs** | $canViewLogs |
283+
""".trimIndent()
284+
234285
private fun getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName: String, targetJdkVersion: String): String = """
235286
### ${message("codemodernizer.chat.prompt.title.details")}
236287
-------------
@@ -323,11 +374,13 @@ fun buildUserInputSkipTestsFlagChatContent(): CodeTransformChatMessageContent =
323374
formItems = listOf(selectSkipTestsFlagFormItem),
324375
type = CodeTransformChatMessageType.FinalizedAnswer,
325376
)
377+
326378
fun buildUserInputOneOrMultipleDiffsChatIntroContent(version: String): CodeTransformChatMessageContent =
327379
CodeTransformChatMessageContent(
328380
message = message("codemodernizer.chat.message.one_or_multiple_diffs", version.substring(4)), // extract "17" / "21" from "JDK_17" / "JDK_21"
329381
type = CodeTransformChatMessageType.FinalizedAnswer,
330382
)
383+
331384
fun buildUserInputOneOrMultipleDiffsFlagChatContent(): CodeTransformChatMessageContent =
332385
CodeTransformChatMessageContent(
333386
message = message("codemodernizer.chat.form.user_selection.title"),
@@ -339,6 +392,20 @@ fun buildUserInputOneOrMultipleDiffsFlagChatContent(): CodeTransformChatMessageC
339392
type = CodeTransformChatMessageType.FinalizedAnswer,
340393
)
341394

395+
fun buildUserInputPermissionsFeedbackChatContent(): CodeTransformChatMessageContent =
396+
CodeTransformChatMessageContent(
397+
message = message("codemodernizer.chat.form.user_selection.title"),
398+
buttons = listOf(
399+
confirmUserSelectionPermissionsButton,
400+
cancelUserSelectionButton,
401+
),
402+
formItems = listOf(
403+
selectCanRerunJobFormItem,
404+
selectCanViewLogsFormItem,
405+
),
406+
type = CodeTransformChatMessageType.FinalizedAnswer,
407+
)
408+
342409
fun buildUserSkipTestsFlagSelectionChatContent(skipTestsSelection: String) = CodeTransformChatMessageContent(
343410
type = CodeTransformChatMessageType.FinalizedAnswer,
344411
message = message("codemodernizer.chat.message.skip_tests_form.response", skipTestsSelection.lowercase())
@@ -451,6 +518,11 @@ fun buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName: String, targ
451518
message = getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName, targetJdkVersion)
452519
)
453520

521+
fun buildUserPermissionsSelectionChatContent(canRerunJob: String, canViewLogs: String) = CodeTransformChatMessageContent(
522+
type = CodeTransformChatMessageType.Prompt,
523+
message = getUserPermissionsSelectionMarkdown(canRerunJob, canViewLogs),
524+
)
525+
454526
fun buildCompileLocalInProgressChatContent() = CodeTransformChatMessageContent(
455527
type = CodeTransformChatMessageType.PendingAnswer,
456528
message = message("codemodernizer.chat.message.local_build_begin"),

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/controller/CodeTransformChatController.kt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import kotlinx.coroutines.delay
1515
import kotlinx.coroutines.runBlocking
1616
import kotlinx.coroutines.withContext
1717
import software.amazon.awssdk.services.codewhispererstreaming.model.TransformationDownloadArtifactType
18+
import software.amazon.awssdk.services.toolkittelemetry.model.Sentiment
1819
import software.aws.toolkits.core.utils.debug
1920
import software.aws.toolkits.core.utils.error
2021
import software.aws.toolkits.core.utils.getLogger
@@ -74,11 +75,13 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUs
7475
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputLanguageUpgradeChatContent
7576
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputOneOrMultipleDiffsChatIntroContent
7677
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputOneOrMultipleDiffsFlagChatContent
78+
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputPermissionsFeedbackChatContent
7779
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputSQLConversionMetadataChatContent
7880
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputSkipTestsFlagChatContent
7981
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputSkipTestsFlagChatIntroContent
8082
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserLanguageUpgradeSelectionSummaryChatContent
8183
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserOneOrMultipleDiffsSelectionChatContent
84+
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserPermissionsSelectionChatContent
8285
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserSQLConversionSelectionSummaryChatContent
8386
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserSkipTestsFlagSelectionChatContent
8487
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserStopTransformChatContent
@@ -115,6 +118,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.utils.validateSct
115118
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.QFeatureEvent
116119
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.broadcastQEvent
117120
import software.aws.toolkits.jetbrains.services.cwc.messages.ChatMessageType
121+
import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService
118122
import software.aws.toolkits.resources.message
119123
import software.aws.toolkits.telemetry.CodeTransformPreValidationError
120124

@@ -429,6 +433,20 @@ class CodeTransformChatController(
429433
}
430434
}
431435

436+
override suspend fun processCodeTransformConfirmPermissions(message: IncomingCodeTransformMessage.CodeTransformConfirmPermissions) {
437+
val canRerunJob = message.canRerunJob
438+
val canViewLogs = message.canViewLogs
439+
codeTransformChatHelper.addNewMessage(buildUserPermissionsSelectionChatContent(canRerunJob, canViewLogs))
440+
if (canRerunJob == "Yes" || canViewLogs == "Yes") {
441+
val sessionState = CodeModernizerSessionState.getInstance(context.project)
442+
val jobId: String = sessionState.currentJobId?.id ?: "None"
443+
TelemetryService.getInstance().sendFeedback(
444+
Sentiment.POSITIVE,
445+
"Permission to re-run job: $canRerunJob\nPermission to view logs: $canViewLogs\njobId: $jobId",
446+
)
447+
}
448+
}
449+
432450
private fun getSourceJdk(moduleConfigurationFile: VirtualFile): JavaSdkVersion {
433451
// this should never throw the RuntimeException since invalid JDK case is already handled in previous validation step
434452
val moduleJdkVersion = ModuleUtil.findModuleForFile(moduleConfigurationFile, context.project)?.tryGetJdk(context.project)
@@ -719,7 +737,10 @@ class CodeTransformChatController(
719737
when (downloadResult) {
720738
is DownloadArtifactResult.Success -> {
721739
if (downloadResult.artifact !is CodeModernizerArtifact) return artifactHandler.notifyUnableToApplyPatch("")
722-
codeTransformChatHelper.updateLastPendingMessage(
740+
if (result is CodeModernizerJobCompletedResult.JobPartiallySucceeded) {
741+
codeTransformChatHelper.addNewMessage(buildUserInputPermissionsFeedbackChatContent())
742+
}
743+
codeTransformChatHelper.addNewMessage(
723744
buildTransformResultChatContent(result, downloadResult.artifact.patches.size)
724745
)
725746
}

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/messages/CodeTransformMessage.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ enum class CodeTransformButtonId(val id: String) {
2222
CancelTransformation("codetransform-input-cancel"),
2323
ConfirmSkipTests("codetransform-input-confirm-skip-tests"),
2424
ConfirmOneOrMultipleDiffs("codetransform-input-confirm-one-or-multiple-diffs"),
25+
ConfirmPermissions("codetransform-input-confirm-permissions"),
2526
StopTransformation("stop_transform"),
2627
OpenTransformationHub("open_transformation_hub"),
2728
OpenMvnBuild("open_mvn_build"),
@@ -39,6 +40,8 @@ enum class CodeTransformFormItemId(val id: String) {
3940
SelectTargetVersion("targetVersion"),
4041
SelectSkipTestsFlag("skipTestsSelection"),
4142
SelectOneOrMultipleDiffsFlag("oneOrMultipleDiffsSelection"),
43+
SelectCanRerunJob("rerunJobSelection"),
44+
SelectCanViewLogs("viewLogsSelection"),
4245
DependencyVersion("dependencyVersion"),
4346
}
4447

@@ -113,6 +116,12 @@ sealed interface IncomingCodeTransformMessage : CodeTransformBaseMessage {
113116
val oneOrMultipleDiffsSelection: String,
114117
) : IncomingCodeTransformMessage
115118

119+
data class CodeTransformConfirmPermissions(
120+
@JsonProperty("tabID") val tabId: String,
121+
val canRerunJob: String,
122+
val canViewLogs: String,
123+
) : IncomingCodeTransformMessage
124+
116125
data class CodeTransformOpenMvnBuild(
117126
@JsonProperty("tabID") val tabId: String,
118127
) : IncomingCodeTransformMessage

plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/codeTransformChatConnector.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,14 @@ export class CodeTransformChatConnector {
294294
tabType: 'codetransform',
295295
oneOrMultipleDiffsSelection: action.formItemValues?.oneOrMultipleDiffsSelection
296296
})
297+
} else if (action.id === FormButtonIds.CodeTransformInputPermissions) {
298+
this.sendMessageToExtension({
299+
command: 'codetransform-confirm-permissions',
300+
tabID,
301+
tabType: 'codetransform',
302+
canRerunJob: action.formItemValues?.rerunJobSelection,
303+
canViewLogs: action.formItemValues?.viewLogsSelection,
304+
})
297305
} else if (action.id === FormButtonIds.OpenTransformationHub) {
298306
this.sendMessageToExtension({
299307
command: 'codetransform-open-transform-hub',

plugins/amazonq/mynah-ui/src/mynah-ui/ui/commands.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type MessageCommand =
3838
| 'codetransform-stop'
3939
| 'codetransform-confirm-skip-tests'
4040
| 'codetransform-confirm-one-or-multiple-diffs'
41+
| 'codetransform-confirm-permissions'
4142
| 'codetransform-new'
4243
| 'codetransform-open-transform-hub'
4344
| 'codetransform-open-mvn-build'

plugins/amazonq/mynah-ui/src/mynah-ui/ui/forms/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const enum FormButtonIds {
1010
CodeTransformInputCancel = 'codetransform-input-cancel',
1111
CodeTransformInputSkipTests = 'codetransform-input-confirm-skip-tests',
1212
CodeTransformInputOneOrMultipleDiffs = 'codetransform-input-confirm-one-or-multiple-diffs',
13+
CodeTransformInputPermissions = 'codetransform-input-confirm-permissions',
1314
OpenMvnBuild = 'open_mvn_build',
1415
StopTransform = 'stop_transform',
1516
OpenTransformationHub = 'open_transformation_hub',

plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ codemodernizer.chat.message.skip_tests_form.skip=Skip unit tests
684684
codemodernizer.chat.message.sql_metadata_success=I found the following source database, target database, and host based on the schema conversion metadata you provided:
685685
codemodernizer.chat.message.sql_module_schema_prompt=To continue, choose the module and schema for this transformation.
686686
codemodernizer.chat.message.transform_begin=I'm starting to transform 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.
687-
codemodernizer.chat.message.transform_cancelled_by_user=I cancelled your transformation. If you want to start another transformation, choose **Start a new transformation**.
687+
codemodernizer.chat.message.transform_cancelled_by_user=If you want to start another transformation, choose **Start a new transformation**.
688688
codemodernizer.chat.message.transform_failed=I could not complete the transformation. {0}
689689
codemodernizer.chat.message.transform_in_progress=If I run into any issues, I might pause the transformation to get input from you on how to proceed.
690690
codemodernizer.chat.message.transform_stopped_by_user=I stopped your transformation. If you want to start another transformation, choose **Start a new transformation**.
@@ -786,7 +786,7 @@ codemodernizer.notification.warn.maven_failed.title=Amazon Q Code Transform unab
786786
codemodernizer.notification.warn.on_resume.unknown_status_response.content=We received data from Amazon Q in a format that the plugin cannot handle. You may need to update the plugin and then try again.
787787
codemodernizer.notification.warn.on_resume.unknown_status_response.title=Unable to resume job
788788
codemodernizer.notification.warn.submit_feedback=Submit feedback
789-
codemodernizer.notification.warn.unable_to_start_job=Amazon Q could not begin the transformation. Try starting the transformation again. {0}
789+
codemodernizer.notification.warn.unable_to_start_job=Amazon Q could not begin the transformation. Try starting the transformation again. {0}. For more information, see the [Amazon Q documentation](TO-DO: PUT LINK TO START JOB TROUBLESHOOTING PAGE).
790790
codemodernizer.notification.warn.unknown_start_failure=Amazon Q could not begin the transformation. Try starting the transformation again.
791791
codemodernizer.notification.warn.unknown_status_response=Amazon Q could not complete the transformation. Try starting the transformation again.
792792
codemodernizer.notification.warn.upload_failed=Amazon Q could not upload your module. Try starting the transformation again. {0}

0 commit comments

Comments
 (0)