Skip to content

Commit 19d9b5c

Browse files
authored
feat(amazonq): Add acknowledgement button for disclaimer (#5178)
1 parent 2bfdd5f commit 19d9b5c

File tree

8 files changed

+67
-5
lines changed

8 files changed

+67
-5
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "Add acknowledgement button for Amazon Q Chat disclaimer"
4+
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,13 @@ class Browser(parent: Disposable) : Disposable {
8787
}
8888
},
8989
${MeetQSettings.getInstance().reinvent2024OnboardingCount < MAX_ONBOARDING_PAGE_COUNT},
90+
${MeetQSettings.getInstance().disclaimerAcknowledged},
9091
$isFeatureDevAvailable, // whether /dev is available
9192
$isCodeTransformAvailable, // whether /transform is available
9293
$isDocAvailable, // whether /doc is available
9394
$isCodeScanAvailable, // whether /scan is available
9495
$isCodeTestAvailable // whether /test is available
95-
);
96+
);
9697
}
9798
</script>
9899
""".trimIndent()

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ class BrowserConnector(
4949
}
5050
}
5151

52+
"disclaimer-acknowledged" -> {
53+
MeetQSettings.getInstance().disclaimerAcknowledged = true
54+
}
55+
5256
// some weird issue preventing deserialization from working
5357
"open-user-guide" -> {
5458
BrowserUtil.browse(node.get("userGuideLink").asText())

plugins/amazonq/mynah-ui/src/mynah-ui/ui/commands.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ type MessageCommand =
1212
| 'tab-was-removed'
1313
| 'tab-was-changed'
1414
| 'ui-is-ready'
15+
| 'disclaimer-acknowledged'
1516
| 'ui-focus'
1617
| 'follow-up-was-clicked'
1718
| 'auth-follow-up-was-clicked'

plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,20 @@ import { ChatPrompt, CodeSelectionType} from "@aws/mynah-ui-chat/dist/static";
3030
import {welcomeScreenTabData} from "./walkthrough/welcome";
3131
import { agentWalkthroughDataModel } from './walkthrough/agent'
3232
import {createClickTelemetry, createOpenAgentTelemetry} from "./telemetry/actions";
33+
import {disclaimerAcknowledgeButtonId, disclaimerCard} from "./texts/disclaimer";
3334

3435
export const createMynahUI = (
3536
ideApi: any,
3637
showWelcomePage: boolean,
38+
disclaimerAcknowledged: boolean,
3739
featureDevInitEnabled: boolean,
3840
codeTransformInitEnabled: boolean,
3941
docInitEnabled: boolean,
4042
codeScanEnabled: boolean,
4143
codeTestEnabled: boolean
4244
) => {
45+
let disclaimerCardActive = !disclaimerAcknowledged
46+
4347
// eslint-disable-next-line prefer-const
4448
let mynahUI: MynahUI
4549
// eslint-disable-next-line prefer-const
@@ -556,6 +560,7 @@ export const createMynahUI = (
556560
// make sure to show/hide it accordingly
557561
mynahUI.updateStore(tabID, {
558562
quickActionCommands: tabDataGenerator.quickActionsGenerator.generateForTab('unknown'),
563+
...(disclaimerCardActive ? { promptInputStickyCard: disclaimerCard } : {}),
559564
})
560565
connector.onTabAdd(tabID)
561566
},
@@ -690,12 +695,32 @@ export const createMynahUI = (
690695
tabs: {
691696
'tab-1': {
692697
isSelected: true,
693-
store: showWelcomePage
694-
? welcomeScreenTabData(tabDataGenerator).store
695-
: tabDataGenerator.getTabData('cwc', true),
698+
store: {
699+
...(showWelcomePage
700+
? welcomeScreenTabData(tabDataGenerator).store
701+
: tabDataGenerator.getTabData('cwc', true)),
702+
...(disclaimerCardActive ? { promptInputStickyCard: disclaimerCard } : {}),
703+
},
696704
},
697705
},
698706
onInBodyButtonClicked: (tabId, messageId, action, eventId) => {
707+
if (action.id === disclaimerAcknowledgeButtonId) {
708+
disclaimerCardActive = false
709+
// post message to tell IDE that disclaimer is acknowledged
710+
ideApi.postMessage({
711+
command: 'disclaimer-acknowledged',
712+
})
713+
714+
// create telemetry
715+
ideApi.postMessage(createClickTelemetry('amazonq-disclaimer-acknowledge-button'))
716+
717+
// remove all disclaimer cards from all tabs
718+
Object.keys(mynahUI.getAllTabs()).forEach((storeTabKey) => {
719+
// eslint-disable-next-line no-null/no-null
720+
mynahUI.updateStore(storeTabKey, { promptInputStickyCard: null })
721+
})
722+
}
723+
699724
if (action.id === 'quick-start') {
700725
/**
701726
* quick start is the action on the welcome page. When its

plugins/amazonq/mynah-ui/src/mynah-ui/ui/tabs/generator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ What would you like to work on?`,
9494
return {
9595
tabTitle: taskName ?? this.tabTitle.get(tabType),
9696
promptInputInfo:
97-
'Amazon Q Developer uses generative AI. You may need to verify responses. See the [AWS Responsible AI Policy](https://aws.amazon.com/machine-learning/responsible-ai/policy/). Amazon Q Developer processes data across all US Regions. See [here](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/cross-region-inference.html) for more info. Amazon Q may retain chats to provide and maintain the service.',
97+
'Amazon Q Developer uses generative AI. You may need to verify responses. See the [AWS Responsible AI Policy](https://aws.amazon.com/machine-learning/responsible-ai/policy/).',
9898
quickActionCommands: this.quickActionsGenerator.generateForTab(tabType),
9999
promptInputPlaceholder: this.tabInputPlaceholder.get(tabType),
100100
contextCommands: this.tabContextCommand.get(tabType),
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import { ChatItem, MynahIcons } from '@aws/mynah-ui-chat'
7+
8+
export const disclaimerAcknowledgeButtonId = 'amazonq-disclaimer-acknowledge-button-id'
9+
export const disclaimerCard: Partial<ChatItem> = {
10+
messageId: 'amazonq-disclaimer-card',
11+
body: 'Amazon Q Developer uses generative AI. You may need to verify responses. See the [AWS Responsible AI Policy](https://aws.amazon.com/machine-learning/responsible-ai/policy/). Amazon Q Developer processes data across all US Regions. See [here](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/cross-region-inference.html) for more info. Amazon Q may retain chats to provide and maintain the service.',
12+
buttons: [
13+
{
14+
text: 'Acknowledge',
15+
id: disclaimerAcknowledgeButtonId,
16+
status: 'info',
17+
icon: MynahIcons.OK,
18+
},
19+
],
20+
}

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/settings/MeetQSettings.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,18 @@ class MeetQSettings : PersistentStateComponent<MeetQSettingsConfiguration> {
3232
state.reinvent2024OnboardingCount = value
3333
}
3434

35+
var disclaimerAcknowledged: Boolean
36+
get() = state.disclaimerAcknowledged
37+
set(value) {
38+
state.disclaimerAcknowledged = value
39+
}
40+
3541
companion object {
3642
fun getInstance(): MeetQSettings = service()
3743
}
3844
}
3945
data class MeetQSettingsConfiguration(
4046
var shouldDisplayPage: Boolean = true,
4147
var reinvent2024OnboardingCount: Int = 0,
48+
var disclaimerAcknowledged: Boolean = false,
4249
)

0 commit comments

Comments
 (0)