Skip to content

Commit 00974f3

Browse files
authored
feat(amazonq): add reference log for chat messages (aws#7206)
## Problem Chat results are never getting added to the reference tracker ## Solution If code references are available, add them to the reference tracker --- - Treat all work as PUBLIC. Private `feature/x` branches will not be squash-merged at release time. - Your code changes must meet the guidelines in [CONTRIBUTING.md](https://github.com/aws/aws-toolkit-vscode/blob/master/CONTRIBUTING.md#guidelines). - License: I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent f07432b commit 00974f3

File tree

6 files changed

+26
-14
lines changed

6 files changed

+26
-14
lines changed

packages/amazonq/src/lsp/chat/messages.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,14 @@ import * as vscode from 'vscode'
5757
import { Disposable, LanguageClient, Position, TextDocumentIdentifier } from 'vscode-languageclient'
5858
import * as jose from 'jose'
5959
import { AmazonQChatViewProvider } from './webviewProvider'
60-
import { AuthUtil } from 'aws-core-vscode/codewhisperer'
60+
import { AuthUtil, ReferenceLogViewProvider } from 'aws-core-vscode/codewhisperer'
6161
import { amazonQDiffScheme, AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared'
6262
import {
6363
DefaultAmazonQAppInitContext,
6464
messageDispatcher,
6565
EditorContentController,
6666
ViewDiffMessage,
67+
referenceLogText,
6768
} from 'aws-core-vscode/amazonq'
6869
import { telemetry, TelemetryBase } from 'aws-core-vscode/telemetry'
6970
import { isValidResponseError } from './error'
@@ -531,26 +532,33 @@ async function handlePartialResult<T extends ChatResult>(
531532
tabId: tabId,
532533
})
533534
}
535+
536+
for (const ref of decryptedMessage.codeReference ?? []) {
537+
ReferenceLogViewProvider.instance.addReferenceLog(referenceLogText(ref))
538+
}
534539
}
535540

536541
/**
537542
* Decodes the final chat responses from the language server before sending it to mynah UI.
538543
* Once this is called the answer response is finished
539544
*/
540-
async function handleCompleteResult<T>(
545+
async function handleCompleteResult<T extends ChatResult>(
541546
result: string | T,
542547
encryptionKey: Buffer | undefined,
543548
provider: AmazonQChatViewProvider,
544549
tabId: string,
545550
disposable: Disposable
546551
) {
547552
const decryptedMessage =
548-
typeof result === 'string' && encryptionKey ? await decodeRequest(result, encryptionKey) : result
553+
typeof result === 'string' && encryptionKey ? await decodeRequest<T>(result, encryptionKey) : (result as T)
549554
void provider.webview?.postMessage({
550555
command: chatRequestType.method,
551556
params: decryptedMessage,
552557
tabId: tabId,
553558
})
559+
for (const ref of decryptedMessage.codeReference ?? []) {
560+
ReferenceLogViewProvider.instance.addReferenceLog(referenceLogText(ref))
561+
}
554562
disposable.dispose()
555563
}
556564

packages/core/src/amazonq/commons/model.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6+
import { LicenseUtil } from '../../codewhisperer/util/licenseUtil'
7+
import { CodeReference } from '../../codewhispererChat/view/connector/connector'
8+
69
// Currently importing ChatItemType in Mynah UI from the vscode side causes an error
710
// TODO remove this once the import stops failing
811
export type ChatItemType =
@@ -13,3 +16,10 @@ export type ChatItemType =
1316
| 'answer-stream'
1417
| 'answer-part'
1518
| 'code-result'
19+
20+
export const referenceLogText = (reference: CodeReference) =>
21+
`[${new Date().toLocaleString()}] Accepted recommendation from Amazon Q. Code provided with reference under <a href="${LicenseUtil.getLicenseHtml(
22+
reference.licenseName
23+
)}" target="_blank">${reference.licenseName}</a> license from repository <a href="${
24+
reference.url
25+
}" target="_blank">${reference.repository}</a>.<br><br>`

packages/core/src/amazonq/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export {
3535
computeDiff,
3636
} from './commons/diff'
3737
export { AuthFollowUpType, AuthMessageDataMap } from './auth/model'
38-
export { ChatItemType } from './commons/model'
38+
export { ChatItemType, referenceLogText } from './commons/model'
3939
export { ExtensionMessage } from '../amazonq/webview/ui/commands'
4040
export { CodeReference } from '../codewhispererChat/view/connector/connector'
4141
export { extractAuthFollowUp } from './util/authUtils'

packages/core/src/amazonqDoc/session/session.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { TelemetryHelper } from '../../amazonq/util/telemetryHelper'
1515
import { ConversationNotStartedState } from '../../amazonqFeatureDev/session/sessionState'
1616
import { logWithConversationId } from '../../amazonqFeatureDev/userFacingText'
1717
import { ConversationIdNotFoundError, IllegalStateError } from '../../amazonqFeatureDev/errors'
18-
import { referenceLogText } from '../../amazonqFeatureDev/constants'
18+
import { referenceLogText } from '../../amazonq/commons/model'
1919
import {
2020
DocInteractionType,
2121
DocV2AcceptanceEvent,

packages/core/src/amazonqFeatureDev/constants.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,6 @@ export const clientErrorMessages = [
2626
'The folder you chose did not contain any source files in a supported language. Choose another folder and try again.',
2727
]
2828

29-
// License text that's used in codewhisperer reference log
30-
export const referenceLogText = (reference: CodeReference) =>
31-
`[${new Date().toLocaleString()}] Accepted recommendation from Amazon Q. Code provided with reference under <a href="${LicenseUtil.getLicenseHtml(
32-
reference.licenseName
33-
)}" target="_blank">${reference.licenseName}</a> license from repository <a href="${
34-
reference.url
35-
}" target="_blank">${reference.repository}</a>.<br><br>`
36-
3729
// License text that's used in the file view
3830
export const licenseText = (reference: CodeReference) =>
3931
`<a href="${LicenseUtil.getLicenseHtml(reference.licenseName)}" target="_blank">${

packages/core/src/amazonqFeatureDev/session/session.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
UpdateFilesPathsParams,
1616
} from '../../amazonq/commons/types'
1717
import { ContentLengthError, ConversationIdNotFoundError, IllegalStateError } from '../errors'
18-
import { featureDevChat, referenceLogText, featureDevScheme } from '../constants'
18+
import { featureDevChat, featureDevScheme } from '../constants'
1919
import fs from '../../shared/fs/fs'
2020
import { FeatureDevClient } from '../client/featureDev'
2121
import { codeGenRetryLimit } from '../limits'
@@ -34,6 +34,8 @@ import { FollowUpTypes } from '../../amazonq/commons/types'
3434
import { SessionConfig } from '../../amazonq/commons/session/sessionConfigFactory'
3535
import { Messenger } from '../../amazonq/commons/connector/baseMessenger'
3636
import { ContentLengthError as CommonContentLengthError } from '../../shared/errors'
37+
import { referenceLogText } from '../../amazonq/commons/model'
38+
3739
export class Session {
3840
private _state?: SessionState | Omit<SessionState, 'uploadId'>
3941
private task: string = ''

0 commit comments

Comments
 (0)