Skip to content

Commit a7aa25c

Browse files
authored
feat(amazonq): add pair programming card (#7115)
## Problem agentic chat should have a pair programming card that appears at the top of chat ## Solution implement it with the following behaviors: 1. If the pair programming card was dismissed in a previous session, never show it again 2. Continue showing the pair programming card in new basic chat tabs until you click the "X" to dismiss it. Once the "X" is pressed it will never be shown for future tabs in the current chat-client session or future sessions 3. If you have multiple basic chat tabs open and click X on one of them it only closes the programmer mode card for that single tab depends on: aws/language-servers#1023 --- - 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 c89997e commit a7aa25c

File tree

6 files changed

+29
-11
lines changed

6 files changed

+29
-11
lines changed

package-lock.json

Lines changed: 8 additions & 8 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
@@ -131,6 +131,10 @@
131131
"amazonQChatDisclaimer": {
132132
"type": "boolean",
133133
"default": false
134+
},
135+
"amazonQChatPairProgramming": {
136+
"type": "boolean",
137+
"default": false
134138
}
135139
},
136140
"additionalProperties": false

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {
1212
AuthFollowUpType,
1313
DISCLAIMER_ACKNOWLEDGED,
1414
UiMessageResultParams,
15+
CHAT_PROMPT_OPTION_ACKNOWLEDGED,
16+
ChatPromptOptionAcknowledgedMessage,
1517
} from '@aws/chat-client-ui-types'
1618
import {
1719
ChatResult,
@@ -161,6 +163,15 @@ export function registerMessageListeners(
161163
void AmazonQPromptSettings.instance.update('amazonQChatDisclaimer', true)
162164
break
163165
}
166+
case CHAT_PROMPT_OPTION_ACKNOWLEDGED: {
167+
const acknowledgedMessage = message as ChatPromptOptionAcknowledgedMessage
168+
switch (acknowledgedMessage.params.messageId) {
169+
case 'programmerModeCardId': {
170+
void AmazonQPromptSettings.instance.disablePrompt('amazonQChatPairProgramming')
171+
}
172+
}
173+
break
174+
}
164175
case chatRequestType.method: {
165176
const chatParams = { ...message.params } as ChatParams
166177
const partialResultToken = uuidv4()

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {
9696
const isSMUS = isSageMaker('SMUS')
9797
const disabledCommands = isSM ? `['/dev', '/transform', '/test', '/review', '/doc']` : '[]'
9898
const disclaimerAcknowledged = !AmazonQPromptSettings.instance.isPromptEnabled('amazonQChatDisclaimer')
99+
const pairProgrammingAcknowledged =
100+
!AmazonQPromptSettings.instance.isPromptEnabled('amazonQChatPairProgramming')
99101
const welcomeCount = globals.globalState.tryGet('aws.amazonq.welcomeChatShowCount', Number, 0)
100102

101103
// only show profile card when the two conditions
@@ -144,7 +146,7 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {
144146
const vscodeApi = acquireVsCodeApi()
145147
const hybridChatConnector = new HybridChatAdapter(${(await AuthUtil.instance.getChatAuthState()).amazonQ === 'connected'},${featureConfigData},${welcomeCount},${disclaimerAcknowledged},${regionProfileString},${disabledCommands},${isSMUS},${isSM},vscodeApi.postMessage)
146148
const commands = [hybridChatConnector.initialQuickActions[0]]
147-
amazonQChat.createChat(vscodeApi, {disclaimerAcknowledged: ${disclaimerAcknowledged}, quickActionCommands: commands}, hybridChatConnector);
149+
amazonQChat.createChat(vscodeApi, {disclaimerAcknowledged: ${disclaimerAcknowledged}, pairProgrammingAcknowledged: ${pairProgrammingAcknowledged}, quickActionCommands: commands}, hybridChatConnector);
148150
}
149151
</script>
150152
</body>

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@
442442
"devDependencies": {
443443
"@aws-sdk/types": "^3.13.1",
444444
"@aws/chat-client": "^0.1.4",
445-
"@aws/chat-client-ui-types": "^0.1.12",
445+
"@aws/chat-client-ui-types": "^0.1.22",
446446
"@aws/language-server-runtimes": "^0.2.58",
447447
"@aws/language-server-runtimes-types": "^0.1.13",
448448
"@cspotcode/source-map-support": "^0.8.1",

packages/core/src/shared/settings-amazonq.gen.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ export const amazonqSettings = {
2121
"ssoCacheError": {},
2222
"amazonQLspManifestMessage": {},
2323
"amazonQWorkspaceLspManifestMessage": {},
24-
"amazonQChatDisclaimer": {}
24+
"amazonQChatDisclaimer": {},
25+
"amazonQChatPairProgramming": {}
2526
},
2627
"amazonQ.showCodeWithReferences": {},
2728
"amazonQ.allowFeatureDevelopmentToRunCodeAndTests": {},

0 commit comments

Comments
 (0)