Skip to content

Commit a68d84c

Browse files
committed
Merge branch 'feature/falcon' of github.com:leigaol/aws-toolkit-vscode into update_context_cmd
2 parents 06876e2 + f191329 commit a68d84c

File tree

13 files changed

+79
-42
lines changed

13 files changed

+79
-42
lines changed

packages/amazonq/test/e2e/amazonq/chat.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { MynahUIDataModel } from '@aws/mynah-ui'
1111
import { assertContextCommands, assertQuickActions } from './assert'
1212
import { registerAuthHook, using } from 'aws-core-vscode/test'
1313
import { loginToIdC } from './utils/setup'
14-
import { webviewConstants } from 'aws-core-vscode/amazonq'
14+
import { webviewConstants, webviewTabConstants } from 'aws-core-vscode/amazonq'
1515

1616
describe('Amazon Q Chat', function () {
1717
let framework: qTestingFramework
@@ -60,7 +60,7 @@ describe('Amazon Q Chat', function () {
6060
})
6161

6262
it('Shows placeholder', () => {
63-
assert.deepStrictEqual(store.promptInputPlaceholder, 'Ask a question or enter "/" for quick actions')
63+
assert.deepStrictEqual(store.promptInputPlaceholder, webviewTabConstants.commonTabData.placeholder)
6464
})
6565

6666
it('Sends message', async () => {

packages/amazonq/test/e2e/amazonq/framework/jsdomInjector.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ export function injectJSDOM() {
4040
get() {
4141
return this.textContent
4242
},
43+
set(value) {
44+
this.textContent = value
45+
},
4346
})
4447

4548
// jsdom doesn't have support for structuredClone. See https://github.com/jsdom/jsdom/issues/3363

packages/core/package.nls.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,11 @@
309309
"AWS.codewhisperer.customization.notification.new_customizations.learn_more": "Learn More",
310310
"AWS.amazonq.title": "Amazon Q",
311311
"AWS.amazonq.chat": "Chat",
312+
"AWS.amazonq.savedPrompts.title": "Prompt name",
313+
"AWS.amazonq.savedPrompts.create": "Create",
314+
"AWS.amazonq.savedPrompts.action": "Create a new prompt",
315+
"AWS.amazonq.savedPrompts.placeholder": "Enter prompt name",
316+
"AWS.amazonq.savedPrompts.description": "Use this prompt by typing '@' followed by the prompt name.",
312317
"AWS.amazonq.chat.workspacecontext.enable.message": "Amazon Q: Workspace index is now enabled. You can disable it from Amazon Q settings.",
313318
"AWS.amazonq.security": "Code Issues",
314319
"AWS.amazonq.login": "Login",

packages/core/src/amazonq/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export { init as testChatAppInit } from '../amazonqTest/app'
2626
export { init as docChatAppInit } from '../amazonqDoc/app'
2727
export { amazonQHelpUrl } from '../shared/constants'
2828
export * as webviewConstants from './webview/ui/texts/constants'
29+
export * as webviewTabConstants from './webview/ui/tabs/constants'
2930
export { listCodeWhispererCommandsWalkthrough } from '../codewhisperer/ui/statusBarMenu'
3031
export { focusAmazonQPanel, focusAmazonQPanelKeybinding } from '../codewhispererChat/commands/registerCommands'
3132
export { TryChatCodeLensProvider, tryChatCodeLensCommand } from '../codewhispererChat/editor/codelens'

packages/core/src/amazonq/webview/ui/apps/cwChatConnector.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { ChatItemButton, ChatItemFormItem, ChatItemType, MynahUIDataModel, Quick
77
import { TabType } from '../storages/tabsStorage'
88
import { CWCChatItem } from '../connector'
99
import { BaseConnector, BaseConnectorProps } from './baseConnector'
10-
import { createPromptCommand } from '../tabs/constants'
1110

1211
export interface ConnectorProps extends BaseConnectorProps {
1312
onCWCContextCommandMessage: (message: CWCChatItem, command?: string) => string | undefined
@@ -205,8 +204,7 @@ export class Connector extends BaseConnector {
205204
tabID,
206205
tabType: this.getTabType(),
207206
})
208-
209-
if (contextItem.command === createPromptCommand) {
207+
if (contextItem.id === 'create-saved-prompt') {
210208
return false
211209
}
212210
return true

packages/core/src/amazonq/webview/ui/tabs/constants.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ export type TabTypeData = {
1313
contextCommands?: QuickActionCommandGroup[]
1414
}
1515

16-
export const createPromptCommand = 'Create a new prompt'
17-
1816
export const workspaceCommand: QuickActionCommandGroup = {
1917
groupName: 'Mention code',
2018
commands: [
@@ -25,9 +23,9 @@ export const workspaceCommand: QuickActionCommandGroup = {
2523
],
2624
}
2725

28-
const commonTabData: TabTypeData = {
26+
export const commonTabData: TabTypeData = {
2927
title: 'Chat',
30-
placeholder: 'Ask a question or enter "/" for quick actions',
28+
placeholder: 'Ask a question. Use @ to add context, / for quick actions',
3129
welcome: `Hi, I'm Amazon Q. I can answer your software development questions.
3230
Ask me to explain, debug, or optimize your code.
3331
You can enter \`/\` to see a list of quick actions. Add @workspace to the beginning of your message to include your entire workspace as context.`,

packages/core/src/codewhisperer/models/constants.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,3 +896,28 @@ export enum SecurityScanStep {
896896
}
897897

898898
export const amazonqCodeIssueDetailsTabTitle = 'Code Issue Details'
899+
900+
export const testGenExcludePatterns = [
901+
'**/annotation-generated-src/*',
902+
'**/annotation-generated-tst/*',
903+
'**/build/*',
904+
'**/env/*',
905+
'**/release-info/*',
906+
'**/*.jar',
907+
'**/*.exe',
908+
'**/*.a',
909+
'**/*.map',
910+
'**/*.graph',
911+
'**/*.so',
912+
'**/*.csv',
913+
'**/*.dylib',
914+
'**/*.parquet',
915+
'**/*.xlsx',
916+
'**/*.tar.gz',
917+
'**/*.tar',
918+
'**/*.pack',
919+
'**/*.pkg',
920+
'**/*.pkl',
921+
'**/*.deb',
922+
'**/*.model',
923+
]

packages/core/src/codewhisperer/util/customizationUtil.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export const setSelectedCustomization = async (customization: Customization, isO
128128
return
129129
}
130130
if (isOverride) {
131-
const previousOverride = globals.globalState.tryGet<string>('aws.amazonq.customization.override', String)
131+
const previousOverride = globals.globalState.tryGet<string>('aws.amazonq.customization.overrideV2', String)
132132
if (customization.arn === previousOverride) {
133133
return
134134
}
@@ -143,7 +143,7 @@ export const setSelectedCustomization = async (customization: Customization, isO
143143

144144
await globals.globalState.update('CODEWHISPERER_SELECTED_CUSTOMIZATION', selectedCustomizationObj)
145145
if (isOverride) {
146-
await globals.globalState.update('aws.amazonq.customization.override', customization.arn)
146+
await globals.globalState.update('aws.amazonq.customization.overrideV2', customization.arn)
147147
}
148148
vsCodeState.isFreeTierLimitReached = false
149149
await Commands.tryExecute('aws.amazonq.refreshStatusBar')

packages/core/src/codewhisperer/util/zipUtil.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { fs } from '../../shared/fs/fs'
1313
import { getLoggerForScope } from '../service/securityScanHandler'
1414
import { runtimeLanguageContext } from './runtimeLanguageContext'
1515
import { CodewhispererLanguage } from '../../shared/telemetry/telemetry.gen'
16-
import { CurrentWsFolders, collectFiles } from '../../shared/utilities/workspaceUtils'
16+
import { CurrentWsFolders, collectFiles, defaultExcludePatterns } from '../../shared/utilities/workspaceUtils'
1717
import {
1818
FileSizeExceededError,
1919
NoActiveFileError,
@@ -412,11 +412,18 @@ export class ZipUtil {
412412

413413
const sourceFiles = await collectFiles(
414414
projectPaths,
415-
vscode.workspace.workspaceFolders as CurrentWsFolders,
415+
(useCase === FeatureUseCase.TEST_GENERATION
416+
? [...(vscode.workspace.workspaceFolders ?? [])].sort(
417+
(a, b) => b.uri.fsPath.length - a.uri.fsPath.length
418+
)
419+
: vscode.workspace.workspaceFolders) as CurrentWsFolders,
416420
{
417421
maxSizeBytes: this.getProjectScanPayloadSizeLimitInBytes(),
418-
},
419-
useCase
422+
excludePatterns:
423+
useCase === FeatureUseCase.TEST_GENERATION
424+
? [...CodeWhispererConstants.testGenExcludePatterns, ...defaultExcludePatterns]
425+
: defaultExcludePatterns,
426+
}
420427
)
421428
for (const file of sourceFiles) {
422429
const projectName = path.basename(file.workspaceFolder.uri.fsPath)

packages/core/src/codewhispererChat/controllers/chat/controller.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ import globals from '../../../shared/extensionGlobals'
6767
import { MynahIconsType, MynahUIDataModel, QuickActionCommand } from '@aws/mynah-ui'
6868
import { LspClient } from '../../../amazonq/lsp/lspClient'
6969
import { ContextCommandItem, ContextCommandItemType } from '../../../amazonq/lsp/types'
70-
import { createPromptCommand, workspaceCommand } from '../../../amazonq/webview/ui/tabs/constants'
70+
import { workspaceCommand } from '../../../amazonq/webview/ui/tabs/constants'
7171
import fs from '../../../shared/fs/fs'
7272
import { FeatureConfigProvider, Features } from '../../../shared/featureConfig'
73+
import { i18n } from '../../../shared/i18n-helper'
7374

7475
export interface ChatControllerMessagePublishers {
7576
readonly processPromptChatMessage: MessagePublisher<PromptMessage>
@@ -121,7 +122,7 @@ export interface ChatControllerMessageListeners {
121122
readonly processFileClick: MessageListener<FileClick>
122123
}
123124

124-
const promptFileExtension = '.prompt.md'
125+
const promptFileExtension = '.md'
125126

126127
const additionalContentInnerContextLimit = 8192
127128

@@ -134,6 +135,8 @@ const getUserPromptsDirectory = () => {
134135
return path.join(fs.getUserHomeDir(), '.aws', 'amazonq', 'prompts')
135136
}
136137

138+
const createSavedPromptCommandId = 'create-saved-prompt'
139+
137140
export class ChatController {
138141
private readonly sessionStorage: ChatSessionStorage
139142
private readonly triggerEventsStorage: TriggerEventsStorage
@@ -456,9 +459,9 @@ export class ChatController {
456459
groupName: 'Prompts',
457460
actions: [
458461
{
459-
id: 'create-prompt',
462+
id: createSavedPromptCommandId,
460463
icon: 'plus',
461-
description: 'Create new prompt',
464+
description: i18n('AWS.amazonq.savedPrompts.action'),
462465
},
463466
],
464467
commands: [],
@@ -503,7 +506,11 @@ export class ChatController {
503506
}
504507

505508
// Add create prompt button to the bottom of the prompts list
506-
promptsCmd.children?.[0].commands.push({ command: createPromptCommand, icon: 'list-add' as MynahIconsType })
509+
promptsCmd.children?.[0].commands.push({
510+
command: i18n('AWS.amazonq.savedPrompts.action'),
511+
id: createSavedPromptCommandId,
512+
icon: 'list-add' as MynahIconsType,
513+
})
507514

508515
const lspClientReady = await LspClient.instance.waitUntilReady()
509516
if (lspClientReady) {
@@ -542,21 +549,21 @@ export class ChatController {
542549
id: 'prompt-name',
543550
type: 'textinput',
544551
mandatory: true,
545-
title: 'Prompt name',
546-
placeholder: 'Enter prompt name',
547-
description: `Use this prompt by typing \`@\` followed by the prompt name. Prompt will be saved in ${getUserPromptsDirectory()}.`,
552+
title: i18n('AWS.amazonq.savedPrompts.title'),
553+
placeholder: i18n('AWS.amazonq.savedPrompts.placeholder'),
554+
description: i18n('AWS.amazonq.savedPrompts.description'),
548555
},
549556
],
550557
[
551-
{ id: 'cancel-create-prompt', text: 'Cancel', status: 'clear' },
552-
{ id: 'submit-create-prompt', text: 'Create', status: 'main' },
558+
{ id: 'cancel-create-prompt', text: i18n('AWS.generic.cancel'), status: 'clear' },
559+
{ id: 'submit-create-prompt', text: i18n('AWS.amazonq.savedPrompts.create'), status: 'main' },
553560
],
554561
`Create a saved prompt`
555562
)
556563
}
557564

558565
private processQuickCommandGroupActionClicked(message: QuickCommandGroupActionClick) {
559-
if (message.actionId === 'create-prompt') {
566+
if (message.actionId === createSavedPromptCommandId) {
560567
this.handlePromptCreate(message.tabID)
561568
}
562569
}
@@ -578,7 +585,7 @@ export class ChatController {
578585
}
579586

580587
private async processContextSelected(message: ContextSelectedMessage) {
581-
if (message.tabID && message.contextItem.command === createPromptCommand) {
588+
if (message.tabID && message.contextItem.id === createSavedPromptCommandId) {
582589
this.handlePromptCreate(message.tabID)
583590
}
584591
}

0 commit comments

Comments
 (0)