From 62027533cf4f772fbcd690cf2412f52e2c02e55e Mon Sep 17 00:00:00 2001 From: Bodie Weedop Date: Wed, 2 Oct 2024 17:47:05 -0700 Subject: [PATCH] Store user intent in cache to emit on copy and code block actions --- .../webview/ui/apps/cwChatConnector.ts | 10 ++++-- .../core/src/amazonq/webview/ui/connector.ts | 14 ++++++--- packages/core/src/amazonq/webview/ui/main.ts | 31 +++++++++++++++++-- .../controllers/chat/messenger/messenger.ts | 6 ++++ .../view/connector/connector.ts | 3 ++ 5 files changed, 56 insertions(+), 8 deletions(-) diff --git a/packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts b/packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts index ff4f489dc75..6fa4ee08648 100644 --- a/packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts +++ b/packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts @@ -100,7 +100,8 @@ export class Connector { codeReference?: CodeReference[], eventId?: string, codeBlockIndex?: number, - totalCodeBlocks?: number + totalCodeBlocks?: number, + userIntent?: string ): void => { this.sendMessageToExtension({ tabID: tabID, @@ -113,6 +114,7 @@ export class Connector { eventId, codeBlockIndex, totalCodeBlocks, + userIntent, }) } @@ -124,7 +126,8 @@ export class Connector { codeReference?: CodeReference[], eventId?: string, codeBlockIndex?: number, - totalCodeBlocks?: number + totalCodeBlocks?: number, + userIntent?: string ): void => { this.sendMessageToExtension({ tabID: tabID, @@ -137,6 +140,7 @@ export class Connector { eventId, codeBlockIndex, totalCodeBlocks, + userIntent, }) } @@ -269,6 +273,7 @@ export class Connector { canBeVoted: true, codeReference: messageData.codeReference, traceId: messageData.traceId, + userIntent: messageData.userIntent, } // If it is not there we will not set it @@ -309,6 +314,7 @@ export class Connector { } : undefined, traceId: messageData.traceId, + userIntent: messageData.userIntent, } this.onChatAnswerReceived(messageData.tabID, answer) diff --git a/packages/core/src/amazonq/webview/ui/connector.ts b/packages/core/src/amazonq/webview/ui/connector.ts index 12cdad34893..8e1367c0cff 100644 --- a/packages/core/src/amazonq/webview/ui/connector.ts +++ b/packages/core/src/amazonq/webview/ui/connector.ts @@ -13,6 +13,7 @@ import { TabType, TabsStorage } from './storages/tabsStorage' import { WelcomeFollowupType } from './apps/amazonqCommonsConnector' import { AuthFollowUpType } from './followUps/generator' import { DiffTreeFileInfo } from './diffTree/types' +import { UserIntent } from '@amzn/codewhisperer-streaming' export interface CodeReference { licenseName?: string @@ -32,6 +33,7 @@ export interface ChatPayload { export interface TracedChatItem extends ChatItem { traceId?: string + userIntent?: UserIntent } export interface ConnectorProps { @@ -219,7 +221,8 @@ export class Connector { codeReference?: CodeReference[], eventId?: string, codeBlockIndex?: number, - totalCodeBlocks?: number + totalCodeBlocks?: number, + userIntent?: string ): void => { switch (this.tabsStorage.getTab(tabID)?.type) { case 'cwc': @@ -231,7 +234,8 @@ export class Connector { codeReference, eventId, codeBlockIndex, - totalCodeBlocks + totalCodeBlocks, + userIntent ) break case 'featuredev': @@ -248,7 +252,8 @@ export class Connector { codeReference?: CodeReference[], eventId?: string, codeBlockIndex?: number, - totalCodeBlocks?: number + totalCodeBlocks?: number, + userIntent?: string ): void => { switch (this.tabsStorage.getTab(tabID)?.type) { case 'cwc': @@ -260,7 +265,8 @@ export class Connector { codeReference, eventId, codeBlockIndex, - totalCodeBlocks + totalCodeBlocks, + userIntent ) break case 'featuredev': diff --git a/packages/core/src/amazonq/webview/ui/main.ts b/packages/core/src/amazonq/webview/ui/main.ts index 300988ac54b..79ba19448c5 100644 --- a/packages/core/src/amazonq/webview/ui/main.ts +++ b/packages/core/src/amazonq/webview/ui/main.ts @@ -23,6 +23,8 @@ export const createMynahUI = (ideApi: any, amazonQEnabled: boolean) => { // eslint-disable-next-line prefer-const let connector: Connector + const messageUserIntentMap = new Map() + window.addEventListener('error', (e) => { const { error, message } = e ideApi.postMessage({ @@ -201,6 +203,9 @@ export const createMynahUI = (ideApi: any, amazonQEnabled: boolean) => { ? { type: ChatItemType.CODE_RESULT, fileList: item.fileList } : {}), }) + if (item.messageId !== undefined && item.userIntent !== undefined) { + messageUserIntentMap.set(item.messageId, item.userIntent) + } return } @@ -429,7 +434,28 @@ export const createMynahUI = (ideApi: any, amazonQEnabled: boolean) => { content: 'Thanks for your feedback.', }) }, - onCodeInsertToCursorPosition: connector.onCodeInsertToCursorPosition, + onCodeInsertToCursorPosition: ( + tabId, + messageId, + code, + type, + referenceTrackerInfo, + eventId, + codeBlockIndex, + totalCodeBlocks + ) => { + connector.onCodeInsertToCursorPosition( + tabId, + messageId, + code, + type, + referenceTrackerInfo, + eventId, + codeBlockIndex, + totalCodeBlocks, + messageUserIntentMap.get(messageId) ?? undefined + ) + }, onCopyCodeToClipboard: ( tabId, messageId, @@ -448,7 +474,8 @@ export const createMynahUI = (ideApi: any, amazonQEnabled: boolean) => { referenceTrackerInfo, eventId, codeBlockIndex, - totalCodeBlocks + totalCodeBlocks, + messageUserIntentMap.get(messageId) ?? undefined ) mynahUI.notify({ type: NotificationType.SUCCESS, diff --git a/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts b/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts index 6bad96cd2fa..fe8d1b6abc7 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts @@ -86,6 +86,7 @@ export class Messenger { relatedSuggestions: undefined, triggerID, messageID: '', + userIntent: undefined, }, tabID ) @@ -184,6 +185,7 @@ export class Messenger { codeReference, triggerID, messageID, + userIntent: triggerPayload.userIntent, }, tabID ) @@ -260,6 +262,7 @@ export class Messenger { relatedSuggestions: undefined, triggerID, messageID, + userIntent: triggerPayload.userIntent, }, tabID ) @@ -277,6 +280,7 @@ export class Messenger { relatedSuggestions, triggerID, messageID, + userIntent: triggerPayload.userIntent, }, tabID ) @@ -294,6 +298,7 @@ export class Messenger { triggerID, messageID, traceId: triggerPayload.traceId, + userIntent: triggerPayload.userIntent, }, tabID ) @@ -417,6 +422,7 @@ export class Messenger { relatedSuggestions: undefined, triggerID, messageID: 'static_message_' + triggerID, + userIntent: undefined, }, tabID ) diff --git a/packages/core/src/codewhispererChat/view/connector/connector.ts b/packages/core/src/codewhispererChat/view/connector/connector.ts index cabbd23b9b2..72d18ed82b6 100644 --- a/packages/core/src/codewhispererChat/view/connector/connector.ts +++ b/packages/core/src/codewhispererChat/view/connector/connector.ts @@ -141,6 +141,7 @@ export interface ChatMessageProps { readonly codeReference?: CodeReference[] readonly triggerID: string readonly messageID: string + readonly userIntent: string | undefined readonly traceId?: string } @@ -155,6 +156,7 @@ export class ChatMessage extends UiMessage { readonly triggerID: string readonly messageID: string | undefined readonly traceId?: string + readonly userIntent: string | undefined override type = 'chatMessage' constructor(props: ChatMessageProps, tabID: string) { @@ -168,6 +170,7 @@ export class ChatMessage extends UiMessage { this.triggerID = props.triggerID this.messageID = props.messageID this.traceId = props.traceId + this.userIntent = props.userIntent } }