Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7f36a2d
config(amazonq): disable inline tutorial since it's taking ~250ms for…
Will-ShaoHua Jul 24, 2025
69516f4
fix(amazonq): early stop pagination requests when user decision is ma…
leigaol Jul 24, 2025
cf5d9b3
fix(amazonq): fix line break format when getting the current text doc…
atonaamz Jul 24, 2025
3084ae1
fix(amazonq): fix line break format when getting the current text doc…
atonaamz Jul 25, 2025
0769acb
fix(amazonq): Faster and more responsive auto trigger UX. (#7763)
leigaol Jul 25, 2025
64fae72
refactor(amazonq): Removing unwanted /dev and /doc code (#7760)
laileni-aws Jul 25, 2025
0bfc338
fix(auth): Fix for SSO Profile Role Chaining Regression (#7764)
laileni-aws Jul 25, 2025
6ac1207
config(amazonq): codewhisperer endpoint via settings.json (#7761)
Will-ShaoHua Jul 25, 2025
f36023f
fix(auth): Apply static workspace ID for Eclipse Che instances (#7614)
bryceitoc9 Jul 28, 2025
3b85269
telemetry(amazonq): flare is now source of truth for metrics (#7768)
chungjac Jul 28, 2025
f724fe9
refactor(amazonq): removing agentWalkThrough workflow (#7775)
laileni-aws Jul 28, 2025
0fcd624
fix(amazonq): switch off the feature flag incase sagemaker is involve…
abhraina-aws Jul 28, 2025
0dd5bf4
fix(amazonq): skip EDITS suggestion if there is no change between cur…
atonaamz Jul 28, 2025
8e11197
fix(amazonq): update the marketing message for the Amazon Q plugin
abhraina-aws Jul 29, 2025
e70b5ce
Merge pull request #7782 from abhraina-aws/marketing
bywang56 Jul 29, 2025
e6ff1ee
Merge pull request #7778 from atonaamz/nep-flare
bywang56 Jul 29, 2025
7741988
Release 1.86.0
Jul 30, 2025
11ca7ce
Release 3.70.0
Jul 30, 2025
e3f447d
Update version to snapshot version: 1.87.0-SNAPSHOT
Jul 30, 2025
aa2c6e7
Update version to snapshot version: 3.71.0-SNAPSHOT
Jul 30, 2025
5d70676
Merge release into master
Jul 30, 2025
632a570
Merge pull request #7739 from singhAws/code-review-tool
BlakeLazarine Jul 30, 2025
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
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ src.gen/*
**/src/shared/telemetry/clienttelemetry.d.ts
**/src/codewhisperer/client/codewhispererclient.d.ts
**/src/codewhisperer/client/codewhispereruserclient.d.ts
**/src/amazonqFeatureDev/client/featuredevproxyclient.d.ts
**/src/auth/sso/oidcclientpkce.d.ts

# Generated by tests
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

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

18 changes: 18 additions & 0 deletions packages/amazonq/.changes/1.86.0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"date": "2025-07-30",
"version": "1.86.0",
"entries": [
{
"type": "Bug Fix",
"description": "Let Enter invoke auto completion more consistently"
},
{
"type": "Bug Fix",
"description": "Faster and more responsive inline completion UX"
},
{
"type": "Bug Fix",
"description": "Use documentChangeEvent as auto trigger condition"
}
]
}

This file was deleted.

This file was deleted.

6 changes: 6 additions & 0 deletions packages/amazonq/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 1.86.0 2025-07-30

- **Bug Fix** Let Enter invoke auto completion more consistently
- **Bug Fix** Faster and more responsive inline completion UX
- **Bug Fix** Use documentChangeEvent as auto trigger condition

## 1.85.0 2025-07-19

- Miscellaneous non-user-facing changes
Expand Down
34 changes: 15 additions & 19 deletions packages/amazonq/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,49 +3,47 @@
[![Youtube Channel Views](https://img.shields.io/youtube/channel/views/UCd6MoB9NC6uYN2grvUNT-Zg?style=flat-square&logo=youtube&label=Youtube)](https://www.youtube.com/@amazonwebservices)
![Marketplace Installs](https://img.shields.io/vscode-marketplace/i/AmazonWebServices.amazon-q-vscode.svg?label=Installs&style=flat-square)

# Agent capabilities
# Agentic coding experience

Amazon Q Developer uses information across native and MCP server-based tools to intelligently perform actions beyond code suggestions, such as reading files, generating code diffs, and running commands based on your natural language instruction. Simply type your prompt in your preferred language and Q Developer will provide continuous status updates and iteratively apply changes based on your feedback, helping you accomplish tasks faster.

### Implement new features

`/dev` to task Amazon Q with generating new code across your entire project and implement features.
Generate new code across your entire project and implement features.

### Generate documentation

`/doc` to task Amazon Q with writing API, technical design, and onboarding documentation.
Write API, technical design, and onboarding documentation.

### Automate code reviews

`/review` to ask Amazon Q to perform code reviews, flagging suspicious code patterns and assessing deployment risk.
Perform code reviews, flagging suspicious code patterns and assessing deployment risk.

### Generate unit tests

`/test` to ask Amazon Q to generate unit tests and add them to your project, helping you improve code quality, fast.

### Transform workloads

`/transform` to upgrade your Java applications in minutes, not weeks.
Generate unit tests and add them to your project, helping you improve code quality, fast.

<br>

# Core features

### Inline chat

Seamlessly initiate chat within the inline coding experience. Select a section of code that you need assistance with and initiate chat within the editor to request actions such as "Optimize this code", "Add comments", or "Write tests".

### Chat
### MCP support

Generate code, explain code, and get answers about software development.
Add Model Context Protocol (MCP) servers to give Amazon Q Developer access to important context.

### Inline suggestions

Receive real-time code suggestions ranging from snippets to full functions based on your comments and existing code.

[_15+ languages supported including Python, TypeScript, Rust, Terraform, AWS Cloudformation, and more_](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-language-ide-support.html)

### Code reference log
### Inline chat

Seamlessly chat within the inline coding experience. Select a section of code that you need assistance with and initiate chat within the editor to request actions such as "Optimize this code", "Add comments", or "Write tests".

Attribute code from Amazon Q that is similar to training data. When code suggestions similar to training data are accepted, they will be added to the code reference log.
### Chat

Generate code, explain code, and get answers about software development.

<br>

Expand All @@ -55,8 +53,6 @@ Attribute code from Amazon Q that is similar to training data. When code suggest

**Pro Tier** - if your organization is on the Amazon Q Developer Pro tier, log in with single sign-on.

![Authentication gif](https://raw.githubusercontent.com/aws/aws-toolkit-vscode/HEAD/docs/marketplace/vscode/amazonq/auth-Q.gif)

# Troubleshooting & feedback

[File a bug](https://github.com/aws/aws-toolkit-vscode/issues/new?assignees=&labels=bug&projects=&template=bug_report.md) or [submit a feature request](https://github.com/aws/aws-toolkit-vscode/issues/new?assignees=&labels=feature-request&projects=&template=feature_request.md) on our Github repository.
25 changes: 9 additions & 16 deletions packages/amazonq/package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "amazon-q-vscode",
"displayName": "Amazon Q",
"description": "The most capable generative AI-powered assistant for building, operating, and transforming software, with advanced capabilities for managing data and AI",
"version": "1.86.0-SNAPSHOT",
"description": "The most capable generative AIpowered assistant for software development.",
"version": "1.87.0-SNAPSHOT",
"extensionKind": [
"workspace"
],
Expand Down Expand Up @@ -524,22 +524,17 @@
"command": "aws.amazonq.walkthrough.show",
"group": "1_help@1"
},
{
"command": "aws.amazonq.exploreAgents",
"when": "!aws.isSageMaker",
"group": "1_help@2"
},
{
"command": "aws.amazonq.github",
"group": "1_help@3"
"group": "1_help@2"
},
{
"command": "aws.amazonq.aboutExtension",
"group": "1_help@4"
"group": "1_help@3"
},
{
"command": "aws.amazonq.viewLogs",
"group": "1_help@5"
"group": "1_help@4"
}
],
"aws.amazonq.submenu.securityIssueMoreActions": [
Expand Down Expand Up @@ -846,12 +841,6 @@
"title": "%AWS.amazonq.openChat%",
"category": "%AWS.amazonq.title%"
},
{
"command": "aws.amazonq.exploreAgents",
"title": "%AWS.amazonq.exploreAgents%",
"category": "%AWS.amazonq.title%",
"enablement": "aws.codewhisperer.connected && !aws.isSageMaker"
},
{
"command": "aws.amazonq.walkthrough.show",
"title": "%AWS.amazonq.welcomeWalkthrough%"
Expand Down Expand Up @@ -975,6 +964,10 @@
"command": "aws.amazonq.showPrev",
"when": "inlineSuggestionVisible && !editorReadonly && aws.codewhisperer.connected"
},
{
"command": "aws.amazonq.checkInlineSuggestionVisibility",
"when": "inlineSuggestionVisible && !editorReadonly && aws.codewhisperer.connected"
},
{
"command": "aws.amazonq.inline.invokeChat",
"win": "ctrl+i",
Expand Down
21 changes: 12 additions & 9 deletions packages/amazonq/src/app/amazonqScan/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { Messenger } from './chat/controller/messenger/messenger'
import { UIMessageListener } from './chat/views/actions/uiMessageListener'
import { debounce } from 'lodash'
import { Commands, placeholder } from 'aws-core-vscode/shared'
import { codeReviewInChat } from './models/constants'

export function init(appContext: AmazonQAppInitContext) {
const scanChatControllerEventEmitters: ScanChatControllerEventEmitters = {
Expand Down Expand Up @@ -74,17 +75,19 @@ export function init(appContext: AmazonQAppInitContext) {
return debouncedEvent()
})

Commands.register('aws.amazonq.security.scan-statusbar', async () => {
if (AuthUtil.instance.isConnectionExpired()) {
await AuthUtil.instance.notifyReauthenticate()
}
return focusAmazonQPanel.execute(placeholder, 'amazonq.security.scan').then(() => {
DefaultAmazonQAppInitContext.instance.getAppsToWebViewMessagePublisher().publish({
sender: 'amazonqCore',
command: 'review',
if (!codeReviewInChat) {
Commands.register('aws.amazonq.security.scan-statusbar', async () => {
if (AuthUtil.instance.isConnectionExpired()) {
await AuthUtil.instance.notifyReauthenticate()
}
return focusAmazonQPanel.execute(placeholder, 'amazonq.security.scan').then(() => {
DefaultAmazonQAppInitContext.instance.getAppsToWebViewMessagePublisher().publish({
sender: 'amazonqCore',
command: 'review',
})
})
})
})
}

codeScanState.setChatControllers(scanChatControllerEventEmitters)
onDemandFileScanState.setChatControllers(scanChatControllerEventEmitters)
Expand Down
2 changes: 2 additions & 0 deletions packages/amazonq/src/app/amazonqScan/models/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,5 @@ const getIconForStep = (targetStep: number, currentStep: number) => {
? checkIcons.done
: checkIcons.wait
}

export const codeReviewInChat = true
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ export async function showEdits(
const svgGenerationService = new SvgGenerationService()
// Generate your SVG image with the file contents
const currentFile = editor.document.uri.fsPath
const { svgImage, startLine, newCode, origionalCodeHighlightRange } =
await svgGenerationService.generateDiffSvg(currentFile, item.insertText as string)
const { svgImage, startLine, newCode, originalCodeHighlightRange } = await svgGenerationService.generateDiffSvg(
currentFile,
item.insertText as string
)

// TODO: To investigate why it fails and patch [generateDiffSvg]
if (newCode.length === 0) {
Expand All @@ -42,7 +44,7 @@ export async function showEdits(
svgImage,
startLine,
newCode,
origionalCodeHighlightRange,
originalCodeHighlightRange,
session,
languageClient,
item,
Expand Down
49 changes: 37 additions & 12 deletions packages/amazonq/src/app/inline/EditRendering/svgGenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ type Range = { line: number; start: number; end: number }

const logger = getLogger('nextEditPrediction')
export const imageVerticalOffset = 1
export const emptyDiffSvg = {
svgImage: vscode.Uri.parse(''),
startLine: 0,
newCode: '',
originalCodeHighlightRange: [],
}

export class SvgGenerationService {
/**
Expand All @@ -27,10 +33,10 @@ export class SvgGenerationService {
svgImage: vscode.Uri
startLine: number
newCode: string
origionalCodeHighlightRange: Range[]
originalCodeHighlightRange: Range[]
}> {
const textDoc = await vscode.workspace.openTextDocument(filePath)
const originalCode = textDoc.getText()
const originalCode = textDoc.getText().replaceAll('\r\n', '\n')
if (originalCode === '') {
logger.error(`udiff format error`)
throw new ToolkitError('udiff format error')
Expand All @@ -52,6 +58,21 @@ export class SvgGenerationService {

// Get edit diffs with highlight
const { addedLines, removedLines } = this.getEditedLinesFromDiff(udiff)

// Calculate dimensions based on code content
const { offset, editStartLine, isPositionValid } = this.calculatePosition(
originalCode.split('\n'),
newCode.split('\n'),
addedLines,
currentTheme
)

// if the position for the EDITS suggestion is not valid (there is no difference between new
// and current code content), return EMPTY_DIFF_SVG and skip the suggestion.
if (!isPositionValid) {
return emptyDiffSvg
}

const highlightRanges = this.generateHighlightRanges(removedLines, addedLines, modifiedLines)
const diffAddedWithHighlight = this.getHighlightEdit(addedLines, highlightRanges.addedRanges)

Expand All @@ -61,13 +82,6 @@ export class SvgGenerationService {
registerWindow(window, document)
const draw = SVG(document.documentElement) as any

// Calculate dimensions based on code content
const { offset, editStartLine } = this.calculatePosition(
originalCode.split('\n'),
newCode.split('\n'),
addedLines,
currentTheme
)
const { width, height } = this.calculateDimensions(addedLines, currentTheme)
draw.size(width + offset, height)

Expand All @@ -86,7 +100,7 @@ export class SvgGenerationService {
svgImage: vscode.Uri.parse(svgResult),
startLine: editStartLine,
newCode: newCode,
origionalCodeHighlightRange: highlightRanges.removedRanges,
originalCodeHighlightRange: highlightRanges.removedRanges,
}
}

Expand Down Expand Up @@ -356,12 +370,23 @@ export class SvgGenerationService {
newLines: string[],
diffLines: string[],
theme: editorThemeInfo
): { offset: number; editStartLine: number } {
): { offset: number; editStartLine: number; isPositionValid: boolean } {
// Determine the starting line of the edit in the original file
let editStartLineInOldFile = 0
const maxLength = Math.min(originalLines.length, newLines.length)

for (let i = 0; i <= maxLength; i++) {
// if there is no difference between the original lines and the new lines, skip calculating for the start position.
if (i === maxLength && originalLines[i] === newLines[i] && originalLines.length === newLines.length) {
logger.info(
'There is no difference between current and new code suggestion. Skip calculating for start position.'
)
return {
offset: 0,
editStartLine: 0,
isPositionValid: false,
}
}
if (originalLines[i] !== newLines[i] || i === maxLength) {
editStartLineInOldFile = i
break
Expand All @@ -386,7 +411,7 @@ export class SvgGenerationService {
const startLineLength = originalLines[startLine]?.length || 0
const offset = (maxLineLength - startLineLength) * theme.fontSize * 0.7 + 10 // padding

return { offset, editStartLine: editStartLineInOldFile }
return { offset, editStartLine: editStartLineInOldFile, isPositionValid: true }
}

private escapeHtml(text: string): string {
Expand Down
Loading
Loading