Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 8 additions & 25 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions packages/amazonq/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@
"amazonQWorkspaceLspManifestMessage": {
"type": "boolean",
"default": false
},
"amazonQChatDisclaimer": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
Expand Down
2 changes: 1 addition & 1 deletion packages/amazonq/src/app/inline/sessionManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

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

// TODO: add more needed data to the session interface
interface CodeWhispererSession {
Expand Down
6 changes: 6 additions & 0 deletions packages/amazonq/src/lsp/chat/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
CHAT_OPTIONS,
COPY_TO_CLIPBOARD,
AuthFollowUpType,
DISCLAIMER_ACKNOWLEDGED,
} from '@aws/chat-client-ui-types'
import {
ChatResult,
Expand All @@ -27,6 +28,7 @@ import { Disposable, LanguageClient, Position, State, TextDocumentIdentifier } f
import * as jose from 'jose'
import { AmazonQChatViewProvider } from './webviewProvider'
import { AuthUtil } from 'aws-core-vscode/codewhisperer'
import { AmazonQPromptSettings } from 'aws-core-vscode/shared'

export function registerLanguageServerEventListener(languageClient: LanguageClient, provider: AmazonQChatViewProvider) {
languageClient.onDidChangeState(({ oldState, newState }) => {
Expand Down Expand Up @@ -106,6 +108,10 @@ export function registerMessageListeners(
}
break
}
case DISCLAIMER_ACKNOWLEDGED: {
void AmazonQPromptSettings.instance.disablePrompt('amazonQChatDisclaimer')
break
}
case chatRequestType.method: {
const partialResultToken = uuidv4()
const chatDisposable = languageClient.onProgress(chatRequestType, partialResultToken, (partialResult) =>
Expand Down
15 changes: 10 additions & 5 deletions packages/amazonq/src/lsp/chat/webviewProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ import {
WebviewViewResolveContext,
Uri,
} from 'vscode'
import { LanguageServerResolver } from 'aws-core-vscode/shared'
import { QuickActionCommandGroup } from '@aws/mynah-ui'
import * as path from 'path'
import { AmazonQPromptSettings, LanguageServerResolver } from 'aws-core-vscode/shared'

export class AmazonQChatViewProvider implements WebviewViewProvider {
public static readonly viewType = 'aws.amazonq.AmazonQChatView'
Expand Down Expand Up @@ -43,7 +43,11 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {

constructor(private readonly mynahUIPath: string) {}

public resolveWebviewView(webviewView: WebviewView, context: WebviewViewResolveContext, _token: CancellationToken) {
public async resolveWebviewView(
webviewView: WebviewView,
context: WebviewViewResolveContext,
_token: CancellationToken
) {
this.webview = webviewView.webview

const lspDir = Uri.parse(LanguageServerResolver.defaultDir)
Expand All @@ -54,12 +58,13 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {
}

const uiPath = webviewView.webview.asWebviewUri(Uri.parse(this.mynahUIPath)).toString()
webviewView.webview.html = this.getWebviewContent(uiPath)
webviewView.webview.html = await this.getWebviewContent(uiPath)

this.onDidResolveWebviewEmitter.fire()
}

private getWebviewContent(mynahUIPath: string) {
private async getWebviewContent(mynahUIPath: string) {
const disclaimerAcknowledged = AmazonQPromptSettings.instance.isPromptEnabled('amazonQChatDisclaimer')
return `
<!DOCTYPE html>
<html lang="en">
Expand All @@ -84,7 +89,7 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {
<script type="text/javascript" src="${mynahUIPath.toString()}" defer onload="init()"></script>
<script type="text/javascript">
const init = () => {
amazonQChat.createChat(acquireVsCodeApi(), { disclaimerAcknowledged: false, quickActionCommands: ${JSON.stringify(this.quickActionCommands)}});
amazonQChat.createChat(acquireVsCodeApi(), { disclaimerAcknowledged: ${disclaimerAcknowledged}, quickActionCommands: ${JSON.stringify(this.quickActionCommands)}});
}
</script>
</body>
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@
},
"devDependencies": {
"@aws-sdk/types": "^3.13.1",
"@aws/chat-client-ui-types": "^0.0.8",
"@aws/chat-client-ui-types": "^0.1.12",
"@aws/language-server-runtimes": "^0.2.49",
"@aws/language-server-runtimes-types": "^0.1.10",
"@cspotcode/source-map-support": "^0.8.1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { AuthUtil } from '../../../codewhisperer/util/authUtil'
import { FeatureConfigProvider, FeatureContext } from '../../../shared/featureConfig'
import globals from '../../../shared/extensionGlobals'
import { isSageMaker } from '../../../shared/extensionUtilities'
import { AmazonQPromptSettings } from '../../../shared/settings'

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

const disabledCommandsString = isSM ? `['/dev', '/transform', '/test', '/review', '/doc']` : '[]'
const disclaimerAcknowledged = globals.globalState.tryGet('aws.amazonq.disclaimerAcknowledged', Boolean, false)

const disclaimerAcknowledged = !AmazonQPromptSettings.instance.isPromptEnabled('amazonQChatDisclaimer')
const welcomeLoadCount = globals.globalState.tryGet('aws.amazonq.welcomeChatShowCount', Number, 0)

return `
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { isClickTelemetry, isOpenAgentTelemetry } from '../ui/telemetry/actions'
import globals from '../../../shared/extensionGlobals'
import { openUrl } from '../../../shared/utilities/vsCodeUtils'
import { DefaultAmazonQAppInitContext } from '../../apps/initContext'
import { AmazonQPromptSettings } from '../../../shared/settings'

const qChatModuleName = 'amazonqChat'

Expand Down Expand Up @@ -77,7 +78,7 @@ export function dispatchWebViewMessagesToApps(
return
}
case 'disclaimer-acknowledged': {
globals.globalState.tryUpdate('aws.amazonq.disclaimerAcknowledged', true)
void AmazonQPromptSettings.instance.disablePrompt('amazonQChatDisclaimer')
return
}
case 'update-welcome-count': {
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/shared/globalState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export type globalKey =
| 'aws.amazonq.codescan.groupingStrategy'
| 'aws.amazonq.notifications'
| 'aws.amazonq.welcomeChatShowCount'
| 'aws.amazonq.disclaimerAcknowledged'
| 'aws.amazonq.disclaimerAcknowledged' // Legacy, use `AmazonQPromptSettings` instead.
| 'aws.notifications'
| 'aws.notifications.dev' // keys to store notifications for testing
| 'aws.downloadPath'
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/shared/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export { activate as activateLogger } from './logger/activation'
export { activate as activateTelemetry } from './telemetry/activation'
export { DefaultAwsContext } from './awsContext'
export { DefaultAWSClientBuilder, ServiceOptions } from './awsClientBuilder'
export { Settings, Experiments, DevSettings } from './settings'
export { Settings, Experiments, DevSettings, AmazonQPromptSettings } from './settings'
export * from './extensionUtilities'
export * from './extensionStartup'
export { RegionProvider } from './regions/regionProvider'
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/shared/settings-amazonq.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ export const amazonqSettings = {
"minIdeVersion": {},
"ssoCacheError": {},
"amazonQLspManifestMessage": {},
"amazonQWorkspaceLspManifestMessage": {}
"amazonQWorkspaceLspManifestMessage": {},
"amazonQChatDisclaimer": {}
},
"amazonQ.showCodeWithReferences": {},
"amazonQ.allowFeatureDevelopmentToRunCodeAndTests": {},
Expand Down
9 changes: 9 additions & 0 deletions packages/core/src/shared/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,15 @@ export class AmazonQPromptSettings
{
public isPromptEnabled(promptName: amazonQPromptName): boolean {
try {
// Legacy migration for old globalState settings:
if (promptName === 'amazonQChatDisclaimer') {
const acknowledged = globals.globalState.tryGet('aws.amazonq.disclaimerAcknowledged', Boolean, false)
if (acknowledged) {
void this.update(promptName, true)
globals.globalState.tryUpdate('aws.amazonq.disclaimerAcknowledged', undefined)
}
}

return !this._getOrThrow(promptName, false)
} catch (e) {
this._log('prompt check for "%s" failed: %s', promptName, (e as Error).message)
Expand Down
Loading