Skip to content

Commit 5383cfd

Browse files
jpinkney-awsjustinmk3
authored andcommitted
feat(amazonq): Handle disclaimer acknowledgement
1 parent a96a73e commit 5383cfd

File tree

13 files changed

+72
-38
lines changed

13 files changed

+72
-38
lines changed

package-lock.json

Lines changed: 8 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/amazonq/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@
127127
"amazonQWorkspaceLspManifestMessage": {
128128
"type": "boolean",
129129
"default": false
130+
},
131+
"amazonQChatDisclaimerAcknowledged": {
132+
"type": "boolean",
133+
"default": false
130134
}
131135
},
132136
"additionalProperties": false

packages/amazonq/src/app/inline/sessionManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes-types/inlineCompletionWithReferences'
6+
import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes-types'
77

88
// TODO: add more needed data to the session interface
99
interface CodeWhispererSession {

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
CHAT_OPTIONS,
1111
COPY_TO_CLIPBOARD,
1212
AuthFollowUpType,
13+
DISCLAIMER_ACKNOWLEDGED,
1314
} from '@aws/chat-client-ui-types'
1415
import {
1516
ChatResult,
@@ -27,6 +28,7 @@ import { Disposable, LanguageClient, Position, State, TextDocumentIdentifier } f
2728
import * as jose from 'jose'
2829
import { AmazonQChatViewProvider } from './webviewProvider'
2930
import { AuthUtil } from 'aws-core-vscode/codewhisperer'
31+
import { AmazonQPromptSettings } from 'aws-core-vscode/shared'
3032

3133
export function registerLanguageServerEventListener(languageClient: LanguageClient, provider: AmazonQChatViewProvider) {
3234
languageClient.onDidChangeState(({ oldState, newState }) => {
@@ -106,6 +108,10 @@ export function registerMessageListeners(
106108
}
107109
break
108110
}
111+
case DISCLAIMER_ACKNOWLEDGED: {
112+
void AmazonQPromptSettings.instance.update('amazonQChatDisclaimerAcknowledged', true)
113+
break
114+
}
109115
case chatRequestType.method: {
110116
const partialResultToken = uuidv4()
111117
const chatDisposable = languageClient.onProgress(chatRequestType, partialResultToken, (partialResult) =>

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ import {
1212
WebviewViewResolveContext,
1313
Uri,
1414
} from 'vscode'
15-
import { LanguageServerResolver } from 'aws-core-vscode/shared'
1615
import { QuickActionCommandGroup } from '@aws/mynah-ui'
1716
import * as path from 'path'
17+
import { LanguageServerResolver } from 'aws-core-vscode/shared'
18+
import { disclaimer } from 'aws-core-vscode/amazonq'
1819

1920
export class AmazonQChatViewProvider implements WebviewViewProvider {
2021
public static readonly viewType = 'aws.amazonq.AmazonQChatView'
@@ -43,7 +44,11 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {
4344

4445
constructor(private readonly mynahUIPath: string) {}
4546

46-
public resolveWebviewView(webviewView: WebviewView, context: WebviewViewResolveContext, _token: CancellationToken) {
47+
public async resolveWebviewView(
48+
webviewView: WebviewView,
49+
context: WebviewViewResolveContext,
50+
_token: CancellationToken
51+
) {
4752
this.webview = webviewView.webview
4853

4954
const lspDir = Uri.parse(LanguageServerResolver.defaultDir)
@@ -54,12 +59,13 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {
5459
}
5560

5661
const uiPath = webviewView.webview.asWebviewUri(Uri.parse(this.mynahUIPath)).toString()
57-
webviewView.webview.html = this.getWebviewContent(uiPath)
62+
webviewView.webview.html = await this.getWebviewContent(uiPath)
5863

5964
this.onDidResolveWebviewEmitter.fire()
6065
}
6166

62-
private getWebviewContent(mynahUIPath: string) {
67+
private async getWebviewContent(mynahUIPath: string) {
68+
const disclaimerAcknowledged = await disclaimer.disclaimerAcknowledged()
6369
return `
6470
<!DOCTYPE html>
6571
<html lang="en">
@@ -84,7 +90,7 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {
8490
<script type="text/javascript" src="${mynahUIPath.toString()}" defer onload="init()"></script>
8591
<script type="text/javascript">
8692
const init = () => {
87-
amazonQChat.createChat(acquireVsCodeApi(), { disclaimerAcknowledged: false, quickActionCommands: ${JSON.stringify(this.quickActionCommands)}});
93+
amazonQChat.createChat(acquireVsCodeApi(), { disclaimerAcknowledged: ${disclaimerAcknowledged}, quickActionCommands: ${JSON.stringify(this.quickActionCommands)}});
8894
}
8995
</script>
9096
</body>

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@
440440
},
441441
"devDependencies": {
442442
"@aws-sdk/types": "^3.13.1",
443-
"@aws/chat-client-ui-types": "^0.0.8",
443+
"@aws/chat-client-ui-types": "^0.1.12",
444444
"@aws/language-server-runtimes": "^0.2.49",
445445
"@aws/language-server-runtimes-types": "^0.1.10",
446446
"@cspotcode/source-map-support": "^0.8.1",

packages/core/src/amazonq/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export * from './lsp/config'
4848
export * as WorkspaceLspInstaller from './lsp/workspaceInstaller'
4949
export * as secondaryAuth from '../auth/secondaryAuth'
5050
export * as authConnection from '../auth/connection'
51+
export * as disclaimer from './util/disclaimer'
5152
import { FeatureContext } from '../shared/featureConfig'
5253

5354
/**
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import globals from '../../shared/extensionGlobals'
7+
import { AmazonQPromptSettings } from '../../shared/settings'
8+
9+
/**
10+
* If the previous global state was acknowledged, then suppress the prompt and set global state to false
11+
* Otherwise, the new flows will enable amazonQChatDisclaimerAcknowledged directly
12+
*/
13+
export async function disclaimerAcknowledged(): Promise<boolean> {
14+
const acknowledged = globals.globalState.tryGet('aws.amazonq.disclaimerAcknowledged', Boolean, false)
15+
if (acknowledged) {
16+
await AmazonQPromptSettings.instance.update('amazonQChatDisclaimerAcknowledged', true)
17+
await globals.globalState.update('aws.amazonq.disclaimerAcknowledged', false)
18+
}
19+
20+
return AmazonQPromptSettings.instance.get('amazonQChatDisclaimerAcknowledged', false)
21+
}

packages/core/src/amazonq/webview/generators/webViewContent.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { AuthUtil } from '../../../codewhisperer/util/authUtil'
99
import { FeatureConfigProvider, FeatureContext } from '../../../shared/featureConfig'
1010
import globals from '../../../shared/extensionGlobals'
1111
import { isSageMaker } from '../../../shared/extensionUtilities'
12+
import { disclaimerAcknowledged } from '../../util/disclaimer'
1213

1314
export class WebViewContentGenerator {
1415
private async generateFeatureConfigsData(): Promise<string> {
@@ -82,8 +83,7 @@ export class WebViewContentGenerator {
8283
const isSMUS = isSageMaker('SMUS')
8384

8485
const disabledCommandsString = isSM ? `['/dev', '/transform', '/test', '/review', '/doc']` : '[]'
85-
const disclaimerAcknowledged = globals.globalState.tryGet('aws.amazonq.disclaimerAcknowledged', Boolean, false)
86-
86+
const enableDisclaimer = await disclaimerAcknowledged()
8787
const welcomeLoadCount = globals.globalState.tryGet('aws.amazonq.welcomeChatShowCount', Number, 0)
8888

8989
return `
@@ -93,7 +93,7 @@ export class WebViewContentGenerator {
9393
const init = () => {
9494
createMynahUI(acquireVsCodeApi(), ${
9595
(await AuthUtil.instance.getChatAuthState()).amazonQ === 'connected'
96-
},${featureConfigsString},${welcomeLoadCount},${disclaimerAcknowledged},${disabledCommandsString},${isSMUS},${isSM});
96+
},${featureConfigsString},${welcomeLoadCount},${enableDisclaimer},${disabledCommandsString},${isSMUS},${isSM});
9797
}
9898
</script>
9999
`

packages/core/src/amazonq/webview/messages/messageDispatcher.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { isClickTelemetry, isOpenAgentTelemetry } from '../ui/telemetry/actions'
1515
import globals from '../../../shared/extensionGlobals'
1616
import { openUrl } from '../../../shared/utilities/vsCodeUtils'
1717
import { DefaultAmazonQAppInitContext } from '../../apps/initContext'
18+
import { AmazonQPromptSettings } from '../../../shared/settings'
1819

1920
const qChatModuleName = 'amazonqChat'
2021

@@ -77,7 +78,7 @@ export function dispatchWebViewMessagesToApps(
7778
return
7879
}
7980
case 'disclaimer-acknowledged': {
80-
globals.globalState.tryUpdate('aws.amazonq.disclaimerAcknowledged', true)
81+
void AmazonQPromptSettings.instance.update('amazonQChatDisclaimerAcknowledged', true)
8182
return
8283
}
8384
case 'update-welcome-count': {

0 commit comments

Comments
 (0)