diff --git a/packages/core/src/amazonqGumby/app.ts b/packages/core/src/amazonqGumby/app.ts index 1638231ef24..caf51b90366 100644 --- a/packages/core/src/amazonqGumby/app.ts +++ b/packages/core/src/amazonqGumby/app.ts @@ -13,7 +13,7 @@ import { Messenger } from './chat/controller/messenger/messenger' import { UIMessageListener } from './chat/views/actions/uiMessageListener' import { debounce } from 'lodash' import { AuthUtil } from '../codewhisperer/util/authUtil' -import { showTransformationHub } from './commands' +import { showTransformationHub, showTransformationSummary } from './commands' import { transformByQState } from '../codewhisperer/models/model' import { ChatSessionManager } from './chat/storages/chatSession' @@ -69,6 +69,7 @@ export function init(appContext: AmazonQAppInitContext) { }) showTransformationHub.register() + showTransformationSummary.register() transformByQState.setChatControllers(gumbyChatControllerEventEmitters) transformByQState.setChatMessenger(messenger) diff --git a/packages/core/src/amazonqGumby/chat/controller/controller.ts b/packages/core/src/amazonqGumby/chat/controller/controller.ts index e79ce883e0a..2f6e1a763c5 100644 --- a/packages/core/src/amazonqGumby/chat/controller/controller.ts +++ b/packages/core/src/amazonqGumby/chat/controller/controller.ts @@ -395,6 +395,17 @@ export class GumbyController { this.messenger.sendCommandMessage({ ...message, command: GumbyCommands.CLEAR_CHAT }) await this.transformInitiated(message) break + case ButtonActions.CONFIRM_VIEW_TRANSFORMATION_SUMMARY: + await vscode.commands.executeCommand( + GumbyCommands.SHOW_TRANSFORMATION_SUMMARY, + CancelActionPositions.Chat + ) + this.messenger.sendJobFinishedMessage( + message.tabID, + CodeWhispererConstants.viewProposedChangesChatMessage + ) + telemetry.ui_click.emit({ elementId: 'transformationHub_viewSummary' }) + break case ButtonActions.CONFIRM_DEPENDENCY_FORM: await this.continueJobWithSelectedDependency(message) break diff --git a/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts b/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts index b120aae986b..f5ccdad9bb3 100644 --- a/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts +++ b/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts @@ -509,6 +509,14 @@ export class Messenger { public sendJobFinishedMessage(tabID: string, message: string, includeStartNewTransformationButton: boolean = true) { const buttons: ChatItemButton[] = [] + // We only want to show this button when the proposed changes were downloaded (ie the summary is available) + if (transformByQState.getSummaryFilePath() !== '') { + buttons.push({ + keepCardAfterClick: false, + text: CodeWhispererConstants.viewTransformationSummaryButtonText, + id: ButtonActions.CONFIRM_VIEW_TRANSFORMATION_SUMMARY, + }) + } if (includeStartNewTransformationButton) { buttons.push({ keepCardAfterClick: false, diff --git a/packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts b/packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts index a7b15810312..eda15d0ae4e 100644 --- a/packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts +++ b/packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts @@ -26,6 +26,7 @@ export enum ButtonActions { CONFIRM_JAVA_HOME_FORM = 'gumbyJavaHomeFormConfirm', CANCEL_JAVA_HOME_FORM = 'gumbyJavaHomeFormCancel', CONFIRM_START_TRANSFORMATION_FLOW = 'gumbyStartTransformation', + CONFIRM_VIEW_TRANSFORMATION_SUMMARY = 'gumbyViewSummary', OPEN_FILE = 'gumbyOpenFile', OPEN_BUILD_LOG = 'gumbyOpenBuildLog', } @@ -34,6 +35,7 @@ export enum GumbyCommands { CLEAR_CHAT = 'aws.awsq.clearchat', START_TRANSFORMATION_FLOW = 'aws.awsq.transform', FOCUS_TRANSFORMATION_HUB = 'aws.amazonq.showTransformationHub', + SHOW_TRANSFORMATION_SUMMARY = 'aws.amazonq.transformationHub.summary.reveal', } export default class MessengerUtils { diff --git a/packages/core/src/amazonqGumby/commands.ts b/packages/core/src/amazonqGumby/commands.ts index 46f84a14250..c6f28e9c61a 100644 --- a/packages/core/src/amazonqGumby/commands.ts +++ b/packages/core/src/amazonqGumby/commands.ts @@ -5,6 +5,7 @@ import * as vscode from 'vscode' import { Commands } from '../shared/vscode/commands2' +import { transformByQState } from '../codewhisperer' export const showTransformationHub = Commands.declare( { id: 'aws.amazonq.showTransformationHub', compositeKey: { 0: 'source' } }, @@ -12,3 +13,15 @@ export const showTransformationHub = Commands.declare( await vscode.commands.executeCommand('workbench.view.extension.aws-codewhisperer-transformation-hub') } ) + +export const showTransformationSummary = Commands.declare( + { id: 'aws.amazonq.transformationHub.summary.reveal', compositeKey: { 0: 'source' } }, + () => async (source: string) => { + if (transformByQState.getSummaryFilePath() !== '') { + await vscode.commands.executeCommand( + 'markdown.showPreview', + vscode.Uri.file(String(transformByQState.getSummaryFilePath())) + ) + } + } +) diff --git a/packages/core/src/codewhisperer/models/constants.ts b/packages/core/src/codewhisperer/models/constants.ts index 460778db349..6fbee67258a 100644 --- a/packages/core/src/codewhisperer/models/constants.ts +++ b/packages/core/src/codewhisperer/models/constants.ts @@ -563,6 +563,8 @@ export const openTransformationHubButtonText = 'Open Transformation Hub' export const startTransformationButtonText = 'Start a new transformation' +export const viewTransformationSummaryButtonText = 'View transformation summary' + export const stopTransformationButtonText = 'Stop transformation' export const checkingForProjectsChatMessage = 'Checking for eligible projects...' diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformationResultsViewProvider.ts b/packages/core/src/codewhisperer/service/transformByQ/transformationResultsViewProvider.ts index 1f4058a54dc..a6139deb977 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformationResultsViewProvider.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformationResultsViewProvider.ts @@ -364,15 +364,15 @@ export class ProposedTransformationExplorer { } }) - vscode.commands.registerCommand('aws.amazonq.transformationHub.summary.reveal', async () => { - if (transformByQState.getSummaryFilePath() !== '') { - await vscode.commands.executeCommand( - 'markdown.showPreview', - vscode.Uri.file(transformByQState.getSummaryFilePath()) - ) - telemetry.ui_click.emit({ elementId: 'transformationHub_viewSummary' }) - } - }) + // vscode.commands.registerCommand('aws.amazonq.transformationHub.summary.reveal', async () => { + // if (transformByQState.getSummaryFilePath() !== '') { + // await vscode.commands.executeCommand( + // 'markdown.showPreview', + // vscode.Uri.file(transformByQState.getSummaryFilePath()) + // ) + // telemetry.ui_click.emit({ elementId: 'transformationHub_viewSummary' }) + // } + // }) vscode.commands.registerCommand('aws.amazonq.transformationHub.reviewChanges.startReview', async () => { await setContext('gumby.reviewState', TransformByQReviewStatus.PreparingReview) @@ -491,7 +491,7 @@ export class ProposedTransformationExplorer { message: CodeWhispererConstants.viewProposedChangesChatMessage, tabID: ChatSessionManager.Instance.getSession().tabID, }) - await vscode.commands.executeCommand('aws.amazonq.transformationHub.summary.reveal') + // await vscode.commands.executeCommand('aws.amazonq.transformationHub.summary.reveal') } catch (e: any) { deserializeErrorMessage = (e as Error).message getLogger().error(`CodeTransformation: ParseDiff error = ${deserializeErrorMessage}`)