diff --git a/package-lock.json b/package-lock.json index b157d768908..8f397f26598 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15043,13 +15043,13 @@ } }, "node_modules/@aws/language-server-runtimes": { - "version": "0.2.99", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.99.tgz", - "integrity": "sha512-WLMEHhWDgsJW2FAYDX6bxQ7NvR47I9H63SXIDbCEnZQdC9/OnKBdl0IJ8bWYQ256xaI9QVof7/YUXFSzNfV7DA==", + "version": "0.2.101", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.101.tgz", + "integrity": "sha512-LYmRa2t05B6KUbrrxFeFZ9EDslmjXD1th1MamJoi0tQx5VS5Ikc6rsN9PR9wdnX4sH6ZvYTtddtNh2zr8MbbHw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.41", + "@aws/language-server-runtimes-types": "^0.1.42", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.200.0", "@opentelemetry/core": "^2.0.0", @@ -15076,9 +15076,9 @@ } }, "node_modules/@aws/language-server-runtimes-types": { - "version": "0.1.41", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.41.tgz", - "integrity": "sha512-Ejupyj9560P6wQ9d9miSkgmEOUEczuc7mrFA727KmwXzp8yocNKonecdAn4r+CBxuPcbOaXDdyywK08cvAruig==", + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.42.tgz", + "integrity": "sha512-zwlF5vfH7jCvlVrkAynmO8uTMWxrIDDRvTmN+aOHminVy84qnG6qYLd+TFjmdeLKoH+fMInYQ+chJXPdOjb+rA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -30073,8 +30073,8 @@ "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.47", - "@aws/language-server-runtimes": "^0.2.99", - "@aws/language-server-runtimes-types": "^0.1.41", + "@aws/language-server-runtimes": "^0.2.101", + "@aws/language-server-runtimes-types": "^0.1.42", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34", diff --git a/packages/amazonq/src/app/inline/completion.ts b/packages/amazonq/src/app/inline/completion.ts index 30bcf83144c..6933a69f3e5 100644 --- a/packages/amazonq/src/app/inline/completion.ts +++ b/packages/amazonq/src/app/inline/completion.ts @@ -35,6 +35,9 @@ import { inlineCompletionsDebounceDelay, noInlineSuggestionsMsg, ReferenceInlineProvider, + getDiagnosticsDifferences, + getDiagnosticsOfCurrentFile, + toIdeDiagnostics, } from 'aws-core-vscode/codewhisperer' import { LineTracker } from './stateTracker/lineTracker' import { InlineTutorialAnnotation } from './tutorials/inlineTutorialAnnotation' @@ -116,6 +119,13 @@ export class InlineCompletionManager implements Disposable { firstCompletionDisplayLatency?: number ) => { // TODO: also log the seen state for other suggestions in session + // Calculate timing metrics before diagnostic delay + const totalSessionDisplayTime = performance.now() - requestStartTime + await sleep(1000) + const diagnosticDiff = getDiagnosticsDifferences( + this.sessionManager.getActiveSession()?.diagnosticsBeforeAccept, + getDiagnosticsOfCurrentFile() + ) const params: LogInlineCompletionSessionResultsParams = { sessionId: sessionId, completionSessionResult: { @@ -125,8 +135,10 @@ export class InlineCompletionManager implements Disposable { discarded: false, }, }, - totalSessionDisplayTime: Date.now() - requestStartTime, + totalSessionDisplayTime: totalSessionDisplayTime, firstCompletionDisplayLatency: firstCompletionDisplayLatency, + addedDiagnostics: diagnosticDiff.added.map((it) => toIdeDiagnostics(it)), + removedDiagnostics: diagnosticDiff.removed.map((it) => toIdeDiagnostics(it)), } this.languageClient.sendNotification(this.logSessionResultMessageName, params) this.disposable.dispose() diff --git a/packages/amazonq/src/app/inline/sessionManager.ts b/packages/amazonq/src/app/inline/sessionManager.ts index b660a5d94a7..05673132e9e 100644 --- a/packages/amazonq/src/app/inline/sessionManager.ts +++ b/packages/amazonq/src/app/inline/sessionManager.ts @@ -4,6 +4,7 @@ */ import * as vscode from 'vscode' import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes-types' +import { FileDiagnostic, getDiagnosticsOfCurrentFile } from 'aws-core-vscode/codewhisperer' // TODO: add more needed data to the session interface export interface CodeWhispererSession { @@ -14,6 +15,7 @@ export interface CodeWhispererSession { requestStartTime: number firstCompletionDisplayLatency?: number startPosition: vscode.Position + diagnosticsBeforeAccept: FileDiagnostic | undefined // partialResultToken for the next trigger if user accepts an EDITS suggestion editsStreakPartialResultToken?: number | string } @@ -31,6 +33,7 @@ export class SessionManager { startPosition: vscode.Position, firstCompletionDisplayLatency?: number ) { + const diagnosticsBeforeAccept = getDiagnosticsOfCurrentFile() this.activeSession = { sessionId, suggestions, @@ -38,6 +41,7 @@ export class SessionManager { requestStartTime, startPosition, firstCompletionDisplayLatency, + diagnosticsBeforeAccept, } } diff --git a/packages/core/package.json b/packages/core/package.json index fd57e94d97f..be9f49ca89f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -471,8 +471,8 @@ "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.47", - "@aws/language-server-runtimes": "^0.2.99", - "@aws/language-server-runtimes-types": "^0.1.41", + "@aws/language-server-runtimes": "^0.2.101", + "@aws/language-server-runtimes-types": "^0.1.42", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34",