Skip to content

Commit a6aa672

Browse files
authored
Merge branch 'aws:master' into master
2 parents adeb25e + e110478 commit a6aa672

File tree

13 files changed

+126
-147
lines changed

13 files changed

+126
-147
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"date": "2025-10-22",
3+
"version": "1.101.0",
4+
"entries": []
5+
}

packages/amazonq/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.101.0 2025-10-22
2+
3+
- Miscellaneous non-user-facing changes
4+
15
## 1.100.0 2025-10-16
26

37
- Miscellaneous non-user-facing changes

packages/amazonq/package.json

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "amazon-q-vscode",
33
"displayName": "Amazon Q",
44
"description": "The most capable generative AI–powered assistant for software development.",
5-
"version": "1.101.0-SNAPSHOT",
5+
"version": "1.102.0-SNAPSHOT",
66
"extensionKind": [
77
"workspace"
88
],
@@ -1387,26 +1387,61 @@
13871387
"fontCharacter": "\\f1e0"
13881388
}
13891389
},
1390-
"aws-schemas-registry": {
1390+
"aws-sagemakerunifiedstudio-catalog": {
13911391
"description": "AWS Contributed Icon",
13921392
"default": {
13931393
"fontPath": "./resources/fonts/aws-toolkit-icons.woff",
13941394
"fontCharacter": "\\f1e1"
13951395
}
13961396
},
1397-
"aws-schemas-schema": {
1397+
"aws-sagemakerunifiedstudio-spaces": {
13981398
"description": "AWS Contributed Icon",
13991399
"default": {
14001400
"fontPath": "./resources/fonts/aws-toolkit-icons.woff",
14011401
"fontCharacter": "\\f1e2"
14021402
}
14031403
},
1404-
"aws-stepfunctions-preview": {
1404+
"aws-sagemakerunifiedstudio-spaces-dark": {
14051405
"description": "AWS Contributed Icon",
14061406
"default": {
14071407
"fontPath": "./resources/fonts/aws-toolkit-icons.woff",
14081408
"fontCharacter": "\\f1e3"
14091409
}
1410+
},
1411+
"aws-sagemakerunifiedstudio-symbol-int": {
1412+
"description": "AWS Contributed Icon",
1413+
"default": {
1414+
"fontPath": "./resources/fonts/aws-toolkit-icons.woff",
1415+
"fontCharacter": "\\f1e4"
1416+
}
1417+
},
1418+
"aws-sagemakerunifiedstudio-table": {
1419+
"description": "AWS Contributed Icon",
1420+
"default": {
1421+
"fontPath": "./resources/fonts/aws-toolkit-icons.woff",
1422+
"fontCharacter": "\\f1e5"
1423+
}
1424+
},
1425+
"aws-schemas-registry": {
1426+
"description": "AWS Contributed Icon",
1427+
"default": {
1428+
"fontPath": "./resources/fonts/aws-toolkit-icons.woff",
1429+
"fontCharacter": "\\f1e6"
1430+
}
1431+
},
1432+
"aws-schemas-schema": {
1433+
"description": "AWS Contributed Icon",
1434+
"default": {
1435+
"fontPath": "./resources/fonts/aws-toolkit-icons.woff",
1436+
"fontCharacter": "\\f1e7"
1437+
}
1438+
},
1439+
"aws-stepfunctions-preview": {
1440+
"description": "AWS Contributed Icon",
1441+
"default": {
1442+
"fontPath": "./resources/fonts/aws-toolkit-icons.woff",
1443+
"fontCharacter": "\\f1e8"
1444+
}
14101445
}
14111446
},
14121447
"walkthroughs": [

packages/core/package.nls.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,8 @@
476476
"AWS.toolkit.lambda.walkthrough.title": "Get started building your application",
477477
"AWS.toolkit.lambda.walkthrough.description": "Your quick guide to build an application visually, iterate locally, and deploy to the cloud!",
478478
"AWS.toolkit.lambda.walkthrough.toolInstall.title": "Complete installation",
479-
"AWS.toolkit.lambda.walkthrough.toolInstall.description": "Manage your AWS services and resources with the AWS Command Line Interface (AWS CLI). \n\n[Install AWS CLI](command:aws.toolkit.installAWSCLI)\n\nBuild locally, invoke, and deploy your functions with the Serverless Application Model (SAM) CLI. \n\n[Install SAM CLI](command:aws.toolkit.installSAMCLI)\n\nDocker is an optional, third party tool that assists with local AWS Lambda runtime emulation. Docker is required to invoke Lambda functions on your local machine. \n\n[Install Docker (optional)](command:aws.toolkit.installDocker)\n\nEmulate your AWS cloud services locally with LocalStack to streamline testing in VS Code and CI environments. [Learn more](https://docs.localstack.cloud/aws/). \n\n[Install LocalStack (optional)](command:aws.toolkit.installLocalStack)",
479+
"AWS.toolkit.lambda.walkthrough.toolInstall.description.windows": "Manage your AWS services and resources with the AWS Command Line Interface (AWS CLI). \n\n[Install AWS CLI](command:aws.toolkit.installAWSCLI)\n\nBuild locally, invoke, and deploy your functions with the Serverless Application Model (SAM) CLI. \n\n[Install SAM CLI](command:aws.toolkit.installSAMCLI)\n\nDocker is an optional, third party tool that assists with local AWS Lambda runtime emulation. Docker is required to invoke Lambda functions on your local machine. \n\n[Install Docker (optional)](command:aws.toolkit.installDocker)\n\nEmulate your AWS cloud services locally with LocalStack to streamline testing in VS Code and CI environments. [Learn more](https://docs.localstack.cloud/aws/). \n\n[Install LocalStack (optional)](command:aws.toolkit.installLocalStack)",
480+
"AWS.toolkit.lambda.walkthrough.toolInstall.description": "Manage your AWS services and resources with the AWS Command Line Interface (AWS CLI). \n\n[Install AWS CLI](command:aws.toolkit.installAWSCLI)\n\nBuild locally, invoke, and deploy your functions with the Serverless Application Model (SAM) CLI. \n\n[Install SAM CLI](command:aws.toolkit.installSAMCLI)\n\nDocker is an optional, third party tool that assists with local AWS Lambda runtime emulation. Docker is required to invoke Lambda functions on your local machine. \n\n[Install Docker (optional)](command:aws.toolkit.installDocker)\n\nEmulate your AWS cloud services locally with LocalStack to streamline testing in VS Code and CI environments. [Learn more]((https://docs.localstack.cloud/aws/). \n\n[Install LocalStack (optional)](command:aws.toolkit.installLocalStack)\n\nFinch is an open source tool for local container development. Finch aims to help promote innovative upstream container projects by making it easy to install and use them. [Learn more](https://runfinch.com/) \n\n[Install Finch (optional)](command:aws.toolkit.installFinch)",
480481
"AWS.toolkit.lambda.walkthrough.chooseTemplate.title": "Choose your application template",
481482
"AWS.toolkit.lambda.walkthrough.chooseTemplate.description": "Select a starter application, visually compose an application from scratch, open an existing application, or browse more application examples. \n\nInfrastructure Composer allows you to visually compose modern applications in the cloud. It will define the necessary permissions between resources when you drag a connection between them. \n\n[Initialize your project](command:aws.toolkit.lambda.initializeWalkthroughProject)",
482483
"AWS.toolkit.lambda.walkthrough.step1.title": "Iterate locally",

packages/core/src/awsService/appBuilder/activation.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ async function registerAppBuilderCommands(context: ExtContext): Promise<void> {
150150
Commands.register('aws.toolkit.installLocalStack', async () => {
151151
await installLocalStackExtension(source)
152152
}),
153+
Commands.register('aws.toolkit.installFinch', async () => {
154+
await getOrInstallCliWrapper('finch', source)
155+
}),
153156
Commands.register('aws.toolkit.lambda.setWalkthroughToAPI', async () => {
154157
await setWalkthrough('API')
155158
}),

packages/core/src/shared/telemetry/vscodeTelemetry.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
{
22
"types": [
3+
{
4+
"name": "toolId",
5+
"type": "string",
6+
"description": "The tool being installed",
7+
"allowedValues": [
8+
"session-manager-plugin",
9+
"dotnet-lambda-deploy",
10+
"dotnet-deploy-cli",
11+
"aws-cli",
12+
"sam-cli",
13+
"docker",
14+
"finch"
15+
]
16+
},
317
{
418
"name": "amazonQProfileRegion",
519
"type": "string",

packages/core/src/shared/utilities/cliUtils.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ interface Cli {
5555
exec?: string
5656
}
5757

58-
export type AwsClis = Extract<ToolId, 'session-manager-plugin' | 'aws-cli' | 'sam-cli' | 'docker'>
58+
export type AwsClis = Extract<ToolId, 'session-manager-plugin' | 'aws-cli' | 'sam-cli' | 'docker' | 'finch'>
5959

6060
/**
6161
* CLIs and their full filenames and download paths for their respective OSes
@@ -170,6 +170,21 @@ export const awsClis: { [cli in AwsClis]: Cli } = {
170170
manualInstallLink: 'https://docs.docker.com/desktop',
171171
exec: 'docker',
172172
},
173+
// Currently Finch is available for MacOS and Linux; Windows support will be added if/when available
174+
finch: {
175+
command: {
176+
unix: ['finch', path.join('/', 'usr', 'bin', 'finch'), path.join('/', 'usr', 'local', 'bin', 'finch')],
177+
},
178+
source: {
179+
macos: {
180+
x86: 'https://github.com/runfinch/finch/releases/download/v1.11.0/Finch-v1.11.0-x86_64.pkg',
181+
arm: 'https://github.com/runfinch/finch/releases/download/v1.11.0/Finch-v1.11.0-aarch64.pkg',
182+
},
183+
},
184+
name: 'Finch',
185+
manualInstallLink: 'https://runfinch.com/docs/getting-started/installation/',
186+
exec: 'finch',
187+
},
173188
}
174189

175190
/**
@@ -185,7 +200,7 @@ export async function installCli(
185200
): Promise<string | never> {
186201
const cliToInstall = awsClis[cli]
187202
if (!cliToInstall) {
188-
throw new InstallerError(`Invalid not found for CLI: ${cli}`)
203+
throw new InstallerError(`Installer not found for CLI: ${cli}`)
189204
}
190205
let result: Result = 'Succeeded'
191206
let reason: string = ''
@@ -247,10 +262,11 @@ export async function installCli(
247262
case 'aws-cli':
248263
case 'sam-cli':
249264
case 'docker':
265+
case 'finch':
250266
cliPath = await installGui(cli, tempDir, progress, timeout)
251267
break
252268
default:
253-
throw new InstallerError(`Invalid not found for CLI: ${cli}`)
269+
throw new InstallerError(`Installer not found for CLI: ${cli}`)
254270
}
255271
} finally {
256272
timeout.dispose()

packages/core/src/test/awsService/appBuilder/walkthrough.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ const scenarios: TestScenario[] = [
5151
platform: 'win32',
5252
shouldSucceed: true,
5353
},
54+
{
55+
toolID: 'finch',
56+
platform: 'win32',
57+
shouldSucceed: false,
58+
},
5459
{
5560
toolID: 'aws-cli',
5661
platform: 'darwin',
@@ -66,6 +71,11 @@ const scenarios: TestScenario[] = [
6671
platform: 'darwin',
6772
shouldSucceed: true,
6873
},
74+
{
75+
toolID: 'finch',
76+
platform: 'darwin',
77+
shouldSucceed: true,
78+
},
6979
{
7080
toolID: 'aws-cli',
7181
platform: 'linux',
@@ -81,6 +91,11 @@ const scenarios: TestScenario[] = [
8191
platform: 'linux',
8292
shouldSucceed: false,
8393
},
94+
{
95+
toolID: 'finch',
96+
platform: 'linux',
97+
shouldSucceed: false,
98+
},
8499
]
85100

86101
describe('AppBuilder Walkthrough', function () {

packages/core/src/test/codewhisperer/startSecurityScan.test.ts

Lines changed: 1 addition & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,7 @@ import { assertTelemetry, closeAllEditors, getFetchStubWithResponse } from '../t
1717
import { AWSError } from 'aws-sdk'
1818
import { getTestWindow } from '../shared/vscode/window'
1919
import { SeverityLevel } from '../shared/vscode/message'
20-
import { cancel } from '../../shared/localizedText'
21-
import {
22-
showScannedFilesMessage,
23-
stopScanMessage,
24-
CodeAnalysisScope,
25-
monthlyLimitReachedNotification,
26-
scansLimitReachedErrorMessage,
27-
} from '../../codewhisperer/models/constants'
20+
import { showScannedFilesMessage, CodeAnalysisScope } from '../../codewhisperer/models/constants'
2821
import * as model from '../../codewhisperer/models/model'
2922
import * as errors from '../../shared/errors'
3023
import * as timeoutUtils from '../../shared/utilities/timeoutUtils'
@@ -124,70 +117,6 @@ describe('startSecurityScan', function () {
124117
})
125118
})
126119

127-
it('Should stop security scan for project scans when confirmed', async function () {
128-
getFetchStubWithResponse({ status: 200, statusText: 'testing stub' })
129-
const securityScanRenderSpy = sinon.spy(diagnosticsProvider, 'initSecurityScanRender')
130-
const securityScanStoppedErrorSpy = sinon.spy(model, 'CodeScanStoppedError')
131-
const testWindow = getTestWindow()
132-
testWindow.onDidShowMessage((message) => {
133-
if (message.message === stopScanMessage) {
134-
message.selectItem(startSecurityScan.stopScanButton)
135-
}
136-
})
137-
model.codeScanState.setToRunning()
138-
const scanPromise = startSecurityScan.startSecurityScan(
139-
mockSecurityPanelViewProvider,
140-
editor,
141-
createClient(),
142-
extensionContext,
143-
CodeAnalysisScope.PROJECT,
144-
false
145-
)
146-
await startSecurityScan.confirmStopSecurityScan(
147-
model.codeScanState,
148-
false,
149-
CodeAnalysisScope.PROJECT,
150-
undefined
151-
)
152-
await scanPromise
153-
assert.ok(securityScanRenderSpy.notCalled)
154-
assert.ok(securityScanStoppedErrorSpy.calledOnce)
155-
const warnings = testWindow.shownMessages.filter((m) => m.severity === SeverityLevel.Warning)
156-
assert.ok(warnings.map((m) => m.message).includes(stopScanMessage))
157-
})
158-
159-
it('Should not stop security scan for project scans when not confirmed', async function () {
160-
getFetchStubWithResponse({ status: 200, statusText: 'testing stub' })
161-
const securityScanRenderSpy = sinon.spy(diagnosticsProvider, 'initSecurityScanRender')
162-
const securityScanStoppedErrorSpy = sinon.spy(model, 'CodeScanStoppedError')
163-
const testWindow = getTestWindow()
164-
testWindow.onDidShowMessage((message) => {
165-
if (message.message === stopScanMessage) {
166-
message.selectItem(cancel)
167-
}
168-
})
169-
model.codeScanState.setToRunning()
170-
const scanPromise = startSecurityScan.startSecurityScan(
171-
mockSecurityPanelViewProvider,
172-
editor,
173-
createClient(),
174-
extensionContext,
175-
CodeAnalysisScope.PROJECT,
176-
false
177-
)
178-
await startSecurityScan.confirmStopSecurityScan(
179-
model.codeScanState,
180-
false,
181-
CodeAnalysisScope.PROJECT,
182-
undefined
183-
)
184-
await scanPromise
185-
assert.ok(securityScanRenderSpy.calledOnce)
186-
assert.ok(securityScanStoppedErrorSpy.notCalled)
187-
const warnings = testWindow.shownMessages.filter((m) => m.severity === SeverityLevel.Warning)
188-
assert.ok(warnings.map((m) => m.message).includes(stopScanMessage))
189-
})
190-
191120
it('Should stop security scan for auto file scans if setting is disabled', async function () {
192121
getFetchStubWithResponse({ status: 200, statusText: 'testing stub' })
193122
const securityScanRenderSpy = sinon.spy(diagnosticsProvider, 'initSecurityScanRender')
@@ -272,39 +201,6 @@ describe('startSecurityScan', function () {
272201
])
273202
})
274203

275-
it('Should not cancel a project scan if a file scan has started', async function () {
276-
getFetchStubWithResponse({ status: 200, statusText: 'testing stub' })
277-
await model.CodeScansState.instance.setScansEnabled(true)
278-
279-
const scanPromise = startSecurityScan.startSecurityScan(
280-
mockSecurityPanelViewProvider,
281-
editor,
282-
createClient(),
283-
extensionContext,
284-
CodeAnalysisScope.PROJECT,
285-
false
286-
)
287-
await startSecurityScan.startSecurityScan(
288-
mockSecurityPanelViewProvider,
289-
editor,
290-
createClient(),
291-
extensionContext,
292-
CodeAnalysisScope.FILE_AUTO,
293-
false
294-
)
295-
await scanPromise
296-
assertTelemetry('codewhisperer_securityScan', [
297-
{
298-
result: 'Succeeded',
299-
codewhispererCodeScanScope: 'FILE_AUTO',
300-
},
301-
{
302-
result: 'Succeeded',
303-
codewhispererCodeScanScope: 'PROJECT',
304-
},
305-
])
306-
})
307-
308204
it('Should handle failed scan job status', async function () {
309205
getFetchStubWithResponse({ status: 200, statusText: 'testing stub' })
310206

@@ -330,36 +226,6 @@ describe('startSecurityScan', function () {
330226
})
331227
})
332228

333-
it('Should show notification when throttled for project scans', async function () {
334-
getFetchStubWithResponse({ status: 200, statusText: 'testing stub' })
335-
const mockClient = createClient()
336-
mockClient.createCodeScan.throws({
337-
code: 'ThrottlingException',
338-
time: new Date(),
339-
name: 'error name',
340-
message: scansLimitReachedErrorMessage,
341-
} satisfies AWSError)
342-
sinon.stub(errors, 'isAwsError').returns(true)
343-
const testWindow = getTestWindow()
344-
await startSecurityScan.startSecurityScan(
345-
mockSecurityPanelViewProvider,
346-
editor,
347-
mockClient,
348-
extensionContext,
349-
CodeAnalysisScope.PROJECT,
350-
false
351-
)
352-
353-
assert.ok(testWindow.shownMessages.map((m) => m.message).includes(monthlyLimitReachedNotification))
354-
assertTelemetry('codewhisperer_securityScan', {
355-
codewhispererCodeScanScope: 'PROJECT',
356-
result: 'Failed',
357-
reason: 'ThrottlingException',
358-
reasonDesc: `ThrottlingException: Maximum com.amazon.aws.codewhisperer.StartCodeAnalysis reached for this month.`,
359-
passive: false,
360-
})
361-
})
362-
363229
it('Should set monthly quota exceeded when throttled for auto file scans', async function () {
364230
getFetchStubWithResponse({ status: 200, statusText: 'testing stub' })
365231
await model.CodeScansState.instance.setScansEnabled(true)

0 commit comments

Comments
 (0)