From 9cfda7d629ee2fbbc633772362da142ba537ed37 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:09:36 -0700 Subject: [PATCH 1/9] Adding codeblockLanguage to InsertAtCursor and CopyToClipBoard events for UTG --- .../amazonq/webview/ui/apps/cwChatConnector.ts | 10 ++++++++-- .../core/src/amazonq/webview/ui/connector.ts | 13 +++++++++---- packages/core/src/amazonq/webview/ui/main.ts | 16 +++++++++++----- .../controllers/chat/messenger/messenger.ts | 15 ++++++++++++++- .../codewhispererChat/controllers/chat/model.ts | 2 ++ .../controllers/chat/telemetryHelper.ts | 2 ++ .../view/connector/connector.ts | 3 +++ .../view/messages/messageListener.ts | 2 ++ .../src/shared/telemetry/vscodeTelemetry.json | 9 +++++++++ 9 files changed, 60 insertions(+), 12 deletions(-) diff --git a/packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts b/packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts index 0d48a127d81..679d1366bc1 100644 --- a/packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts +++ b/packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts @@ -111,7 +111,8 @@ export class Connector { eventId?: string, codeBlockIndex?: number, totalCodeBlocks?: number, - userIntent?: string + userIntent?: string, + codeBlockLanguage?: string ): void => { this.sendMessageToExtension({ tabID: tabID, @@ -125,6 +126,7 @@ export class Connector { codeBlockIndex, totalCodeBlocks, userIntent, + codeBlockLanguage, }) } @@ -137,7 +139,8 @@ export class Connector { eventId?: string, codeBlockIndex?: number, totalCodeBlocks?: number, - userIntent?: string + userIntent?: string, + codeBlockLanguage?: string ): void => { this.sendMessageToExtension({ tabID: tabID, @@ -151,6 +154,7 @@ export class Connector { codeBlockIndex, totalCodeBlocks, userIntent, + codeBlockLanguage, }) } @@ -295,6 +299,7 @@ export class Connector { canBeVoted: true, codeReference: messageData.codeReference, userIntent: messageData.userIntent, + codeBlockLanguage: messageData.codeBlockLanguage, } // If it is not there we will not set it @@ -328,6 +333,7 @@ export class Connector { messageId: messageData.messageID, codeReference: messageData.codeReference, userIntent: messageData.userIntent, + codeBlockLanguage: messageData.codeBlockLanguage, followUp: messageData.followUps !== undefined && messageData.followUps.length > 0 ? { diff --git a/packages/core/src/amazonq/webview/ui/connector.ts b/packages/core/src/amazonq/webview/ui/connector.ts index 05970ce3e94..be49eec4968 100644 --- a/packages/core/src/amazonq/webview/ui/connector.ts +++ b/packages/core/src/amazonq/webview/ui/connector.ts @@ -44,6 +44,7 @@ export interface ChatPayload { export interface CWCChatItem extends ChatItem { traceId?: string userIntent?: UserIntent + codeBlockLanguage?: string } export interface ConnectorProps { @@ -232,7 +233,8 @@ export class Connector { eventId?: string, codeBlockIndex?: number, totalCodeBlocks?: number, - userIntent?: string + userIntent?: string, + codeBlockLanguage?: string ): void => { switch (this.tabsStorage.getTab(tabID)?.type) { case 'cwc': @@ -245,7 +247,8 @@ export class Connector { eventId, codeBlockIndex, totalCodeBlocks, - userIntent + userIntent, + codeBlockLanguage ) break case 'featuredev': @@ -263,7 +266,8 @@ export class Connector { eventId?: string, codeBlockIndex?: number, totalCodeBlocks?: number, - userIntent?: string + userIntent?: string, + codeBlockLanguage?: string ): void => { switch (this.tabsStorage.getTab(tabID)?.type) { case 'cwc': @@ -276,7 +280,8 @@ export class Connector { eventId, codeBlockIndex, totalCodeBlocks, - userIntent + userIntent, + codeBlockLanguage ) break case 'featuredev': diff --git a/packages/core/src/amazonq/webview/ui/main.ts b/packages/core/src/amazonq/webview/ui/main.ts index 09064d5faf8..6f3c2cfea99 100644 --- a/packages/core/src/amazonq/webview/ui/main.ts +++ b/packages/core/src/amazonq/webview/ui/main.ts @@ -23,7 +23,7 @@ export const createMynahUI = (ideApi: any, amazonQEnabled: boolean) => { // eslint-disable-next-line prefer-const let connector: Connector //Store the mapping between messageId and messageUserIntent for amazonq_interactWithMessage telemetry - const messageUserIntentMap = new Map() + const messageUserIntentMap = new Map() window.addEventListener('error', (e) => { const { error, message } = e @@ -213,8 +213,12 @@ 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) + if ( + item.messageId !== undefined && + item.userIntent !== undefined && + item.codeBlockLanguage !== undefined + ) { + messageUserIntentMap.set(item.messageId, [item.userIntent, item.codeBlockLanguage]) } ideApi.postMessage({ command: 'update-chat-message-telemetry', @@ -453,7 +457,8 @@ export const createMynahUI = (ideApi: any, amazonQEnabled: boolean) => { eventId, codeBlockIndex, totalCodeBlocks, - messageUserIntentMap.get(messageId) ?? undefined + messageUserIntentMap.get(messageId)?.[0] ?? undefined, + messageUserIntentMap.get(messageId)?.[1] ?? undefined ) }, onCopyCodeToClipboard: ( @@ -475,7 +480,8 @@ export const createMynahUI = (ideApi: any, amazonQEnabled: boolean) => { eventId, codeBlockIndex, totalCodeBlocks, - messageUserIntentMap.get(messageId) ?? undefined + messageUserIntentMap.get(messageId)?.[0] ?? undefined, + messageUserIntentMap.get(messageId)?.[1] ?? 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 c16bbf3c24b..d9515e9eb3a 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts @@ -87,6 +87,7 @@ export class Messenger { triggerID, messageID: '', userIntent: undefined, + codeBlockLanguage: undefined, }, tabID ) @@ -131,6 +132,7 @@ export class Messenger { let codeReference: CodeReference[] = [] let followUps: FollowUp[] = [] let relatedSuggestions: Suggestion[] = [] + let codeBlockLanguage: string = 'plaintext' if (response.generateAssistantResponseResponse === undefined) { throw new ToolkitError( @@ -182,7 +184,7 @@ export class Messenger { chatEvent.assistantResponseEvent.content.length > 0 ) { message += chatEvent.assistantResponseEvent.content - + codeBlockLanguage = this.extractCodeBlockLanguage(message) this.dispatcher.sendChatMessage( new ChatMessage( { @@ -195,6 +197,7 @@ export class Messenger { triggerID, messageID, userIntent: triggerPayload.userIntent, + codeBlockLanguage: codeBlockLanguage, }, tabID ) @@ -272,6 +275,7 @@ export class Messenger { triggerID, messageID, userIntent: triggerPayload.userIntent, + codeBlockLanguage: codeBlockLanguage, }, tabID ) @@ -290,6 +294,7 @@ export class Messenger { triggerID, messageID, userIntent: triggerPayload.userIntent, + codeBlockLanguage: undefined, }, tabID ) @@ -307,6 +312,7 @@ export class Messenger { triggerID, messageID, userIntent: triggerPayload.userIntent, + codeBlockLanguage: undefined, }, tabID ) @@ -334,6 +340,12 @@ export class Messenger { }) } + private extractCodeBlockLanguage(message: string): string { + const firstLine = message.split('\n')[0] + const match = firstLine.match(/^```(\w+)/) + return match ? match[1] : 'plaintext' + } + public sendErrorMessage(errorMessage: string | undefined, tabID: string, requestID: string | undefined) { this.showChatExceptionMessage( { @@ -431,6 +443,7 @@ export class Messenger { triggerID, messageID: 'static_message_' + triggerID, userIntent: undefined, + codeBlockLanguage: undefined, }, tabID ) diff --git a/packages/core/src/codewhispererChat/controllers/chat/model.ts b/packages/core/src/codewhispererChat/controllers/chat/model.ts index 94e7d0d10cc..069ffbc815d 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/model.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/model.ts @@ -46,6 +46,7 @@ export interface InsertCodeAtCursorPosition { eventId: string codeBlockIndex: number totalCodeBlocks: number + codeBlockLanguage: string } export interface CopyCodeToClipboard { @@ -59,6 +60,7 @@ export interface CopyCodeToClipboard { eventId: string codeBlockIndex: number totalCodeBlocks: number + codeBlockLanguage: string } export type ChatPromptCommandType = diff --git a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts index a86d8c0ff68..dfb28feb958 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts @@ -198,6 +198,7 @@ export class CWCTelemetryHelper { cwsprChatCodeBlockIndex: message.codeBlockIndex, cwsprChatTotalCodeBlocks: message.totalCodeBlocks, cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId), + cwsprChatCodeBlockLanaguge: message.codeBlockLanguage, } break case 'code_was_copied_to_clipboard': @@ -215,6 +216,7 @@ export class CWCTelemetryHelper { cwsprChatCodeBlockIndex: message.codeBlockIndex, cwsprChatTotalCodeBlocks: message.totalCodeBlocks, cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId), + cwsprChatCodeBlockLanaguge: message.codeBlockLanguage, } break case 'follow-up-was-clicked': diff --git a/packages/core/src/codewhispererChat/view/connector/connector.ts b/packages/core/src/codewhispererChat/view/connector/connector.ts index 00a8217de49..02794af5fb3 100644 --- a/packages/core/src/codewhispererChat/view/connector/connector.ts +++ b/packages/core/src/codewhispererChat/view/connector/connector.ts @@ -142,6 +142,7 @@ export interface ChatMessageProps { readonly triggerID: string readonly messageID: string readonly userIntent: string | undefined + readonly codeBlockLanguage: string | undefined } export class ChatMessage extends UiMessage { @@ -155,6 +156,7 @@ export class ChatMessage extends UiMessage { readonly triggerID: string readonly messageID: string | undefined readonly userIntent: string | undefined + readonly codeBlockLanguage: 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.userIntent = props.userIntent + this.codeBlockLanguage = props.codeBlockLanguage } } diff --git a/packages/core/src/codewhispererChat/view/messages/messageListener.ts b/packages/core/src/codewhispererChat/view/messages/messageListener.ts index d9214f43365..f4a820b525d 100644 --- a/packages/core/src/codewhispererChat/view/messages/messageListener.ts +++ b/packages/core/src/codewhispererChat/view/messages/messageListener.ts @@ -159,6 +159,7 @@ export class UIMessageListener { eventId: msg.eventId, codeBlockIndex: msg.codeBlockIndex, totalCodeBlocks: msg.totalCodeBlocks, + codeBlockLanguage: msg.codeBlockLanguage, }) } @@ -174,6 +175,7 @@ export class UIMessageListener { eventId: msg.eventId, codeBlockIndex: msg.codeBlockIndex, totalCodeBlocks: msg.totalCodeBlocks, + codeBlockLanguage: msg.codeBlockLanguage, }) } diff --git a/packages/core/src/shared/telemetry/vscodeTelemetry.json b/packages/core/src/shared/telemetry/vscodeTelemetry.json index a1dea2d6b03..5eb29491f0e 100644 --- a/packages/core/src/shared/telemetry/vscodeTelemetry.json +++ b/packages/core/src/shared/telemetry/vscodeTelemetry.json @@ -78,6 +78,11 @@ "type": "boolean", "description": "true if query has project level context, false otherwise." }, + { + "name": "cwsprChatCodeBlockLanaguge", + "type": "string", + "description": "programming language generated by the Q chat" + }, { "name": "cwsprChatProjectContextQueryMs", "type": "int", @@ -900,6 +905,10 @@ { "type": "cwsprChatHasProjectContext", "required": false + }, + { + "type": "cwsprChatCodeBlockLanaguge", + "required": false } ] }, From 9f0d6ece220db56991fe91c520b3736c054f3495 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Wed, 9 Oct 2024 21:09:38 -0700 Subject: [PATCH 2/9] Adding Language to user events --- .../codewhispererChat/controllers/chat/telemetryHelper.ts | 4 ++-- packages/core/src/shared/telemetry/vscodeTelemetry.json | 7 +------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts index dfb28feb958..1b900f740af 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts @@ -198,7 +198,7 @@ export class CWCTelemetryHelper { cwsprChatCodeBlockIndex: message.codeBlockIndex, cwsprChatTotalCodeBlocks: message.totalCodeBlocks, cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId), - cwsprChatCodeBlockLanaguge: message.codeBlockLanguage, + cwsprChatProgrammingLanguage: message.codeBlockLanguage, } break case 'code_was_copied_to_clipboard': @@ -216,7 +216,7 @@ export class CWCTelemetryHelper { cwsprChatCodeBlockIndex: message.codeBlockIndex, cwsprChatTotalCodeBlocks: message.totalCodeBlocks, cwsprChatHasProjectContext: this.responseWithProjectContext.get(message.messageId), - cwsprChatCodeBlockLanaguge: message.codeBlockLanguage, + cwsprChatProgrammingLanguage: message.codeBlockLanguage, } break case 'follow-up-was-clicked': diff --git a/packages/core/src/shared/telemetry/vscodeTelemetry.json b/packages/core/src/shared/telemetry/vscodeTelemetry.json index 5eb29491f0e..24a035f0826 100644 --- a/packages/core/src/shared/telemetry/vscodeTelemetry.json +++ b/packages/core/src/shared/telemetry/vscodeTelemetry.json @@ -78,11 +78,6 @@ "type": "boolean", "description": "true if query has project level context, false otherwise." }, - { - "name": "cwsprChatCodeBlockLanaguge", - "type": "string", - "description": "programming language generated by the Q chat" - }, { "name": "cwsprChatProjectContextQueryMs", "type": "int", @@ -907,7 +902,7 @@ "required": false }, { - "type": "cwsprChatCodeBlockLanaguge", + "type": "cwsprChatProgrammingLanguage", "required": false } ] From a2c4257a7b71d3e940b1adf97773780dc37715b7 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Thu, 10 Oct 2024 12:32:13 -0700 Subject: [PATCH 3/9] Adding Language to user events --- .../controllers/chat/messenger/messenger.ts | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts b/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts index d9515e9eb3a..706dad51954 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts @@ -184,7 +184,9 @@ export class Messenger { chatEvent.assistantResponseEvent.content.length > 0 ) { message += chatEvent.assistantResponseEvent.content - codeBlockLanguage = this.extractCodeBlockLanguage(message) + if (codeBlockLanguage === 'plaintext') { + codeBlockLanguage = this.extractCodeBlockLanguage(message) + } this.dispatcher.sendChatMessage( new ChatMessage( { @@ -341,9 +343,21 @@ export class Messenger { } private extractCodeBlockLanguage(message: string): string { - const firstLine = message.split('\n')[0] - const match = firstLine.match(/^```(\w+)/) - return match ? match[1] : 'plaintext' + // This fulfills both the cases of unit test generation(java, python) and general use case(Non java and Non python) languages. + const codeBlockStart = message.indexOf('```') + if (codeBlockStart === -1) { + return 'plaintext' + } + + const languageStart = codeBlockStart + 3 + const languageEnd = message.indexOf('\n', languageStart) + + if (languageEnd === -1) { + return 'plaintext' + } + + const language = message.substring(languageStart, languageEnd).trim() + return language !== '' ? language : 'plaintext' } public sendErrorMessage(errorMessage: string | undefined, tabID: string, requestID: string | undefined) { From b375876be2ca03344a67a64ab9f6f91b0d81a754 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:36:48 -0700 Subject: [PATCH 4/9] minor edits --- packages/core/src/amazonq/webview/ui/main.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/src/amazonq/webview/ui/main.ts b/packages/core/src/amazonq/webview/ui/main.ts index 1f2bb8215af..0c12c528c97 100644 --- a/packages/core/src/amazonq/webview/ui/main.ts +++ b/packages/core/src/amazonq/webview/ui/main.ts @@ -38,7 +38,7 @@ export const createMynahUI = ( // eslint-disable-next-line prefer-const let connector: Connector //Store the mapping between messageId and messageUserIntent for amazonq_interactWithMessage telemetry - const messageUserIntentMap = new Map() + const responseMetadata = new Map() window.addEventListener('error', (e) => { const { error, message } = e @@ -257,7 +257,7 @@ export const createMynahUI = ( item.userIntent !== undefined && item.codeBlockLanguage !== undefined ) { - messageUserIntentMap.set(item.messageId, [item.userIntent, item.codeBlockLanguage]) + responseMetadata.set(item.messageId, [item.userIntent, item.codeBlockLanguage]) } ideApi.postMessage({ command: 'update-chat-message-telemetry', @@ -519,8 +519,8 @@ export const createMynahUI = ( eventId, codeBlockIndex, totalCodeBlocks, - messageUserIntentMap.get(messageId)?.[0] ?? undefined, - messageUserIntentMap.get(messageId)?.[1] ?? undefined + responseMetadata.get(messageId)?.[0] ?? undefined, + responseMetadata.get(messageId)?.[1] ?? undefined ) }, onCodeBlockActionClicked: ( @@ -587,8 +587,8 @@ export const createMynahUI = ( eventId, codeBlockIndex, totalCodeBlocks, - messageUserIntentMap.get(messageId)?.[0] ?? undefined, - messageUserIntentMap.get(messageId)?.[1] ?? undefined + responseMetadata.get(messageId)?.[0] ?? undefined, + responseMetadata.get(messageId)?.[1] ?? undefined ) mynahUI.notify({ type: NotificationType.SUCCESS, From 483591b983d4c174c73fcefe249315a791143b18 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Tue, 15 Oct 2024 10:50:42 -0700 Subject: [PATCH 5/9] Moving the extractCodeBlockLanguage function to shared/markdown.ts and added test cases for this function --- .../controllers/chat/messenger/messenger.ts | 21 +--------- packages/core/src/shared/markdown.ts | 22 +++++++++++ .../core/src/test/shared/markdown.test.ts | 38 +++++++++++++++++++ 3 files changed, 62 insertions(+), 19 deletions(-) create mode 100644 packages/core/src/shared/markdown.ts create mode 100644 packages/core/src/test/shared/markdown.test.ts diff --git a/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts b/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts index 706dad51954..41a31d30edd 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts @@ -33,6 +33,7 @@ import { CodeScanIssue } from '../../../../codewhisperer/models/model' import { marked } from 'marked' import { JSDOM } from 'jsdom' import { LspController } from '../../../../amazonq/lsp/lspController' +import { extractCodeBlockLanguage } from '../../../../shared/markdown' export type StaticTextResponseType = 'quick-action-help' | 'onboarding-help' | 'transform' | 'help' @@ -185,7 +186,7 @@ export class Messenger { ) { message += chatEvent.assistantResponseEvent.content if (codeBlockLanguage === 'plaintext') { - codeBlockLanguage = this.extractCodeBlockLanguage(message) + codeBlockLanguage = extractCodeBlockLanguage(message) } this.dispatcher.sendChatMessage( new ChatMessage( @@ -342,24 +343,6 @@ export class Messenger { }) } - private extractCodeBlockLanguage(message: string): string { - // This fulfills both the cases of unit test generation(java, python) and general use case(Non java and Non python) languages. - const codeBlockStart = message.indexOf('```') - if (codeBlockStart === -1) { - return 'plaintext' - } - - const languageStart = codeBlockStart + 3 - const languageEnd = message.indexOf('\n', languageStart) - - if (languageEnd === -1) { - return 'plaintext' - } - - const language = message.substring(languageStart, languageEnd).trim() - return language !== '' ? language : 'plaintext' - } - public sendErrorMessage(errorMessage: string | undefined, tabID: string, requestID: string | undefined) { this.showChatExceptionMessage( { diff --git a/packages/core/src/shared/markdown.ts b/packages/core/src/shared/markdown.ts new file mode 100644 index 00000000000..215e6603906 --- /dev/null +++ b/packages/core/src/shared/markdown.ts @@ -0,0 +1,22 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +export const extractCodeBlockLanguage = (message: string) => { + // This fulfills both the cases of unit test generation(java, python) and general use case(Non java and Non python) languages. + const codeBlockStart = message.indexOf('```') + if (codeBlockStart === -1) { + return 'plaintext' + } + + const languageStart = codeBlockStart + 3 + const languageEnd = message.indexOf('\n', languageStart) + + if (languageEnd === -1) { + return 'plaintext' + } + + const language = message.substring(languageStart, languageEnd).trim() + return language !== '' ? language : 'plaintext' +} diff --git a/packages/core/src/test/shared/markdown.test.ts b/packages/core/src/test/shared/markdown.test.ts new file mode 100644 index 00000000000..306ff06ce48 --- /dev/null +++ b/packages/core/src/test/shared/markdown.test.ts @@ -0,0 +1,38 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import assert from 'assert' +import { extractCodeBlockLanguage } from '../../shared/markdown' + +describe('extractCodeBlockLanguage', () => { + it('should return "plaintext" when no code block is present', () => { + const message = 'This is a message without a code block' + assert.strictEqual(extractCodeBlockLanguage(message), 'plaintext') + }) + + it('should return the language when a code block with language is present', () => { + const message = 'Here is some code:\n```javascript\nconsole.log("Hello");\n```' + assert.strictEqual(extractCodeBlockLanguage(message), 'javascript') + }) + + it('should return "plaintext" when a code block is present but no language is specified', () => { + const message = 'Here is some code:\n```\nconsole.log("Hello");\n```' + assert.strictEqual(extractCodeBlockLanguage(message), 'plaintext') + }) + + it('should handle whitespace before the language specification', () => { + const message = 'Code:\n``` typescript\nconst x: number = 5;\n```' + assert.strictEqual(extractCodeBlockLanguage(message), 'typescript') + }) + + it('should return "plaintext" when the code block is not closed', () => { + const message = 'Incomplete code block:\n```javascript\nconsole.log("Hello");' + assert.strictEqual(extractCodeBlockLanguage(message), 'plaintext') + }) + + it('should handle empty messages', () => { + assert.strictEqual(extractCodeBlockLanguage(''), 'plaintext') + }) +}) From 6a095eedaaa8be5e31442fc6941e941caaf305d9 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:24:21 -0700 Subject: [PATCH 6/9] Minor edits --- packages/core/src/test/shared/markdown.test.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/core/src/test/shared/markdown.test.ts b/packages/core/src/test/shared/markdown.test.ts index 306ff06ce48..f362a476925 100644 --- a/packages/core/src/test/shared/markdown.test.ts +++ b/packages/core/src/test/shared/markdown.test.ts @@ -27,11 +27,6 @@ describe('extractCodeBlockLanguage', () => { assert.strictEqual(extractCodeBlockLanguage(message), 'typescript') }) - it('should return "plaintext" when the code block is not closed', () => { - const message = 'Incomplete code block:\n```javascript\nconsole.log("Hello");' - assert.strictEqual(extractCodeBlockLanguage(message), 'plaintext') - }) - it('should handle empty messages', () => { assert.strictEqual(extractCodeBlockLanguage(''), 'plaintext') }) From 3babec4125fdd3f8514b41ed3cb977933b676614 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:34:04 -0700 Subject: [PATCH 7/9] Adding cwsprChatProgrammingLanguage to commons package --- package.json | 2 +- packages/core/src/shared/telemetry/vscodeTelemetry.json | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/package.json b/package.json index c4b768d96e6..86df316c690 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "generateNonCodeFiles": "npm run generateNonCodeFiles -w packages/ --if-present" }, "devDependencies": { - "@aws-toolkits/telemetry": "^1.0.267", + "@aws-toolkits/telemetry": "^1.0.271", "@playwright/browser-chromium": "^1.43.1", "@types/vscode": "^1.68.0", "@types/vscode-webview": "^1.57.1", diff --git a/packages/core/src/shared/telemetry/vscodeTelemetry.json b/packages/core/src/shared/telemetry/vscodeTelemetry.json index 4f0661a8efa..005fc6c53ba 100644 --- a/packages/core/src/shared/telemetry/vscodeTelemetry.json +++ b/packages/core/src/shared/telemetry/vscodeTelemetry.json @@ -884,10 +884,6 @@ { "type": "cwsprChatHasProjectContext", "required": false - }, - { - "type": "cwsprChatProgrammingLanguage", - "required": false } ] }, From 4f02ccedf6a8d8a0f9c50c824014abc15b83aad6 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:02:58 -0700 Subject: [PATCH 8/9] Adding missing file --- package-lock.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index cc42d933cd4..7f19d6d955e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "vscode-nls-dev": "^4.0.4" }, "devDependencies": { - "@aws-toolkits/telemetry": "^1.0.267", + "@aws-toolkits/telemetry": "^1.0.271", "@playwright/browser-chromium": "^1.43.1", "@types/vscode": "^1.68.0", "@types/vscode-webview": "^1.57.1", @@ -5192,10 +5192,11 @@ } }, "node_modules/@aws-toolkits/telemetry": { - "version": "1.0.267", - "resolved": "https://registry.npmjs.org/@aws-toolkits/telemetry/-/telemetry-1.0.267.tgz", - "integrity": "sha512-qVEHuEW6WgqUafJP5oVtlaaWDtn2+6CklzqQgruqH7gxlNLBgi9pM9dpEC8xOYrHN3m1UW0LagUUgRS4ndDOyw==", + "version": "1.0.271", + "resolved": "https://registry.npmjs.org/@aws-toolkits/telemetry/-/telemetry-1.0.271.tgz", + "integrity": "sha512-xOd0YywkGk2ca24cgBBB+0AmsOCF0T4Hb4nHcIRIyRoJbOKsUSffZKMe8nfONw7wO9c5EZKzk5fxpuahhk1yYQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "ajv": "^6.12.6", "fs-extra": "^11.1.0", @@ -19394,7 +19395,7 @@ }, "engines": { "npm": "^10.1.0", - "vscode": "^1.83.0" + "vscode": "^1.68.0" } }, "packages/core/node_modules/@types/node": { From ab25f3e77d9a717486ea1ee70a131f695d290254 Mon Sep 17 00:00:00 2001 From: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:07:17 -0700 Subject: [PATCH 9/9] Bumping telemetry version --- package-lock.json | 8 +-- package.json | 2 +- .../src/shared/telemetry/vscodeTelemetry.json | 56 ------------------- 3 files changed, 5 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f19d6d955e..2b2c85ed48e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "vscode-nls-dev": "^4.0.4" }, "devDependencies": { - "@aws-toolkits/telemetry": "^1.0.271", + "@aws-toolkits/telemetry": "^1.0.272", "@playwright/browser-chromium": "^1.43.1", "@types/vscode": "^1.68.0", "@types/vscode-webview": "^1.57.1", @@ -5192,9 +5192,9 @@ } }, "node_modules/@aws-toolkits/telemetry": { - "version": "1.0.271", - "resolved": "https://registry.npmjs.org/@aws-toolkits/telemetry/-/telemetry-1.0.271.tgz", - "integrity": "sha512-xOd0YywkGk2ca24cgBBB+0AmsOCF0T4Hb4nHcIRIyRoJbOKsUSffZKMe8nfONw7wO9c5EZKzk5fxpuahhk1yYQ==", + "version": "1.0.272", + "resolved": "https://registry.npmjs.org/@aws-toolkits/telemetry/-/telemetry-1.0.272.tgz", + "integrity": "sha512-cWmyTkiNDcDXaRjX7WdWO5FiNzXUKcrKpkYkkPgi8t+I9ZwwWwt6FKps7FjEGvFzTFx6I9XbsWM1mRrkuvxdQw==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 86df316c690..7adf1e45542 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "generateNonCodeFiles": "npm run generateNonCodeFiles -w packages/ --if-present" }, "devDependencies": { - "@aws-toolkits/telemetry": "^1.0.271", + "@aws-toolkits/telemetry": "^1.0.272", "@playwright/browser-chromium": "^1.43.1", "@types/vscode": "^1.68.0", "@types/vscode-webview": "^1.57.1", diff --git a/packages/core/src/shared/telemetry/vscodeTelemetry.json b/packages/core/src/shared/telemetry/vscodeTelemetry.json index 005fc6c53ba..9c3dbbdfd67 100644 --- a/packages/core/src/shared/telemetry/vscodeTelemetry.json +++ b/packages/core/src/shared/telemetry/vscodeTelemetry.json @@ -103,11 +103,6 @@ "type": "int", "description": "CPU used by LSP server as a percentage of all available CPUs on the system" }, - { - "name": "cwsprChatProgrammingLanguage", - "type": "string", - "description": "Programming language associated with the message" - }, { "name": "cwsprChatConversationType", "type": "string", @@ -836,57 +831,6 @@ } ] }, - { - "name": "amazonq_interactWithMessage", - "description": "When a user interacts with a message in the conversation", - "metadata": [ - { - "type": "cwsprChatConversationId" - }, - { - "type": "credentialStartUrl", - "required": false - }, - { - "type": "cwsprChatMessageId" - }, - { - "type": "cwsprChatUserIntent", - "required": false - }, - { - "type": "cwsprChatInteractionType" - }, - { - "type": "cwsprChatInteractionTarget", - "required": false - }, - { - "type": "cwsprChatAcceptedCharactersLength", - "required": false - }, - { - "type": "cwsprChatAcceptedNumberOfLines", - "required": false - }, - { - "type": "cwsprChatHasReference", - "required": false - }, - { - "type": "cwsprChatCodeBlockIndex", - "required": false - }, - { - "type": "cwsprChatTotalCodeBlocks", - "required": false - }, - { - "type": "cwsprChatHasProjectContext", - "required": false - } - ] - }, { "name": "amazonq_modifyCode", "description": "% of code modified by the user after copying/inserting code from a message",