From 726ccd8bc7689623d81bf1a4c644d9ce4937a5fb Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 16 Apr 2025 11:22:54 -0400 Subject: [PATCH 01/71] feat(amazonq): Add hybrid chat (#7032) ## Problem - we want a chat mode where agents are served by the local extension while the regular "Chat" is served by flare ## Solution - register mynah ui webview providers depending on lsp/normal implementation - temporarily disable the lsp (explain, fix, etc) commands, since they are also registered in the normal "agent" flow - redirect agent messages to the correct chat handler on the UI side - redirect UI messages meant for agents to the extension side - refactor main.ts so that it can be used by both the regular implementation and the lsp one ~(I'll open a seperate PR to merge this into master, since it's going to be a pain to maintain)~ - https://github.com/aws/aws-toolkit-vscode/pull/7033 - pass in references to mynah handlers so that mynah ref injection can happen after in flare - https://github.com/aws/aws-toolkit-vscode/pull/7046 Depends on ~https://github.com/aws/aws-toolkit-vscode/pull/7033~, https://github.com/aws/aws-toolkit-vscode/pull/7046 Related to https://github.com/aws/language-servers/pull/962 --- - 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. --- package-lock.json | 12 ++ packages/amazonq/src/app/chat/activation.ts | 27 +-- .../src/app/chat/node/activateAgents.ts | 19 ++ packages/amazonq/src/extensionNode.ts | 23 ++- packages/amazonq/src/lsp/chat/activation.ts | 17 +- packages/amazonq/src/lsp/chat/commands.ts | 86 ++++----- packages/amazonq/src/lsp/chat/messages.ts | 10 ++ .../amazonq/src/lsp/chat/webviewProvider.ts | 90 +++++++--- packages/amazonq/src/lsp/client.ts | 2 +- packages/core/package.json | 2 + packages/core/src/amazonq/index.ts | 7 +- packages/core/src/amazonq/indexNode.ts | 13 ++ .../webview/generators/featureConfig.ts | 35 ++++ .../webview/generators/webViewContent.ts | 35 +--- .../webview/messages/messageDispatcher.ts | 169 ++++++++++-------- .../amazonq/webview/ui/connectorAdapter.ts | 98 ++++++++++ packages/core/src/amazonq/webview/ui/main.ts | 29 ++- packages/core/src/shared/index.ts | 1 + packages/core/webpack.config.js | 1 + 19 files changed, 466 insertions(+), 210 deletions(-) create mode 100644 packages/amazonq/src/app/chat/node/activateAgents.ts create mode 100644 packages/core/src/amazonq/indexNode.ts create mode 100644 packages/core/src/amazonq/webview/generators/featureConfig.ts create mode 100644 packages/core/src/amazonq/webview/ui/connectorAdapter.ts diff --git a/package-lock.json b/package-lock.json index 42869391d1a..12c4e38c709 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10821,6 +10821,17 @@ "yargs": "^17.0.1" } }, + "node_modules/@aws/chat-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@aws/chat-client/-/chat-client-0.1.4.tgz", + "integrity": "sha512-5iqo9f/FjipyWxVPByVcI4yF9NPDOFInuS2ak4bK+j4d6ca1n20CnQrEQcMOdGjl5mde51s7X4Jqvlu3smgHGA==", + "dev": true, + "dependencies": { + "@aws/chat-client-ui-types": "^0.1.12", + "@aws/language-server-runtimes-types": "^0.1.10", + "@aws/mynah-ui": "^4.28.0" + } + }, "node_modules/@aws/chat-client-ui-types": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/@aws/chat-client-ui-types/-/chat-client-ui-types-0.1.12.tgz", @@ -26792,6 +26803,7 @@ }, "devDependencies": { "@aws-sdk/types": "^3.13.1", + "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.12", "@aws/language-server-runtimes": "^0.2.58", "@aws/language-server-runtimes-types": "^0.1.13", diff --git a/packages/amazonq/src/app/chat/activation.ts b/packages/amazonq/src/app/chat/activation.ts index 10f827814aa..11275188440 100644 --- a/packages/amazonq/src/app/chat/activation.ts +++ b/packages/amazonq/src/app/chat/activation.ts @@ -4,25 +4,14 @@ */ import * as vscode from 'vscode' -import { ExtensionContext, window } from 'vscode' +import { ExtensionContext } from 'vscode' import { telemetry } from 'aws-core-vscode/telemetry' import { AuthUtil, CodeWhispererSettings } from 'aws-core-vscode/codewhisperer' import { Commands, placeholder, funcUtil } from 'aws-core-vscode/shared' import * as amazonq from 'aws-core-vscode/amazonq' -import { scanChatAppInit } from '../amazonqScan' export async function activate(context: ExtensionContext) { const appInitContext = amazonq.DefaultAmazonQAppInitContext.instance - - registerApps(appInitContext, context) - - const provider = new amazonq.AmazonQChatViewProvider( - context, - appInitContext.getWebViewToAppsMessagePublishers(), - appInitContext.getAppsToWebViewMessageListener(), - appInitContext.onDidChangeAmazonQVisibility - ) - await amazonq.TryChatCodeLensProvider.register(appInitContext.onDidChangeAmazonQVisibility.event) const setupLsp = funcUtil.debounce(async () => { @@ -34,11 +23,6 @@ export async function activate(context: ExtensionContext) { }, 5000) context.subscriptions.push( - window.registerWebviewViewProvider(amazonq.AmazonQChatViewProvider.viewType, provider, { - webviewOptions: { - retainContextWhenHidden: true, - }, - }), amazonq.focusAmazonQChatWalkthrough.register(), amazonq.walkthroughInlineSuggestionsExample.register(), amazonq.walkthroughSecurityScanExample.register(), @@ -64,15 +48,6 @@ export async function activate(context: ExtensionContext) { void setupAuthNotification() } -function registerApps(appInitContext: amazonq.AmazonQAppInitContext, context: ExtensionContext) { - amazonq.cwChatAppInit(appInitContext) - amazonq.featureDevChatAppInit(appInitContext) - amazonq.gumbyChatAppInit(appInitContext) - amazonq.testChatAppInit(appInitContext) - scanChatAppInit(appInitContext) - amazonq.docChatAppInit(appInitContext) -} - /** * Display a notification to user for Log In. * diff --git a/packages/amazonq/src/app/chat/node/activateAgents.ts b/packages/amazonq/src/app/chat/node/activateAgents.ts new file mode 100644 index 00000000000..954f2892eda --- /dev/null +++ b/packages/amazonq/src/app/chat/node/activateAgents.ts @@ -0,0 +1,19 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as amazonqNode from 'aws-core-vscode/amazonq/node' +import { scanChatAppInit } from '../../amazonqScan' +import { DefaultAmazonQAppInitContext } from 'aws-core-vscode/amazonq' + +export function activateAgents() { + const appInitContext = DefaultAmazonQAppInitContext.instance + + amazonqNode.cwChatAppInit(appInitContext) + amazonqNode.featureDevChatAppInit(appInitContext) + amazonqNode.gumbyChatAppInit(appInitContext) + amazonqNode.testChatAppInit(appInitContext) + amazonqNode.docChatAppInit(appInitContext) + scanChatAppInit(appInitContext) +} diff --git a/packages/amazonq/src/extensionNode.ts b/packages/amazonq/src/extensionNode.ts index 945537b38ee..d3e98b025e8 100644 --- a/packages/amazonq/src/extensionNode.ts +++ b/packages/amazonq/src/extensionNode.ts @@ -5,8 +5,8 @@ import * as vscode from 'vscode' import { activateAmazonQCommon, amazonQContextPrefix, deactivateCommon } from './extension' -import { DefaultAmazonQAppInitContext } from 'aws-core-vscode/amazonq' -import { activate as activateQGumby } from 'aws-core-vscode/amazonqGumby' +import { DefaultAmazonQAppInitContext, AmazonQChatViewProvider } from 'aws-core-vscode/amazonq' +import { activate as activateTransformationHub } from 'aws-core-vscode/amazonqGumby' import { ExtContext, globals, @@ -30,6 +30,7 @@ import { beta } from 'aws-core-vscode/dev' import { activate as activateNotifications, NotificationsController } from 'aws-core-vscode/notifications' import { AuthState, AuthUtil } from 'aws-core-vscode/codewhisperer' import { telemetry, AuthUserState } from 'aws-core-vscode/telemetry' +import { activateAgents } from './app/chat/node/activateAgents' export async function activate(context: vscode.ExtensionContext) { // IMPORTANT: No other code should be added to this function. Place it in one of the following 2 functions where appropriate. @@ -53,9 +54,25 @@ async function activateAmazonQNode(context: vscode.ExtensionContext) { } if (!Experiments.instance.get('amazonqChatLSP', false)) { + const appInitContext = DefaultAmazonQAppInitContext.instance + const provider = new AmazonQChatViewProvider( + context, + appInitContext.getWebViewToAppsMessagePublishers(), + appInitContext.getAppsToWebViewMessageListener(), + appInitContext.onDidChangeAmazonQVisibility + ) + context.subscriptions.push( + vscode.window.registerWebviewViewProvider(AmazonQChatViewProvider.viewType, provider, { + webviewOptions: { + retainContextWhenHidden: true, + }, + }) + ) + // this is registered inside of lsp/chat/activation.ts when the chat experiment is enabled await activateCWChat(context) - await activateQGumby(extContext as ExtContext) } + activateAgents() + await activateTransformationHub(extContext as ExtContext) activateInlineChat(context) const authProvider = new CommonAuthViewProvider( diff --git a/packages/amazonq/src/lsp/chat/activation.ts b/packages/amazonq/src/lsp/chat/activation.ts index 406b753716f..7cadafadb79 100644 --- a/packages/amazonq/src/lsp/chat/activation.ts +++ b/packages/amazonq/src/lsp/chat/activation.ts @@ -8,9 +8,11 @@ import { LanguageClient } from 'vscode-languageclient' import { AmazonQChatViewProvider } from './webviewProvider' import { registerCommands } from './commands' import { registerLanguageServerEventListener, registerMessageListeners } from './messages' -import { globals } from 'aws-core-vscode/shared' +import { getLogger, globals } from 'aws-core-vscode/shared' +import { activate as registerLegacyChatListeners } from '../../app/chat/activation' +import { DefaultAmazonQAppInitContext } from 'aws-core-vscode/amazonq' -export function activate(languageClient: LanguageClient, encryptionKey: Buffer, mynahUIPath: string) { +export async function activate(languageClient: LanguageClient, encryptionKey: Buffer, mynahUIPath: string) { const provider = new AmazonQChatViewProvider(mynahUIPath) globals.context.subscriptions.push( @@ -29,6 +31,17 @@ export function activate(languageClient: LanguageClient, encryptionKey: Buffer, registerLanguageServerEventListener(languageClient, provider) provider.onDidResolveWebview(() => { + if (provider.webview) { + DefaultAmazonQAppInitContext.instance.getAppsToWebViewMessageListener().onMessage((msg) => { + provider.webview?.postMessage(msg).then(undefined, (e) => { + getLogger().error('webView.postMessage failed: %s', (e as Error).message) + }) + }) + } + registerMessageListeners(languageClient, provider, encryptionKey) }) + + // register event listeners from the legacy agent flow + await registerLegacyChatListeners(globals.context) } diff --git a/packages/amazonq/src/lsp/chat/commands.ts b/packages/amazonq/src/lsp/chat/commands.ts index dd495d1bfbf..8a84883b9a7 100644 --- a/packages/amazonq/src/lsp/chat/commands.ts +++ b/packages/amazonq/src/lsp/chat/commands.ts @@ -4,26 +4,30 @@ */ import { Commands, globals } from 'aws-core-vscode/shared' -import { window } from 'vscode' +// import { window } from 'vscode' import { AmazonQChatViewProvider } from './webviewProvider' +/** + * TODO: Re-enable these once we can figure out which path they're going to live in + * In hybrid chat mode they were being registered twice causing a registration error + */ export function registerCommands(provider: AmazonQChatViewProvider) { globals.context.subscriptions.push( - registerGenericCommand('aws.amazonq.explainCode', 'Explain', provider), - registerGenericCommand('aws.amazonq.refactorCode', 'Refactor', provider), - registerGenericCommand('aws.amazonq.fixCode', 'Fix', provider), - registerGenericCommand('aws.amazonq.optimizeCode', 'Optimize', provider), - Commands.register('aws.amazonq.sendToPrompt', (data) => { - const triggerType = getCommandTriggerType(data) - const selection = getSelectedText() + // registerGenericCommand('aws.amazonq.explainCode', 'Explain', provider), + // registerGenericCommand('aws.amazonq.refactorCode', 'Refactor', provider), + // registerGenericCommand('aws.amazonq.fixCode', 'Fix', provider), + // registerGenericCommand('aws.amazonq.optimizeCode', 'Optimize', provider), + // Commands.register('aws.amazonq.sendToPrompt', (data) => { + // const triggerType = getCommandTriggerType(data) + // const selection = getSelectedText() - void focusAmazonQPanel().then(() => { - void provider.webview?.postMessage({ - command: 'sendToPrompt', - params: { selection: selection, triggerType }, - }) - }) - }), + // void focusAmazonQPanel().then(() => { + // void provider.webview?.postMessage({ + // command: 'sendToPrompt', + // params: { selection: selection, triggerType }, + // }) + // }) + // }), Commands.register('aws.amazonq.openTab', () => { void focusAmazonQPanel().then(() => { void provider.webview?.postMessage({ @@ -35,36 +39,36 @@ export function registerCommands(provider: AmazonQChatViewProvider) { ) } -function getSelectedText(): string { - const editor = window.activeTextEditor - if (editor) { - const selection = editor.selection - const selectedText = editor.document.getText(selection) - return selectedText - } +// function getSelectedText(): string { +// const editor = window.activeTextEditor +// if (editor) { +// const selection = editor.selection +// const selectedText = editor.document.getText(selection) +// return selectedText +// } - return ' ' -} +// return ' ' +// } -function getCommandTriggerType(data: any): string { - // data is undefined when commands triggered from keybinding or command palette. Currently no - // way to differentiate keybinding and command palette, so both interactions are recorded as keybinding - return data === undefined ? 'hotkeys' : 'contextMenu' -} +// function getCommandTriggerType(data: any): string { +// // data is undefined when commands triggered from keybinding or command palette. Currently no +// // way to differentiate keybinding and command palette, so both interactions are recorded as keybinding +// return data === undefined ? 'hotkeys' : 'contextMenu' +// } -function registerGenericCommand(commandName: string, genericCommand: string, provider: AmazonQChatViewProvider) { - return Commands.register(commandName, (data) => { - const triggerType = getCommandTriggerType(data) - const selection = getSelectedText() +// function registerGenericCommand(commandName: string, genericCommand: string, provider: AmazonQChatViewProvider) { +// return Commands.register(commandName, (data) => { +// const triggerType = getCommandTriggerType(data) +// const selection = getSelectedText() - void focusAmazonQPanel().then(() => { - void provider.webview?.postMessage({ - command: 'genericCommand', - params: { genericCommand, selection, triggerType }, - }) - }) - }) -} +// void focusAmazonQPanel().then(() => { +// void provider.webview?.postMessage({ +// command: 'genericCommand', +// params: { genericCommand, selection, triggerType }, +// }) +// }) +// }) +// } /** * Importing focusAmazonQPanel from aws-core-vscode/amazonq leads to several dependencies down the chain not resolving since AmazonQ chat diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index cf8b4f55940..799b6b2ae47 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -40,6 +40,7 @@ import * as jose from 'jose' import { AmazonQChatViewProvider } from './webviewProvider' import { AuthUtil } from 'aws-core-vscode/codewhisperer' import { AmazonQPromptSettings, messages } from 'aws-core-vscode/shared' +import { DefaultAmazonQAppInitContext, messageDispatcher } from 'aws-core-vscode/amazonq' export function registerLanguageServerEventListener(languageClient: LanguageClient, provider: AmazonQChatViewProvider) { languageClient.info( @@ -73,6 +74,15 @@ export function registerMessageListeners( provider.webview?.onDidReceiveMessage(async (message) => { languageClient.info(`[VSCode Client] Received ${JSON.stringify(message)} from chat`) + if ((message.tabType && message.tabType !== 'cwc') || messageDispatcher.isLegacyEvent(message.command)) { + // handle the mynah ui -> agent legacy flow + messageDispatcher.handleWebviewEvent( + message, + DefaultAmazonQAppInitContext.instance.getWebViewToAppsMessagePublishers() + ) + return + } + const webview = provider.webview switch (message.command) { case COPY_TO_CLIPBOARD: diff --git a/packages/amazonq/src/lsp/chat/webviewProvider.ts b/packages/amazonq/src/lsp/chat/webviewProvider.ts index 426af63739d..2c4d5755434 100644 --- a/packages/amazonq/src/lsp/chat/webviewProvider.ts +++ b/packages/amazonq/src/lsp/chat/webviewProvider.ts @@ -12,9 +12,16 @@ import { WebviewViewResolveContext, Uri, } from 'vscode' -import { QuickActionCommandGroup } from '@aws/mynah-ui' import * as path from 'path' -import { AmazonQPromptSettings, LanguageServerResolver } from 'aws-core-vscode/shared' +import { + globals, + isSageMaker, + AmazonQPromptSettings, + LanguageServerResolver, + amazonqMark, +} from 'aws-core-vscode/shared' +import { AuthUtil, RegionProfile } from 'aws-core-vscode/codewhisperer' +import { featureConfig } from 'aws-core-vscode/amazonq' export class AmazonQChatViewProvider implements WebviewViewProvider { public static readonly viewType = 'aws.amazonq.AmazonQChatView' @@ -23,24 +30,6 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { webview: Webview | undefined - private readonly quickActionCommands: QuickActionCommandGroup[] = [ - { - groupName: 'Quick Actions', - commands: [ - { - command: '/help', - icon: 'help', - description: 'Learn more about Amazon Q', - }, - { - command: '/clear', - icon: 'trash', - description: 'Clear this session', - }, - ], - }, - ] - constructor(private readonly mynahUIPath: string) {} public async resolveWebviewView( @@ -51,25 +40,60 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { this.webview = webviewView.webview const lspDir = Uri.parse(LanguageServerResolver.defaultDir) + const dist = Uri.joinPath(globals.context.extensionUri, 'dist') webviewView.webview.options = { enableScripts: true, enableCommandUris: true, - localResourceRoots: [lspDir, Uri.parse(path.dirname(this.mynahUIPath))], + localResourceRoots: [lspDir, dist], } + const source = 'vue/src/amazonq/webview/ui/amazonq-ui-connector-adapter.js' // Sent to dist/vue folder in webpack. + const serverHostname = process.env.WEBPACK_DEVELOPER_SERVER + const connectorAdapterPath = + serverHostname !== undefined + ? Uri.parse(serverHostname) + .with({ path: `/${source}` }) + .toString() + : webviewView.webview.asWebviewUri(Uri.parse(path.join(dist.fsPath, source))).toString() const uiPath = webviewView.webview.asWebviewUri(Uri.parse(this.mynahUIPath)).toString() - webviewView.webview.html = await this.getWebviewContent(uiPath) + webviewView.webview.html = await this.getWebviewContent(uiPath, connectorAdapterPath) this.onDidResolveWebviewEmitter.fire() + performance.mark(amazonqMark.open) } - private async getWebviewContent(mynahUIPath: string) { + private async getWebviewContent(mynahUIPath: string, hybridChatConnector: string) { + const featureConfigData = await featureConfig.getFeatureConfigs() + + const isSM = isSageMaker('SMAI') + const isSMUS = isSageMaker('SMUS') + const disabledCommands = isSM ? `['/dev', '/transform', '/test', '/review', '/doc']` : '[]' const disclaimerAcknowledged = AmazonQPromptSettings.instance.isPromptEnabled('amazonQChatDisclaimer') + const welcomeCount = globals.globalState.tryGet('aws.amazonq.welcomeChatShowCount', Number, 0) + + // only show profile card when the two conditions + // 1. profile count >= 2 + // 2. not default (fallback) which has empty arn + let regionProfile: RegionProfile | undefined = AuthUtil.instance.regionProfileManager.activeRegionProfile + if (AuthUtil.instance.regionProfileManager.profiles.length === 1) { + regionProfile = undefined + } + + const regionProfileString: string = JSON.stringify(regionProfile) + + const entrypoint = process.env.WEBPACK_DEVELOPER_SERVER + ? 'http: localhost' + : 'https: file+.vscode-resources.vscode-cdn.net' + + const contentPolicy = `default-src ${entrypoint} data: blob: 'unsafe-inline'; + script-src ${entrypoint} filesystem: ws: wss: 'unsafe-inline';` + return ` + Chat - - + + diff --git a/packages/core/package.json b/packages/core/package.json index 60b0be39320..98f24feae81 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -442,7 +442,7 @@ "devDependencies": { "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", - "@aws/chat-client-ui-types": "^0.1.12", + "@aws/chat-client-ui-types": "^0.1.22", "@aws/language-server-runtimes": "^0.2.58", "@aws/language-server-runtimes-types": "^0.1.13", "@cspotcode/source-map-support": "^0.8.1", diff --git a/packages/core/src/shared/settings-amazonq.gen.ts b/packages/core/src/shared/settings-amazonq.gen.ts index f0a3d47f989..7bd20bc1e78 100644 --- a/packages/core/src/shared/settings-amazonq.gen.ts +++ b/packages/core/src/shared/settings-amazonq.gen.ts @@ -21,7 +21,8 @@ export const amazonqSettings = { "ssoCacheError": {}, "amazonQLspManifestMessage": {}, "amazonQWorkspaceLspManifestMessage": {}, - "amazonQChatDisclaimer": {} + "amazonQChatDisclaimer": {}, + "amazonQChatPairProgramming": {} }, "amazonQ.showCodeWithReferences": {}, "amazonQ.allowFeatureDevelopmentToRunCodeAndTests": {}, From e544eb0eb9fa9f0f11e9ce9b6fdabfff6740c99c Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Mon, 21 Apr 2025 18:19:22 -0400 Subject: [PATCH 20/71] fix(amazonq): temporarily disable q developer profiles (#7118) ## Problem q developer profiles are being fetched by VSCode + flare on the same token causing requests to be throttled ## Solution temporary disable profile fetching. The real solution will need to be implemented in flare, which should disable profile fetching by default for VSCode? --- - 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. --- packages/amazonq/src/lsp/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index b3205d009d6..7e612102c23 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -127,7 +127,7 @@ export async function startLanguageServer( }, awsClientCapabilities: { q: { - developerProfiles: true, + developerProfiles: false, }, window: { notifications: true, From 1e48e367b459754bf8b3047a7051a3a8a8317bb1 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Mon, 21 Apr 2025 18:51:50 -0400 Subject: [PATCH 21/71] feat(amazonq): handle link clicks in /help (#7120) ## Problem links clicked in help and responsible ai policy don't open ## Solution implement info link and link click handlers --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 82bccd68b06..db6ffc8bb0f 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -39,6 +39,9 @@ import { ShowDocumentRequest, contextCommandsNotificationType, ContextCommandParams, + LINK_CLICK_NOTIFICATION_METHOD, + LinkClickParams, + INFO_LINK_CLICK_NOTIFICATION_METHOD, } from '@aws/language-server-runtimes/protocol' import { v4 as uuidv4 } from 'uuid' import * as vscode from 'vscode' @@ -46,7 +49,7 @@ import { Disposable, LanguageClient, Position, TextDocumentIdentifier } from 'vs import * as jose from 'jose' import { AmazonQChatViewProvider } from './webviewProvider' import { AuthUtil } from 'aws-core-vscode/codewhisperer' -import { AmazonQPromptSettings, messages } from 'aws-core-vscode/shared' +import { AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared' import { DefaultAmazonQAppInitContext, messageDispatcher } from 'aws-core-vscode/amazonq' export function registerLanguageServerEventListener(languageClient: LanguageClient, provider: AmazonQChatViewProvider) { @@ -172,6 +175,12 @@ export function registerMessageListeners( } break } + case INFO_LINK_CLICK_NOTIFICATION_METHOD: + case LINK_CLICK_NOTIFICATION_METHOD: { + const linkParams = message.params as LinkClickParams + void openUrl(vscode.Uri.parse(linkParams.link)) + break + } case chatRequestType.method: { const chatParams = { ...message.params } as ChatParams const partialResultToken = uuidv4() From 7bb66e109b727736bcd632d230a3e70d4959116c Mon Sep 17 00:00:00 2001 From: Nikolas Komonen <118216176+nkomonen-amazon@users.noreply.github.com> Date: Mon, 21 Apr 2025 19:33:45 -0400 Subject: [PATCH 22/71] feat(amazonq): Port in chat message error handling (#7121) ## Problem During the agentic loop, if there are multiple iterations and then it eventually fails, the partial results would not be posted and the user would not be able to continue chat (it wouldn't allow them to type) ## Solution Port in the VSC client related change from: https://github.com/aws/language-servers/pull/1012 Now if there are errors during the agentic loop, we will display all the partial responses we have gathered and then break out of the generating state, allowing the user to continue. ## How I tested Between the previous and new changes I ran the same test suite - Ask agentic chat to make 101 files (since [a recent change](https://github.com/aws/language-servers/pull/1022) increased the loop limit to 100) in a test folder, adding in some random text - Ask agentic chat to "read every single file, not skipping any of them, and then display the text of each one". - W/ the old changes it would error part way and the UI would show "generating" and the user could not do anything - W/ the new changes it will show partial results (the text of the files it could resolve) and then allow the user to continue with another prompt. --- - 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. Signed-off-by: nkomonen-amazon --- packages/amazonq/src/lsp/chat/messages.ts | 61 +++++++++++++++++------ 1 file changed, 47 insertions(+), 14 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index db6ffc8bb0f..2f17d6a8bfa 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -182,10 +182,24 @@ export function registerMessageListeners( break } case chatRequestType.method: { - const chatParams = { ...message.params } as ChatParams + const chatParams: ChatParams = { ...message.params } const partialResultToken = uuidv4() - const chatDisposable = languageClient.onProgress(chatRequestType, partialResultToken, (partialResult) => - handlePartialResult(partialResult, encryptionKey, provider, chatParams.tabId) + let lastPartialResult: ChatResult | undefined + const chatDisposable = languageClient.onProgress( + chatRequestType, + partialResultToken, + (partialResult) => { + // Store the latest partial result + if (typeof partialResult === 'string' && encryptionKey) { + void decodeRequest(partialResult, encryptionKey).then( + (decoded) => (lastPartialResult = decoded) + ) + } else { + lastPartialResult = partialResult as ChatResult + } + + void handlePartialResult(partialResult, encryptionKey, provider, chatParams.tabId) + } ) const editor = @@ -197,17 +211,36 @@ export function registerMessageListeners( } const chatRequest = await encryptRequest(chatParams, encryptionKey) - const chatResult = (await languageClient.sendRequest(chatRequestType.method, { - ...chatRequest, - partialResultToken, - })) as string | ChatResult - void handleCompleteResult( - chatResult, - encryptionKey, - provider, - chatParams.tabId, - chatDisposable - ) + try { + const chatResult = await languageClient.sendRequest(chatRequestType.method, { + ...chatRequest, + partialResultToken, + }) + await handleCompleteResult( + chatResult, + encryptionKey, + provider, + chatParams.tabId, + chatDisposable + ) + } catch (e) { + languageClient.info(`Error occurred during chat request: ${e}`) + // Use the last partial result if available, append error message + const errorResult: ChatResult = { + ...lastPartialResult, + body: lastPartialResult?.body + ? `${lastPartialResult.body}\n\n ❌ Error: Request failed to complete` + : '❌ An error occurred while processing your request', + } + + await handleCompleteResult( + errorResult, + encryptionKey, + provider, + chatParams.tabId, + chatDisposable + ) + } break } case quickActionRequestType.method: { From ccbdf48435e6b35ee833fb4f5653128bc75438e2 Mon Sep 17 00:00:00 2001 From: Tai Lai Date: Mon, 21 Apr 2025 18:05:40 -0700 Subject: [PATCH 23/71] feat(lsp): add handler for openFileDiff notification (#7119) ## Problem Handler is missing for openFileDiff lsp workspace command ## Solution Add notification handler, extend the existing viewDiff implementation by passing in the final content for the temp file --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 21 ++++++++++++++++++++- packages/core/src/amazonq/index.ts | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 2f17d6a8bfa..308e1e13a0d 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -39,6 +39,8 @@ import { ShowDocumentRequest, contextCommandsNotificationType, ContextCommandParams, + openFileDiffNotificationType, + OpenFileDiffParams, LINK_CLICK_NOTIFICATION_METHOD, LinkClickParams, INFO_LINK_CLICK_NOTIFICATION_METHOD, @@ -50,7 +52,7 @@ import * as jose from 'jose' import { AmazonQChatViewProvider } from './webviewProvider' import { AuthUtil } from 'aws-core-vscode/codewhisperer' import { AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared' -import { DefaultAmazonQAppInitContext, messageDispatcher } from 'aws-core-vscode/amazonq' +import { DefaultAmazonQAppInitContext, messageDispatcher, EditorContentController } from 'aws-core-vscode/amazonq' export function registerLanguageServerEventListener(languageClient: LanguageClient, provider: AmazonQChatViewProvider) { languageClient.info( @@ -395,6 +397,23 @@ export function registerMessageListeners( params: params, }) }) + + languageClient.onNotification(openFileDiffNotificationType.method, async (params: OpenFileDiffParams) => { + const edc = new EditorContentController() + const uri = params.originalFileUri + const doc = await vscode.workspace.openTextDocument(uri) + const entireDocumentSelection = new vscode.Selection( + new vscode.Position(0, 0), + new vscode.Position(doc.lineCount - 1, doc.lineAt(doc.lineCount - 1).text.length) + ) + await edc.viewDiff({ + context: { + activeFileContext: { filePath: params.originalFileUri }, + focusAreaContext: { selectionInsideExtendedCodeBlock: entireDocumentSelection }, + }, + code: params.fileContent, + }) + }) } function isServerEvent(command: string) { diff --git a/packages/core/src/amazonq/index.ts b/packages/core/src/amazonq/index.ts index e38eec98035..8a4815c1577 100644 --- a/packages/core/src/amazonq/index.ts +++ b/packages/core/src/amazonq/index.ts @@ -47,6 +47,7 @@ export * as authConnection from '../auth/connection' export * as featureConfig from './webview/generators/featureConfig' export * as messageDispatcher from './webview/messages/messageDispatcher' import { FeatureContext } from '../shared/featureConfig' +export { EditorContentController } from './commons/controllers/contentController' /** * main from createMynahUI is a purely browser dependency. Due to this From 3b619b0043a8d52e8d5b132b5aadf097edcc3d28 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Mon, 21 Apr 2025 21:23:00 -0400 Subject: [PATCH 24/71] feat(amazonq): handle stop response (#7122) ## Problem agentic chat has stop response disabled ## Solution make it so that when its clicked the token is disposed off and the UI unlocks --- - 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. --- package-lock.json | 16 ++++++------- packages/amazonq/src/lsp/chat/messages.ts | 29 +++++++++++++++++++---- packages/core/package.json | 2 +- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77bfc670449..1050abd6a36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10833,12 +10833,12 @@ } }, "node_modules/@aws/chat-client-ui-types": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/@aws/chat-client-ui-types/-/chat-client-ui-types-0.1.22.tgz", - "integrity": "sha512-vn+UKnh9hgZN1LCMONgeZE8WWxivWXaHQq+oG9wpbFhaTXn/nNBTQ9ON7S2fvMqo0g0Np/6hirxZy5ROcWnB9Q==", + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@aws/chat-client-ui-types/-/chat-client-ui-types-0.1.25.tgz", + "integrity": "sha512-sxSookCLlhfsamse3x9AkvCei7SSUYDOklAe1O2jiUOYSN79M5JlVVRZShoqiOCHds7bb9nSaz+DMWIwEK1+2w==", "dev": true, "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.19" + "@aws/language-server-runtimes-types": "^0.1.21" } }, "node_modules/@aws/language-server-runtimes": { @@ -10876,9 +10876,9 @@ } }, "node_modules/@aws/language-server-runtimes-types": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.19.tgz", - "integrity": "sha512-c81J3G3N6JP5A6g70xTpK/XPS1YWwviQBn307Rk3S5fSiALT8INeHM+IPDg9AuONU6w378RJjzQy3+PE0gJvsw==", + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.21.tgz", + "integrity": "sha512-03C3dz4MvMyKg4UAgHMNNw675OQJkDq+7TPXUPaiasqPF946ywTDD9xoNPaVOQI+YTtC7Re4vhPRfBzyad3MOg==", "dev": true, "dependencies": { "vscode-languageserver-textdocument": "^1.0.12", @@ -26804,7 +26804,7 @@ "devDependencies": { "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", - "@aws/chat-client-ui-types": "^0.1.22", + "@aws/chat-client-ui-types": "^0.1.24", "@aws/language-server-runtimes": "^0.2.58", "@aws/language-server-runtimes-types": "^0.1.13", "@cspotcode/source-map-support": "^0.8.1", diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 308e1e13a0d..7365f10445a 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -14,6 +14,8 @@ import { UiMessageResultParams, CHAT_PROMPT_OPTION_ACKNOWLEDGED, ChatPromptOptionAcknowledgedMessage, + STOP_CHAT_RESPONSE, + StopChatResponseMessage, } from '@aws/chat-client-ui-types' import { ChatResult, @@ -44,6 +46,7 @@ import { LINK_CLICK_NOTIFICATION_METHOD, LinkClickParams, INFO_LINK_CLICK_NOTIFICATION_METHOD, + CancellationTokenSource, } from '@aws/language-server-runtimes/protocol' import { v4 as uuidv4 } from 'uuid' import * as vscode from 'vscode' @@ -99,6 +102,7 @@ export function registerMessageListeners( provider: AmazonQChatViewProvider, encryptionKey: Buffer ) { + const chatStreamTokens = new Map() // tab id -> token provider.webview?.onDidReceiveMessage(async (message) => { languageClient.info(`[VSCode Client] Received ${JSON.stringify(message)} from chat`) @@ -183,10 +187,21 @@ export function registerMessageListeners( void openUrl(vscode.Uri.parse(linkParams.link)) break } + case STOP_CHAT_RESPONSE: { + const tabId = (message as StopChatResponseMessage).params.tabId + const token = chatStreamTokens.get(tabId) + token?.cancel() + token?.dispose() + chatStreamTokens.delete(tabId) + break + } case chatRequestType.method: { const chatParams: ChatParams = { ...message.params } const partialResultToken = uuidv4() let lastPartialResult: ChatResult | undefined + const cancellationToken = new CancellationTokenSource() + chatStreamTokens.set(chatParams.tabId, cancellationToken) + const chatDisposable = languageClient.onProgress( chatRequestType, partialResultToken, @@ -214,10 +229,14 @@ export function registerMessageListeners( const chatRequest = await encryptRequest(chatParams, encryptionKey) try { - const chatResult = await languageClient.sendRequest(chatRequestType.method, { - ...chatRequest, - partialResultToken, - }) + const chatResult = await languageClient.sendRequest( + chatRequestType.method, + { + ...chatRequest, + partialResultToken, + }, + cancellationToken.token + ) await handleCompleteResult( chatResult, encryptionKey, @@ -242,6 +261,8 @@ export function registerMessageListeners( chatParams.tabId, chatDisposable ) + } finally { + chatStreamTokens.delete(chatParams.tabId) } break } diff --git a/packages/core/package.json b/packages/core/package.json index 98f24feae81..b9261d971dc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -442,7 +442,7 @@ "devDependencies": { "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", - "@aws/chat-client-ui-types": "^0.1.22", + "@aws/chat-client-ui-types": "^0.1.24", "@aws/language-server-runtimes": "^0.2.58", "@aws/language-server-runtimes-types": "^0.1.13", "@cspotcode/source-map-support": "^0.8.1", From 2055bbfdf1a6e95e4fbce432c78ec223ceec6b93 Mon Sep 17 00:00:00 2001 From: Tai Lai Date: Tue, 22 Apr 2025 05:05:19 -0700 Subject: [PATCH 25/71] feat(amazonq): option to show diff in reverse order (#7126) ## Problem Sometimes we need to show the diff in reverse order (left/right flipped). ## Solution Add a flag to show the diff in reverse order. Right now we will always do this in the lsp diff handler to avoid the need to create a temporary file. --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 20 +++++++++++-------- .../commons/controllers/contentController.ts | 5 ++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 7365f10445a..3b23a525e95 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -54,7 +54,7 @@ import { Disposable, LanguageClient, Position, TextDocumentIdentifier } from 'vs import * as jose from 'jose' import { AmazonQChatViewProvider } from './webviewProvider' import { AuthUtil } from 'aws-core-vscode/codewhisperer' -import { AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared' +import { amazonQDiffScheme, AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared' import { DefaultAmazonQAppInitContext, messageDispatcher, EditorContentController } from 'aws-core-vscode/amazonq' export function registerLanguageServerEventListener(languageClient: LanguageClient, provider: AmazonQChatViewProvider) { @@ -420,20 +420,24 @@ export function registerMessageListeners( }) languageClient.onNotification(openFileDiffNotificationType.method, async (params: OpenFileDiffParams) => { - const edc = new EditorContentController() + const ecc = new EditorContentController() const uri = params.originalFileUri const doc = await vscode.workspace.openTextDocument(uri) const entireDocumentSelection = new vscode.Selection( new vscode.Position(0, 0), new vscode.Position(doc.lineCount - 1, doc.lineAt(doc.lineCount - 1).text.length) ) - await edc.viewDiff({ - context: { - activeFileContext: { filePath: params.originalFileUri }, - focusAreaContext: { selectionInsideExtendedCodeBlock: entireDocumentSelection }, + await ecc.viewDiff( + { + context: { + activeFileContext: { filePath: params.originalFileUri }, + focusAreaContext: { selectionInsideExtendedCodeBlock: entireDocumentSelection }, + }, + code: params.fileContent, }, - code: params.fileContent, - }) + amazonQDiffScheme, + true + ) }) } diff --git a/packages/core/src/amazonq/commons/controllers/contentController.ts b/packages/core/src/amazonq/commons/controllers/contentController.ts index 64e1254c21a..edb9ac7bd87 100644 --- a/packages/core/src/amazonq/commons/controllers/contentController.ts +++ b/packages/core/src/amazonq/commons/controllers/contentController.ts @@ -156,7 +156,7 @@ export class EditorContentController { * * @param message the message from Amazon Q chat */ - public async viewDiff(message: any, scheme: string = amazonQDiffScheme) { + public async viewDiff(message: any, scheme: string = amazonQDiffScheme, reverseOrder = false) { const errorNotification = 'Unable to Open Diff.' const { filePath, selection } = extractFileAndCodeSelectionFromMessage(message) @@ -170,8 +170,7 @@ export class EditorContentController { const disposable = vscode.workspace.registerTextDocumentContentProvider(scheme, contentProvider) await vscode.commands.executeCommand( 'vscode.diff', - originalFileUri, - uri, + ...(reverseOrder ? [uri, originalFileUri] : [originalFileUri, uri]), `${path.basename(filePath)} ${amazonQTabSuffix}` ) From 52cc07ff66fb5b7399746ab7d9cce3baee2cf821 Mon Sep 17 00:00:00 2001 From: Hweinstock <42325418+Hweinstock@users.noreply.github.com> Date: Tue, 22 Apr 2025 08:23:52 -0400 Subject: [PATCH 26/71] fix(amazonq): increase polling frequency for bearer token. (#7123) ## Problem During the bug bash, someone encountered the LSP attempting to use an expired bearer token. I am unable to reproduce the issue, but can speculate at the cause. We refresh the bearer token on the LSP every 1 minute, but if the token expires, and then a request is made before the next refresh it can fail. Note: this is a temporary solution until we have LSP auth. ## Solution - double the frequency with which we check the token. - We still only send the token if it changed, meaning this won't cause noisy request to LSP. --- - 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. --- packages/amazonq/src/lsp/auth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/auth.ts b/packages/amazonq/src/lsp/auth.ts index 0637019a1ab..4eb92e40788 100644 --- a/packages/amazonq/src/lsp/auth.ts +++ b/packages/amazonq/src/lsp/auth.ts @@ -86,7 +86,7 @@ export class AmazonQLspAuth { this.client.info(`UpdateBearerToken: ${JSON.stringify(request)}`) } - public startTokenRefreshInterval(pollingTime: number = oneMinute) { + public startTokenRefreshInterval(pollingTime: number = oneMinute / 2) { const interval = setInterval(async () => { await this.refreshConnection().catch((e) => { getLogger('amazonqLsp').error('Unable to update bearer token: %s', (e as Error).message) From 1b107ab6ef9b30c2860575fd3f8d62fa1ad3650d Mon Sep 17 00:00:00 2001 From: Hweinstock <42325418+Hweinstock@users.noreply.github.com> Date: Tue, 22 Apr 2025 08:55:23 -0400 Subject: [PATCH 27/71] feat(amazonq): add handling for button clicks (#7125) ## Problem With https://github.com/aws/language-servers/pull/1037, the chat client will forward the button click event to the host client (VSC in this case). We are then responsible for making a request to the LSP with this button click. ## Solution - route the button click to the LSP. - log any failed button click actions. ## Verification See https://github.com/aws/language-servers/pull/1037, for a demo of the e2e button hookup working. --- - 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. --- package-lock.json | 1500 +++++++-------------- packages/amazonq/src/lsp/chat/messages.ts | 15 +- packages/core/package.json | 4 +- 3 files changed, 508 insertions(+), 1011 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1050abd6a36..a91b1d9aba5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,8 +70,6 @@ }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "11.9.3", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", - "integrity": "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -642,8 +640,6 @@ }, "node_modules/@aws-sdk/client-apprunner": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-apprunner/-/client-apprunner-3.693.0.tgz", - "integrity": "sha512-6q3yxzp+1fZ2+O7NC8skDz7GSRH6fCcRfT9UU1nX3+kIx/C9cbutnM/WxU35vqJrnT4hq45cUoWj52xZgxFgAA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -694,8 +690,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/client-sso": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.693.0.tgz", - "integrity": "sha512-QEynrBC26x6TG9ZMzApR/kZ3lmt4lEIs2D+cHuDxt6fDGzahBUsQFBwJqhizzsM97JJI5YvmJhmihoYjdSSaXA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -743,8 +737,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/client-sso-oidc": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.693.0.tgz", - "integrity": "sha512-UEDbYlYtK/e86OOMyFR4zEPyenIxDzO2DRdz3fwVW7RzZ94wfmSwBh/8skzPTuY1G7sI064cjHW0b0QG01Sdtg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -796,8 +788,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/client-sts": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.693.0.tgz", - "integrity": "sha512-4S2y7VEtvdnjJX4JPl4kDQlslxXEZFnC50/UXVUYSt/AMc5A/GgspFNA5FVz4E3Gwpfobbf23hR2NBF8AGvYoQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -847,8 +837,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/core": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.693.0.tgz", - "integrity": "sha512-v6Z/kWmLFqRLDPEwl9hJGhtTgIFHjZugSfF1Yqffdxf4n1AWgtHS7qSegakuMyN5pP4K2tvUD8qHJ+gGe2Bw2A==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", @@ -869,8 +857,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/credential-provider-http": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.693.0.tgz", - "integrity": "sha512-sL8MvwNJU7ZpD7/d2VVb3by1GknIJUxzTIgYtVkDVA/ojo+KRQSSHxcj0EWWXF5DTSh2Tm+LrEug3y1ZyKHsDA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.693.0", @@ -890,8 +876,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/credential-provider-ini": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.693.0.tgz", - "integrity": "sha512-kvaa4mXhCCOuW7UQnBhYqYfgWmwy7WSBSDClutwSLPZvgrhYj2l16SD2lN4IfYdxARYMJJ1lFYp3/jJG/9Yk4Q==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.693.0", @@ -916,8 +900,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/credential-provider-node": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.693.0.tgz", - "integrity": "sha512-42WMsBjTNnjYxYuM3qD/Nq+8b7UdMopUq5OduMDxoM3mFTV6PXMMnfI4Z1TNnR4tYRvPXAnuNltF6xmjKbSJRA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.693.0", @@ -939,8 +921,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/credential-provider-sso": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.693.0.tgz", - "integrity": "sha512-479UlJxY+BFjj3pJFYUNC0DCMrykuG7wBAXfsvZqQxKUa83DnH5Q1ID/N2hZLkxjGd4ZW0AC3lTOMxFelGzzpQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-sso": "3.693.0", @@ -958,8 +938,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.693.0.tgz", - "integrity": "sha512-8LB210Pr6VeCiSb2hIra+sAH4KUBLyGaN50axHtIgufVK8jbKIctTZcVY5TO9Se+1107TsruzeXS7VeqVdJfFA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.693.0", @@ -977,8 +955,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/middleware-host-header": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.693.0.tgz", - "integrity": "sha512-BCki6sAZ5jYwIN/t3ElCiwerHad69ipHwPsDCxJQyeiOnJ8HG+lEpnVIfrnI8A0fLQNSF3Gtx6ahfBpKiv1Oug==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", @@ -992,8 +968,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/middleware-logger": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.693.0.tgz", - "integrity": "sha512-dXnXDPr+wIiJ1TLADACI1g9pkSB21KkMIko2u4CJ2JCBoxi5IqeTnVoa6YcC8GdFNVRl+PorZ3Zqfmf1EOTC6w==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", @@ -1006,8 +980,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.693.0.tgz", - "integrity": "sha512-0LDmM+VxXp0u3rG0xQRWD/q6Ubi7G8I44tBPahevD5CaiDZTkmNTrVUf0VEJgVe0iCKBppACMBDkLB0/ETqkFw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", @@ -1021,8 +993,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/middleware-user-agent": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.693.0.tgz", - "integrity": "sha512-/KUq/KEpFFbQmNmpp7SpAtFAdViquDfD2W0QcG07zYBfz9MwE2ig48ALynXm5sMpRmnG7sJXjdvPtTsSVPfkiw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.693.0", @@ -1039,8 +1009,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/region-config-resolver": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.693.0.tgz", - "integrity": "sha512-YLUkMsUY0GLW/nfwlZ69cy1u07EZRmsv8Z9m0qW317/EZaVx59hcvmcvb+W4bFqj5E8YImTjoGfE4cZ0F9mkyw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", @@ -1056,8 +1024,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/token-providers": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.693.0.tgz", - "integrity": "sha512-nDBTJMk1l/YmFULGfRbToOA2wjf+FkQT4dMgYCv+V9uSYsMzQj8A7Tha2dz9yv4vnQgYaEiErQ8d7HVyXcVEoA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", @@ -1075,8 +1041,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/util-endpoints": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.693.0.tgz", - "integrity": "sha512-eo4F6DRQ/kxS3gxJpLRv+aDNy76DxQJL5B3DPzpr9Vkq0ygVoi4GT5oIZLVaAVIJmi6k5qq9dLsYZfWLUxJJSg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", @@ -1090,8 +1054,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.693.0.tgz", - "integrity": "sha512-6EUfuKOujtddy18OLJUaXfKBgs+UcbZ6N/3QV4iOkubCUdeM1maIqs++B9bhCbWeaeF5ORizJw5FTwnyNjE/mw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.692.0", @@ -1102,8 +1064,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@aws-sdk/util-user-agent-node": { "version": "3.693.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.693.0.tgz", - "integrity": "sha512-td0OVX8m5ZKiXtecIDuzY3Y3UZIzvxEr57Hp21NOwieqKCG2UeyQWWeGPv0FQaU7dpTkvFmVNI+tx9iB8V/Nhg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/middleware-user-agent": "3.693.0", @@ -1126,8 +1086,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1138,8 +1096,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", @@ -1151,8 +1107,6 @@ }, "node_modules/@aws-sdk/client-apprunner/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", @@ -10807,8 +10761,6 @@ }, "node_modules/@aws-toolkits/telemetry": { "version": "1.0.312", - "resolved": "https://registry.npmjs.org/@aws-toolkits/telemetry/-/telemetry-1.0.312.tgz", - "integrity": "sha512-Ufr24XeVrkBrsyUZyGRXprclkGsF/5O16IXP0dW7LC2DMqFyMuvmcHhIkQDN9D8ydnsHdutj/ZxTyvpkHpXQJw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10823,9 +10775,8 @@ }, "node_modules/@aws/chat-client": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@aws/chat-client/-/chat-client-0.1.4.tgz", - "integrity": "sha512-5iqo9f/FjipyWxVPByVcI4yF9NPDOFInuS2ak4bK+j4d6ca1n20CnQrEQcMOdGjl5mde51s7X4Jqvlu3smgHGA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws/chat-client-ui-types": "^0.1.12", "@aws/language-server-runtimes-types": "^0.1.10", @@ -10833,24 +10784,24 @@ } }, "node_modules/@aws/chat-client-ui-types": { - "version": "0.1.25", - "resolved": "https://registry.npmjs.org/@aws/chat-client-ui-types/-/chat-client-ui-types-0.1.25.tgz", - "integrity": "sha512-sxSookCLlhfsamse3x9AkvCei7SSUYDOklAe1O2jiUOYSN79M5JlVVRZShoqiOCHds7bb9nSaz+DMWIwEK1+2w==", + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@aws/chat-client-ui-types/-/chat-client-ui-types-0.1.26.tgz", + "integrity": "sha512-WlF0fP1nojueknr815dg6Ivs+Q3e5onvWTH1nI05jysSzUHjsWwFDBrsxqJXfaPIFhPrbQzHqoxHbhIwQ1OLuw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.21" + "@aws/language-server-runtimes-types": "^0.1.22" } }, "node_modules/@aws/language-server-runtimes": { - "version": "0.2.58", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.58.tgz", - "integrity": "sha512-gb1oLKACFpmDKkzSdDAqMdpo63m+Kul4B/uVNNO1IFN4+wEP7zPVgmd1dLDPlLKHrxsAEQDxoYDaYVyQ+yJKqQ==", + "version": "0.2.70", "dev": true, + "license": "Apache-2.0", "dependencies": { "@apidevtools/json-schema-ref-parser": "^11.9.3", "@aws-crypto/sha256-js": "^5.2.0", "@aws-sdk/client-cognito-identity": "^3.758.0", - "@aws/language-server-runtimes-types": "^0.1.13", + "@aws/language-server-runtimes-types": "^0.1.21", "@opentelemetry/api": "^1.9.0", "@opentelemetry/resources": "^1.30.1", "@opentelemetry/sdk-metrics": "^1.30.1", @@ -10864,7 +10815,7 @@ "aws-sdk": "^2.1692.0", "axios": "^1.8.4", "hpagent": "^1.2.0", - "jose": "^6.0.10", + "jose": "^5.9.6", "mac-ca": "^3.1.1", "rxjs": "^7.8.2", "vscode-languageserver": "^9.0.1", @@ -10876,10 +10827,11 @@ } }, "node_modules/@aws/language-server-runtimes-types": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.21.tgz", - "integrity": "sha512-03C3dz4MvMyKg4UAgHMNNw675OQJkDq+7TPXUPaiasqPF946ywTDD9xoNPaVOQI+YTtC7Re4vhPRfBzyad3MOg==", + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.22.tgz", + "integrity": "sha512-cyNrq6TqCcD9+vYUvvXJ5EJzfB4DrLtDBzBXgv/4zPIMRH0YwGEsRZLzPDwCPCxuZ5kGlal3GlBMkLkMCRGPdQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5" @@ -10887,8 +10839,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/client-cognito-identity": { "version": "3.768.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.768.0.tgz", - "integrity": "sha512-h/WOvKhuXVIhNKjDcsF6oY2oJuBusspnmEaX20h+GUzIrNMlf6qkJrWziT58KzzESyzeYZcGNWjcOfbVRpH6NA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10938,8 +10888,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/client-sso": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.758.0.tgz", - "integrity": "sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10988,8 +10936,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/core": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.758.0.tgz", - "integrity": "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11011,8 +10957,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/credential-provider-env": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.758.0.tgz", - "integrity": "sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11028,8 +10972,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/credential-provider-http": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.758.0.tgz", - "integrity": "sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11050,8 +10992,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/credential-provider-node": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.758.0.tgz", - "integrity": "sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11074,8 +11014,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/credential-provider-process": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.758.0.tgz", - "integrity": "sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11092,8 +11030,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/credential-provider-sso": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.758.0.tgz", - "integrity": "sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11112,8 +11048,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/middleware-host-header": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz", - "integrity": "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11128,8 +11062,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/middleware-logger": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz", - "integrity": "sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11143,8 +11075,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz", - "integrity": "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11159,8 +11089,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/middleware-user-agent": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.758.0.tgz", - "integrity": "sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11178,8 +11106,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/region-config-resolver": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz", - "integrity": "sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11196,8 +11122,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/token-providers": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.758.0.tgz", - "integrity": "sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11214,8 +11138,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/types": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.734.0.tgz", - "integrity": "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11228,8 +11150,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/util-endpoints": { "version": "3.743.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz", - "integrity": "sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11244,8 +11164,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz", - "integrity": "sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11257,8 +11175,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@aws-sdk/util-user-agent-node": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.758.0.tgz", - "integrity": "sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11282,8 +11198,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/abort-controller": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz", - "integrity": "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11296,8 +11210,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/config-resolver": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz", - "integrity": "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11313,8 +11225,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/core": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.5.tgz", - "integrity": "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11333,8 +11243,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/credential-provider-imds": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz", - "integrity": "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11350,8 +11258,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/fetch-http-handler": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz", - "integrity": "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11367,8 +11273,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/hash-node": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.1.tgz", - "integrity": "sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11383,8 +11287,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/invalid-dependency": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz", - "integrity": "sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11397,8 +11299,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", - "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11410,8 +11310,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/middleware-content-length": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz", - "integrity": "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11425,8 +11323,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/middleware-endpoint": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz", - "integrity": "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11445,8 +11341,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/middleware-retry": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz", - "integrity": "sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11466,8 +11360,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/middleware-serde": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz", - "integrity": "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11480,8 +11372,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/middleware-stack": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz", - "integrity": "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11494,8 +11384,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/node-config-provider": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz", - "integrity": "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11510,8 +11398,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/node-http-handler": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz", - "integrity": "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11527,8 +11413,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/property-provider": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz", - "integrity": "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11541,8 +11425,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/protocol-http": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz", - "integrity": "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11555,8 +11437,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/querystring-builder": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz", - "integrity": "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11570,8 +11450,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/querystring-parser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz", - "integrity": "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11584,8 +11462,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/service-error-classification": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz", - "integrity": "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11597,8 +11473,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/shared-ini-file-loader": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz", - "integrity": "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11611,8 +11485,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/signature-v4": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.1.tgz", - "integrity": "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11631,8 +11503,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/smithy-client": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.6.tgz", - "integrity": "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11650,8 +11520,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/types": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11663,8 +11531,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/url-parser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz", - "integrity": "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11678,8 +11544,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11693,8 +11557,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-body-length-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", - "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11706,8 +11568,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-body-length-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", - "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11719,8 +11579,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11733,8 +11591,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-config-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", - "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11746,8 +11602,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-defaults-mode-browser": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz", - "integrity": "sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11763,8 +11617,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-defaults-mode-node": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz", - "integrity": "sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11782,8 +11634,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-endpoints": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz", - "integrity": "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11797,8 +11647,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-hex-encoding": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", - "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11810,8 +11658,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-middleware": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz", - "integrity": "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11824,8 +11670,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-retry": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz", - "integrity": "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11839,8 +11683,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-stream": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.1.2.tgz", - "integrity": "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11859,8 +11701,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-uri-escape": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", - "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11872,8 +11712,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/@smithy/util-utf8": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11886,8 +11724,6 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { @@ -11902,35 +11738,30 @@ } }, "node_modules/@aws/language-server-runtimes/node_modules/jose": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.0.10.tgz", - "integrity": "sha512-skIAxZqcMkOrSwjJvplIPYrlXGpxTPnro2/QWTDCxAdWQrSTV5/KqspMWmi5WAx5+ULswASJiZ0a+1B/Lxt9cw==", + "version": "5.10.0", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } }, "node_modules/@aws/language-server-runtimes/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/@aws/language-server-runtimes/node_modules/vscode-jsonrpc": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/@aws/language-server-runtimes/node_modules/vscode-languageserver": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", - "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", "dev": true, + "license": "MIT", "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, @@ -11940,9 +11771,8 @@ }, "node_modules/@aws/language-server-runtimes/node_modules/vscode-languageserver-protocol": { "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", "dev": true, + "license": "MIT", "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" @@ -11950,9 +11780,8 @@ }, "node_modules/@aws/mynah-ui": { "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@aws/mynah-ui/-/mynah-ui-4.30.1.tgz", - "integrity": "sha512-ZBtvmHYjlJXzIUCeDmNu1cFfJyO86S/+UCuM/LFbAV5mf4Qm1o8i0Gmpw/4ngKx3ZXdFGnVT1Iq2bCGSYhuoSw==", "hasInstallScript": true, + "license": "Apache License 2.0", "dependencies": { "escape-html": "^1.0.3", "highlight.js": "^11.11.0", @@ -12278,8 +12107,6 @@ }, "node_modules/@grpc/grpc-js": { "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.0.tgz", - "integrity": "sha512-pMuxInZjUnUkgMT2QLZclRqwk2ykJbIU05aZgPgJYXEpN9+2I7z7aNwcjWZSycRPl232FfhPszyBFJyOxTHNog==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12292,8 +12119,6 @@ }, "node_modules/@grpc/proto-loader": { "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12486,8 +12311,6 @@ }, "node_modules/@js-sdsl/ordered-map": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", "dev": true, "license": "MIT", "funding": { @@ -12568,8 +12391,6 @@ }, "node_modules/@opentelemetry/api": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -12578,8 +12399,6 @@ }, "node_modules/@opentelemetry/api-logs": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", - "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12591,8 +12410,6 @@ }, "node_modules/@opentelemetry/context-async-hooks": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", - "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -12604,8 +12421,6 @@ }, "node_modules/@opentelemetry/core": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12620,8 +12435,6 @@ }, "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -12630,8 +12443,6 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.57.2.tgz", - "integrity": "sha512-eovEy10n3umjKJl2Ey6TLzikPE+W4cUQ4gCwgGP1RqzTGtgDra0WjIqdy29ohiUKfvmbiL3MndZww58xfIvyFw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12651,8 +12462,6 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-http": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.57.2.tgz", - "integrity": "sha512-0rygmvLcehBRp56NQVLSleJ5ITTduq/QfU7obOkyWgPpFHulwpw2LYTqNIz5TczKZuy5YY+5D3SDnXZL1tXImg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12671,8 +12480,6 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-proto": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.57.2.tgz", - "integrity": "sha512-ta0ithCin0F8lu9eOf4lEz9YAScecezCHkMMyDkvd9S7AnZNX5ikUmC5EQOQADU+oCcgo/qkQIaKcZvQ0TYKDw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12693,8 +12500,6 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.57.2.tgz", - "integrity": "sha512-r70B8yKR41F0EC443b5CGB4rUaOMm99I5N75QQt6sHKxYDzSEc6gm48Diz1CI1biwa5tDPznpylTrywO/pT7qw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12716,8 +12521,6 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-http": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.57.2.tgz", - "integrity": "sha512-ttb9+4iKw04IMubjm3t0EZsYRNWr3kg44uUuzfo9CaccYlOh8cDooe4QObDUkvx9d5qQUrbEckhrWKfJnKhemA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12736,8 +12539,6 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.57.2.tgz", - "integrity": "sha512-HX068Q2eNs38uf7RIkNN9Hl4Ynl+3lP0++KELkXMCpsCbFO03+0XNNZ1SkwxPlP9jrhQahsMPMkzNXpq3fKsnw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12757,8 +12558,6 @@ }, "node_modules/@opentelemetry/exporter-prometheus": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.57.2.tgz", - "integrity": "sha512-VqIqXnuxWMWE/1NatAGtB1PvsQipwxDcdG4RwA/umdBcW3/iOHp0uejvFHTRN2O78ZPged87ErJajyUBPUhlDQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12775,8 +12574,6 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.57.2.tgz", - "integrity": "sha512-gHU1vA3JnHbNxEXg5iysqCWxN9j83d7/epTYBZflqQnTyCC4N7yZXn/dMM+bEmyhQPGjhCkNZLx4vZuChH1PYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12797,8 +12594,6 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-http": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.57.2.tgz", - "integrity": "sha512-sB/gkSYFu+0w2dVQ0PWY9fAMl172PKMZ/JrHkkW8dmjCL0CYkmXeE+ssqIL/yBUTPOvpLIpenX5T9RwXRBW/3g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12817,8 +12612,6 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-proto": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.57.2.tgz", - "integrity": "sha512-awDdNRMIwDvUtoRYxRhja5QYH6+McBLtoz1q9BeEsskhZcrGmH/V1fWpGx8n+Rc+542e8pJA6y+aullbIzQmlw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12837,8 +12630,6 @@ }, "node_modules/@opentelemetry/exporter-zipkin": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.30.1.tgz", - "integrity": "sha512-6S2QIMJahIquvFaaxmcwpvQQRD/YFaMTNoIxrfPIPOeITN+a8lfEcPDxNxn8JDAaxkg+4EnXhz8upVDYenoQjA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12856,8 +12647,6 @@ }, "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/semantic-conventions": { "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -12866,8 +12655,6 @@ }, "node_modules/@opentelemetry/instrumentation": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz", - "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12887,8 +12674,6 @@ }, "node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.57.2.tgz", - "integrity": "sha512-XdxEzL23Urhidyebg5E6jZoaiW5ygP/mRjxLHixogbqwDy2Faduzb5N0o/Oi+XTIJu+iyxXdVORjXax+Qgfxag==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12904,8 +12689,6 @@ }, "node_modules/@opentelemetry/otlp-grpc-exporter-base": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.57.2.tgz", - "integrity": "sha512-USn173KTWy0saqqRB5yU9xUZ2xdgb1Rdu5IosJnm9aV4hMTuFFRTUsQxbgc24QxpCHeoKzzCSnS/JzdV0oM2iQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12923,8 +12706,6 @@ }, "node_modules/@opentelemetry/otlp-transformer": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.57.2.tgz", - "integrity": "sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12945,8 +12726,6 @@ }, "node_modules/@opentelemetry/propagator-b3": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.30.1.tgz", - "integrity": "sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12961,8 +12740,6 @@ }, "node_modules/@opentelemetry/propagator-jaeger": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.30.1.tgz", - "integrity": "sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12977,8 +12754,6 @@ }, "node_modules/@opentelemetry/resources": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", - "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12994,8 +12769,6 @@ }, "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -13004,8 +12777,6 @@ }, "node_modules/@opentelemetry/sdk-logs": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz", - "integrity": "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13022,8 +12793,6 @@ }, "node_modules/@opentelemetry/sdk-metrics": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", - "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13039,8 +12808,6 @@ }, "node_modules/@opentelemetry/sdk-node": { "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.57.2.tgz", - "integrity": "sha512-8BaeqZyN5sTuPBtAoY+UtKwXBdqyuRKmekN5bFzAO40CgbGzAxfTpiL3PBerT7rhZ7p2nBdq7FaMv/tBQgHE4A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13074,8 +12841,6 @@ }, "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/semantic-conventions": { "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -13084,8 +12849,6 @@ }, "node_modules/@opentelemetry/sdk-trace-base": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", - "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13102,8 +12865,6 @@ }, "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": { "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -13112,8 +12873,6 @@ }, "node_modules/@opentelemetry/sdk-trace-node": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.30.1.tgz", - "integrity": "sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13133,8 +12892,6 @@ }, "node_modules/@opentelemetry/semantic-conventions": { "version": "1.30.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.30.0.tgz", - "integrity": "sha512-4VlGgo32k2EQ2wcCY3vEU28A0O13aOtHz3Xt2/2U5FAh9EfhD6t6DqL5Z6yAnRCntbTFDU4YfbpyzSlHNWycPw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -13174,36 +12931,26 @@ }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13213,36 +12960,26 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", "dev": true, "license": "BSD-3-Clause" }, @@ -14377,13 +14114,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@tsconfig/node18": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.4.tgz", - "integrity": "sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/adm-zip": { "version": "0.4.34", "dev": true, @@ -14558,8 +14288,6 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, @@ -14582,9 +14310,8 @@ }, "node_modules/@types/lokijs": { "version": "1.5.14", - "resolved": "https://registry.npmjs.org/@types/lokijs/-/lokijs-1.5.14.tgz", - "integrity": "sha512-4Fic47BX3Qxr8pd12KT6/T1XWU8dOlJBIp1jGoMbaDbiEvdv50rAii+B3z1b/J2pvMywcVP+DBPGP5/lgLOKGA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/markdown-it": { "version": "13.0.2", @@ -14715,8 +14442,6 @@ }, "node_modules/@types/shimmer": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", "dev": true, "license": "MIT" }, @@ -16153,8 +15878,6 @@ }, "node_modules/axios": { "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", "dev": true, "license": "MIT", "dependencies": { @@ -16876,8 +16599,6 @@ }, "node_modules/cjs-module-lexer": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true, "license": "MIT" }, @@ -18844,8 +18565,6 @@ }, "node_modules/fast-uri": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", "dev": true, "funding": [ { @@ -19622,8 +19341,6 @@ }, "node_modules/hpagent": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", - "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", "dev": true, "license": "MIT", "engines": { @@ -19916,8 +19633,6 @@ }, "node_modules/import-in-the-middle": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.13.1.tgz", - "integrity": "sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -20102,8 +19817,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -20158,8 +19871,6 @@ }, "node_modules/is-electron": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", - "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", "dev": true, "license": "MIT" }, @@ -21114,8 +20825,6 @@ }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true, "license": "MIT" }, @@ -21157,13 +20866,10 @@ }, "node_modules/lokijs": { "version": "1.5.12", - "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", - "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==" + "license": "MIT" }, "node_modules/long": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", - "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", "dev": true, "license": "Apache-2.0" }, @@ -21195,8 +20901,6 @@ }, "node_modules/mac-ca": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/mac-ca/-/mac-ca-3.1.1.tgz", - "integrity": "sha512-OmXW0O2HdZrL+CPbjvDJ68UxNdAtRfzzUaGqzRqwaFoU+BXlk6BFoJmNJSZv9wEAjMClIFoRA/GtGcbqgHY3kQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -21779,8 +21483,6 @@ }, "node_modules/module-details-from-path": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==", "dev": true, "license": "MIT" }, @@ -22530,8 +22232,6 @@ }, "node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", "engines": { @@ -22905,8 +22605,6 @@ }, "node_modules/protobufjs": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "dev": true, "hasInstallScript": true, "license": "BSD-3-Clause", @@ -22950,8 +22648,6 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, "license": "MIT" }, @@ -23472,8 +23168,6 @@ }, "node_modules/require-in-the-middle": { "version": "7.5.2", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", - "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -23487,8 +23181,6 @@ }, "node_modules/require-in-the-middle/node_modules/debug": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", "dependencies": { @@ -23505,8 +23197,6 @@ }, "node_modules/require-in-the-middle/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, @@ -23517,8 +23207,6 @@ }, "node_modules/resolve": { "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { @@ -23697,8 +23385,6 @@ }, "node_modules/rxjs": { "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -24095,8 +23781,6 @@ }, "node_modules/shimmer": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", "dev": true, "license": "BSD-2-Clause" }, @@ -25006,9 +24690,8 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -25184,8 +24867,6 @@ }, "node_modules/typescript": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, "license": "Apache-2.0", "bin": { @@ -25254,8 +24935,6 @@ }, "node_modules/undici": { "version": "6.21.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", - "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==", "dev": true, "license": "MIT", "engines": { @@ -25536,8 +25215,7 @@ }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==" + "license": "MIT" }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", @@ -26227,8 +25905,6 @@ }, "node_modules/win-ca": { "version": "3.5.1", - "resolved": "https://registry.npmjs.org/win-ca/-/win-ca-3.5.1.tgz", - "integrity": "sha512-RNy9gpBS6cxWHjfbqwBA7odaHyT+YQNhtdpJZwYCFoxB/Dq22oeOZ9YCXMwjhLytKpo7JJMnKdJ/ve7N12zzfQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -26241,8 +25917,6 @@ }, "node_modules/win-ca/node_modules/make-dir": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26805,8 +26479,8 @@ "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.24", - "@aws/language-server-runtimes": "^0.2.58", - "@aws/language-server-runtimes-types": "^0.1.13", + "@aws/language-server-runtimes": "^0.2.70", + "@aws/language-server-runtimes-types": "^0.1.21", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34", @@ -26982,8 +26656,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb-elastic/node_modules/@smithy/middleware-retry": { "version": "3.0.34", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz", - "integrity": "sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.12", @@ -27002,8 +26674,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb-elastic/node_modules/@smithy/node-http-handler": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", - "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.9", @@ -27018,8 +26688,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb-elastic/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27031,8 +26699,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb-elastic/node_modules/@smithy/service-error-classification": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", - "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2" @@ -27043,8 +26709,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb-elastic/node_modules/@smithy/util-retry": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", - "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^3.0.11", @@ -27068,8 +26732,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb/node_modules/@smithy/middleware-retry": { "version": "3.0.34", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz", - "integrity": "sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.12", @@ -27088,8 +26750,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb/node_modules/@smithy/node-http-handler": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", - "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.9", @@ -27104,8 +26764,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27117,8 +26775,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb/node_modules/@smithy/service-error-classification": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", - "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2" @@ -27129,8 +26785,6 @@ }, "packages/core/node_modules/@aws-sdk/client-docdb/node_modules/@smithy/util-retry": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", - "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^3.0.11", @@ -27252,8 +26906,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/middleware-retry": { "version": "3.0.34", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz", - "integrity": "sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.12", @@ -27272,8 +26924,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/node-http-handler": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", - "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.9", @@ -27288,8 +26938,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27301,8 +26949,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/service-error-classification": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", - "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2" @@ -27313,8 +26959,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-retry": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", - "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^3.0.11", @@ -27338,8 +26982,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-retry": { "version": "3.0.34", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz", - "integrity": "sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.12", @@ -27358,8 +27000,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", - "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.9", @@ -27374,8 +27014,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27387,8 +27025,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso/node_modules/@smithy/service-error-classification": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", - "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2" @@ -27399,8 +27035,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-retry": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", - "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^3.0.11", @@ -27473,8 +27107,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-retry": { "version": "3.0.34", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz", - "integrity": "sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.12", @@ -27493,8 +27125,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", - "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.9", @@ -27509,8 +27139,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sts/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27522,8 +27150,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sts/node_modules/@smithy/service-error-classification": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz", - "integrity": "sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2" @@ -27534,8 +27160,6 @@ }, "packages/core/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-retry": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.11.tgz", - "integrity": "sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==", "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^3.0.11", @@ -27568,8 +27192,6 @@ }, "packages/core/node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27611,8 +27233,6 @@ }, "packages/core/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", - "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.9", @@ -27627,8 +27247,6 @@ }, "packages/core/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27664,8 +27282,6 @@ }, "packages/core/node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": { "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz", - "integrity": "sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27698,8 +27314,6 @@ }, "packages/core/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/shared-ini-file-loader": { "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz", - "integrity": "sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27728,8 +27342,6 @@ }, "packages/core/node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/shared-ini-file-loader": { "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz", - "integrity": "sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27771,8 +27383,6 @@ }, "packages/core/node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27809,8 +27419,6 @@ }, "packages/core/node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27838,8 +27446,6 @@ }, "packages/core/node_modules/@aws-sdk/middleware-sdk-rds/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27867,8 +27473,6 @@ }, "packages/core/node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27912,8 +27516,6 @@ }, "packages/core/node_modules/@aws-sdk/token-providers/node_modules/@smithy/shared-ini-file-loader": { "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz", - "integrity": "sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.2", @@ -27970,8 +27572,6 @@ }, "packages/core/node_modules/@smithy/fetch-http-handler": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz", - "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.1.0", @@ -27986,8 +27586,6 @@ }, "packages/core/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", - "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -27998,8 +27596,6 @@ }, "packages/core/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/querystring-builder": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", - "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28012,8 +27608,6 @@ }, "packages/core/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/types": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28024,8 +27618,6 @@ }, "packages/core/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", @@ -28038,8 +27630,6 @@ }, "packages/core/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", @@ -28051,8 +27641,6 @@ }, "packages/core/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/util-utf8": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", @@ -28074,8 +27662,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz", - "integrity": "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.0.2", @@ -28094,8 +27680,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/core": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.2.0.tgz", - "integrity": "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^4.0.3", @@ -28113,8 +27697,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", - "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28125,8 +27707,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-endpoint": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz", - "integrity": "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==", "license": "Apache-2.0", "dependencies": { "@smithy/core": "^3.2.0", @@ -28144,8 +27724,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-serde": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz", - "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28157,8 +27735,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-stack": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz", - "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28170,8 +27746,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/node-config-provider": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz", - "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.0.2", @@ -28185,8 +27759,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/property-provider": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz", - "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28198,8 +27770,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/smithy-client": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.0.tgz", - "integrity": "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==", "license": "Apache-2.0", "dependencies": { "@smithy/core": "^3.2.0", @@ -28216,8 +27786,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28228,8 +27796,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/url-parser": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz", - "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==", "license": "Apache-2.0", "dependencies": { "@smithy/querystring-parser": "^4.0.2", @@ -28242,8 +27808,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", @@ -28256,8 +27820,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/util-body-length-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", - "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28268,8 +27830,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", @@ -28281,8 +27841,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/util-middleware": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz", - "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28294,8 +27852,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/util-stream": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz", - "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==", "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^5.0.2", @@ -28313,8 +27869,6 @@ }, "packages/core/node_modules/@smithy/middleware-retry/node_modules/@smithy/util-utf8": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", @@ -28326,8 +27880,6 @@ }, "packages/core/node_modules/@smithy/node-http-handler": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz", - "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.0.2", @@ -28342,8 +27894,6 @@ }, "packages/core/node_modules/@smithy/node-http-handler/node_modules/@smithy/abort-controller": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz", - "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28355,8 +27905,6 @@ }, "packages/core/node_modules/@smithy/node-http-handler/node_modules/@smithy/querystring-builder": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", - "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28369,8 +27917,6 @@ }, "packages/core/node_modules/@smithy/node-http-handler/node_modules/@smithy/types": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28381,8 +27927,6 @@ }, "packages/core/node_modules/@smithy/protocol-http": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz", - "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28394,8 +27938,6 @@ }, "packages/core/node_modules/@smithy/protocol-http/node_modules/@smithy/types": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28406,8 +27948,6 @@ }, "packages/core/node_modules/@smithy/querystring-parser": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz", - "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28419,8 +27959,6 @@ }, "packages/core/node_modules/@smithy/querystring-parser/node_modules/@smithy/types": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28431,8 +27969,6 @@ }, "packages/core/node_modules/@smithy/service-error-classification": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz", - "integrity": "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0" @@ -28443,8 +27979,6 @@ }, "packages/core/node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28455,8 +27989,6 @@ }, "packages/core/node_modules/@smithy/shared-ini-file-loader": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz", - "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.2.0", @@ -28468,8 +28000,6 @@ }, "packages/core/node_modules/@smithy/shared-ini-file-loader/node_modules/@smithy/types": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28491,8 +28021,6 @@ }, "packages/core/node_modules/@smithy/util-hex-encoding": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", - "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28503,8 +28031,6 @@ }, "packages/core/node_modules/@smithy/util-retry": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.2.tgz", - "integrity": "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==", "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^4.0.2", @@ -28517,8 +28043,6 @@ }, "packages/core/node_modules/@smithy/util-retry/node_modules/@smithy/types": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28529,8 +28053,6 @@ }, "packages/core/node_modules/@smithy/util-uri-escape": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", - "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -28650,6 +28172,18 @@ "node": ">=18.0.0" } }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", "license": "Apache-2.0", @@ -28757,8 +28291,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/client-sso": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.731.0.tgz", - "integrity": "sha512-O4C/UYGgqMsBg21MMApFdgyh8BX568hQhbdoNFmRVTBoSnCZ3w+H4a1wBPX4Gyl0NX+ab6Xxo9rId8HiyPXJ0A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -28806,8 +28338,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/core": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.731.0.tgz", - "integrity": "sha512-ithBN1VWASkvAIlozJmenqDvNnFddr/SZXAs58+jCnBHgy3tXLHABZGVNCjetZkHRqNdXEO1kirnoxaFeXMeDA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -28828,8 +28358,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/credential-provider-env": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.731.0.tgz", - "integrity": "sha512-h0WWZg4QMLgFVyIvQrC43zpVqsUWg1mPM1clpogP43B8+wEhDEQ4qWRzvFs3dQ4cqx/FLyDUZZF4cqgd94z7kw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.731.0", @@ -28844,8 +28372,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/credential-provider-http": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.731.0.tgz", - "integrity": "sha512-iRtrjtcYaWgbvtu2cvDhIsPWXZGvhy1Hgks4682MEBNTc9AUwlfvDrYz2EEnTtJJyrbOdEHVrYrzqD8qPyVLCg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.731.0", @@ -28865,8 +28391,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/credential-provider-ini": { "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.731.1.tgz", - "integrity": "sha512-0M0ejuqW8iHNcTH2ZXSY9m+I7Y06qVkj6k3vfQU9XaB//mTUCxxfGfqWAtgfr7Yi73egABTcPc0jyPdcvSW4Kw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.731.0", @@ -28889,8 +28413,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/credential-provider-node": { "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.731.1.tgz", - "integrity": "sha512-5c0ZiagMTPmWilXNffeXJCLoCEz97jilHr3QJWwf2GaTay4tzN+Ld71rpdfEenzUR7fuxEWFfVlwQbFOzFNYHg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.731.0", @@ -28912,8 +28434,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/credential-provider-process": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.731.0.tgz", - "integrity": "sha512-6yNMY6q3xHLbs2f2+C6GhvMrjTgtFBiPJJqKaPLsTIhlTRvh4sK8pGm3ITcma0jOxtPDIuoPfBAV8N8XVMBlZg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.731.0", @@ -28929,8 +28449,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/credential-provider-sso": { "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.731.1.tgz", - "integrity": "sha512-p1tp+rMUf5YNQLr8rVRmDgNtKGYLL0KCdq3K2hwwvFnx9MjReF1sA4lfm3xWsxBQM+j3QN9AvMQqBzDJ+NOSdw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-sso": "3.731.0", @@ -28948,8 +28466,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.731.1.tgz", - "integrity": "sha512-+ynAvEGWDR5ZJFxgpwwzhvlQ3WQ7BleWXU6JwpIw3yFrD4eZEn85b8DZC1aEz7C9kb1HSV6B3gpqHqlyS6wj8g==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.731.0", @@ -28965,8 +28481,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/middleware-host-header": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.731.0.tgz", - "integrity": "sha512-ndAJsm5uWPPJRZowLKpB1zuL17qWlWVtCJP4I/ynBkq1PU1DijDXBul2UZaG6Mpvsgms1NXo/h9noHuK7T3v8w==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -28980,8 +28494,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/middleware-logger": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.731.0.tgz", - "integrity": "sha512-IIZrOdjbY2vKzPJPrwE7FoFQCIPEL6UqURi8LEaiVyCag4p2fvaTN5pgKuQtGC2+iYd/HHcGT4qn2bAqF5Jmmw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -28994,8 +28506,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.731.0.tgz", - "integrity": "sha512-y6FLASB1iKWuR5tUipMyo77bt0lEl3OnCrrd2xw/H24avq1HhJjjPR0HHhJE6QKJzF/FYXeV88tcyPSMe32VDw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -29009,8 +28519,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/middleware-user-agent": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.731.0.tgz", - "integrity": "sha512-Ngr2Gz0aec/uduoKaO3srN52SYkEHndYtFzkK/gDUyQwQzi4ha2eIisxPiuHEX6RvXT31V9ouqn/YtVkt0R76A==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.731.0", @@ -29027,8 +28535,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/nested-clients": { "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.731.1.tgz", - "integrity": "sha512-/L8iVrulnXZl+kgmTn+oxRxNnhcSIbf+r12C06vGUq60w0YMidLvxJZN7vt8H9SnCAGCHqud2MS7ExCEvhc0gA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -29076,8 +28582,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/region-config-resolver": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.731.0.tgz", - "integrity": "sha512-XlDpRNkDVHF59f07JmkuAidEv//m3hT6/JL85h0l3+zrpaRWhf8n8lVUyAPNq35ZujK8AcorYM+93u7hdWsliQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -29093,8 +28597,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/token-providers": { "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.731.1.tgz", - "integrity": "sha512-t34GOPwBZsX7zGHjiTXmMHGY3kHM7fLiQ60Jqk0On9P0ASHTDE5U75RgCXboE3u+qEv9wyKyaqMNyMWj9qQlFg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/nested-clients": "3.731.1", @@ -29110,8 +28612,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/types": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", - "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.0.0", @@ -29123,8 +28623,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/util-endpoints": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.731.0.tgz", - "integrity": "sha512-riztxTAfncFS9yQWcBJffGgOgLoKSa63ph+rxWJxKl6BHAmWEvHICj1qDcVmnWfIcvJ5cClclY75l9qKaUH7rQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -29137,19 +28635,17 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/util-locate-window": { - "version": "3.693.0", + "version": "3.723.0", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.731.0.tgz", - "integrity": "sha512-EnYXxTkCNCjTTBjW/pelRPv4Thsi9jepoB6qQjPMA9/ixrZ71BhhQecz9kgqzZLR9BPCwb6hgJ/Yd702jqJ4aQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -29160,8 +28656,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/util-user-agent-node": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.731.0.tgz", - "integrity": "sha512-Rze78Ym5Bx7aWMvmZE2iL3JPo2INNCC5N9rLVx98Gg1G0ZaxclVRUvJrh1AojNlOFxU+otkxAe7FA3Foy2iLLQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/middleware-user-agent": "3.731.0", @@ -29183,7 +28677,7 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@babel/runtime": { - "version": "7.26.0", + "version": "7.26.9", "dev": true, "license": "MIT", "dependencies": { @@ -29194,12 +28688,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/abort-controller": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz", - "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29207,15 +28699,13 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/config-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz", - "integrity": "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { @@ -29223,17 +28713,15 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.2.0.tgz", - "integrity": "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==", + "version": "3.1.5", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.0.3", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-stream": "^4.2.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.1.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -29242,15 +28730,13 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/credential-provider-imds": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz", - "integrity": "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" }, "engines": { @@ -29258,13 +28744,11 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/eventstream-codec": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz", - "integrity": "sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" }, @@ -29273,13 +28757,11 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/eventstream-serde-browser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz", - "integrity": "sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-serde-universal": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29287,12 +28769,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz", - "integrity": "sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29300,13 +28780,11 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/eventstream-serde-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz", - "integrity": "sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-serde-universal": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29314,13 +28792,11 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/eventstream-serde-universal": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz", - "integrity": "sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-codec": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29328,14 +28804,12 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/fetch-http-handler": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz", - "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==", + "version": "5.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.1.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, @@ -29344,12 +28818,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/hash-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz", - "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -29359,12 +28831,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/invalid-dependency": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz", - "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29373,8 +28843,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", - "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -29384,13 +28852,11 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/middleware-content-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz", - "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29398,18 +28864,16 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/middleware-endpoint": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz", - "integrity": "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==", + "version": "4.0.6", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.2.0", - "@smithy/middleware-serde": "^4.0.3", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", - "@smithy/util-middleware": "^4.0.2", + "@smithy/core": "^3.1.5", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { @@ -29417,18 +28881,16 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/middleware-retry": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz", - "integrity": "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==", + "version": "4.0.7", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/service-error-classification": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -29437,12 +28899,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/middleware-serde": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz", - "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==", + "version": "4.0.2", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29450,12 +28910,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/middleware-stack": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz", - "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29463,14 +28921,12 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/node-config-provider": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz", - "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29478,15 +28934,13 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/node-http-handler": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz", - "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==", + "version": "4.0.3", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/abort-controller": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29494,12 +28948,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/property-provider": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz", - "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29507,12 +28959,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/protocol-http": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz", - "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==", + "version": "5.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29520,12 +28970,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/querystring-builder": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", - "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, @@ -29534,12 +28982,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/querystring-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz", - "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29547,24 +28993,20 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/service-error-classification": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz", - "integrity": "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0" + "@smithy/types": "^4.1.0" }, "engines": { "node": ">=18.0.0" } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz", - "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29572,16 +29014,14 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/signature-v4": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.2.tgz", - "integrity": "sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==", + "version": "5.0.1", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.1", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -29591,17 +29031,15 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/smithy-client": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.0.tgz", - "integrity": "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==", + "version": "4.1.6", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.2.0", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-stack": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", - "@smithy/util-stream": "^4.2.0", + "@smithy/core": "^3.1.5", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" }, "engines": { @@ -29609,9 +29047,7 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/types": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", + "version": "4.1.0", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -29621,13 +29057,11 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/url-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz", - "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/querystring-parser": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29636,8 +29070,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", @@ -29650,8 +29082,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-body-length-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", - "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -29662,8 +29092,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-body-length-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", - "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -29674,8 +29102,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", @@ -29687,8 +29113,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-config-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", - "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -29698,14 +29122,12 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz", - "integrity": "sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==", + "version": "4.0.7", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -29714,17 +29136,15 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz", - "integrity": "sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==", + "version": "4.0.7", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.1.0", - "@smithy/credential-provider-imds": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29732,13 +29152,11 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-endpoints": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz", - "integrity": "sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==", + "version": "3.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29747,8 +29165,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-hex-encoding": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", - "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -29758,12 +29174,10 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-middleware": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz", - "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -29771,28 +29185,24 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-retry": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.2.tgz", - "integrity": "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.0.2", - "@smithy/types": "^4.2.0", - "tslib": "^2.6.2" + "@smithy/service-error-classification": "^4.0.1", + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz", - "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==", + "version": "4.1.2", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/types": "^4.2.0", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", @@ -29805,8 +29215,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-uri-escape": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", - "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -29817,8 +29225,6 @@ }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/util-utf8": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", @@ -29828,10 +29234,13 @@ "node": ">=18.0.0" } }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@tsconfig/node18": { + "version": "18.2.4", + "dev": true, + "license": "MIT" + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/@types/node": { - "version": "18.19.83", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.83.tgz", - "integrity": "sha512-D69JeR5SfFS5H6FLbUaS0vE4r1dGhmMBbG4Ed6BNS4wkDK8GZjsdCShT5LCN59vOHEUHnFCY9J4aclXlIphMkA==", + "version": "18.19.80", "dev": true, "license": "MIT", "dependencies": { @@ -29869,6 +29278,10 @@ "dev": true, "license": "MIT" }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/bowser": { + "version": "2.11.0", + "license": "MIT" + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/brace-expansion": { "version": "1.1.11", "dev": true, @@ -29985,7 +29398,7 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/downlevel-dts/node_modules/typescript": { - "version": "5.8.0-dev.20250129", + "version": "5.9.0-dev.20250324", "dev": true, "license": "Apache-2.0", "bin": { @@ -30034,6 +29447,14 @@ "dev": true, "license": "ISC" }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/get-caller-file": { "version": "2.0.5", "dev": true, @@ -30069,6 +29490,17 @@ "node": ">=8" } }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/inflight": { "version": "1.0.6", "dev": true, @@ -30091,6 +29523,20 @@ "node": ">= 0.10" } }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/is-core-module": { + "version": "2.16.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "dev": true, @@ -30131,6 +29577,11 @@ "node": ">=0.10.0" } }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/rechoir": { "version": "0.6.2", "dev": true, @@ -30154,6 +29605,25 @@ "node": ">=0.10.0" } }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/resolve": { + "version": "1.22.10", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/rimraf": { "version": "3.0.2", "dev": true, @@ -30185,7 +29655,7 @@ "license": "0BSD" }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/semver": { - "version": "7.6.3", + "version": "7.7.1", "dev": true, "license": "ISC", "bin": { @@ -30240,7 +29710,13 @@ } }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/strnum": { - "version": "1.0.5", + "version": "1.1.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "license": "MIT" }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/supports-color": { @@ -30257,6 +29733,17 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/tree-kill": { "version": "1.2.2", "dev": true, @@ -30269,10 +29756,20 @@ "version": "2.8.1", "license": "0BSD" }, + "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/typescript": { + "version": "5.2.2", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true, "license": "MIT" }, @@ -30399,6 +29896,18 @@ "node": ">=18.0.0" } }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", "license": "Apache-2.0", @@ -30506,8 +30015,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/core": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.731.0.tgz", - "integrity": "sha512-ithBN1VWASkvAIlozJmenqDvNnFddr/SZXAs58+jCnBHgy3tXLHABZGVNCjetZkHRqNdXEO1kirnoxaFeXMeDA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -30528,8 +30035,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/middleware-host-header": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.731.0.tgz", - "integrity": "sha512-ndAJsm5uWPPJRZowLKpB1zuL17qWlWVtCJP4I/ynBkq1PU1DijDXBul2UZaG6Mpvsgms1NXo/h9noHuK7T3v8w==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -30543,8 +30048,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/middleware-logger": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.731.0.tgz", - "integrity": "sha512-IIZrOdjbY2vKzPJPrwE7FoFQCIPEL6UqURi8LEaiVyCag4p2fvaTN5pgKuQtGC2+iYd/HHcGT4qn2bAqF5Jmmw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -30557,8 +30060,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.731.0.tgz", - "integrity": "sha512-y6FLASB1iKWuR5tUipMyo77bt0lEl3OnCrrd2xw/H24avq1HhJjjPR0HHhJE6QKJzF/FYXeV88tcyPSMe32VDw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -30572,8 +30073,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/middleware-user-agent": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.731.0.tgz", - "integrity": "sha512-Ngr2Gz0aec/uduoKaO3srN52SYkEHndYtFzkK/gDUyQwQzi4ha2eIisxPiuHEX6RvXT31V9ouqn/YtVkt0R76A==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.731.0", @@ -30590,8 +30089,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/nested-clients": { "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.731.1.tgz", - "integrity": "sha512-/L8iVrulnXZl+kgmTn+oxRxNnhcSIbf+r12C06vGUq60w0YMidLvxJZN7vt8H9SnCAGCHqud2MS7ExCEvhc0gA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -30639,8 +30136,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/region-config-resolver": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.731.0.tgz", - "integrity": "sha512-XlDpRNkDVHF59f07JmkuAidEv//m3hT6/JL85h0l3+zrpaRWhf8n8lVUyAPNq35ZujK8AcorYM+93u7hdWsliQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -30656,8 +30151,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/token-providers": { "version": "3.731.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.731.1.tgz", - "integrity": "sha512-t34GOPwBZsX7zGHjiTXmMHGY3kHM7fLiQ60Jqk0On9P0ASHTDE5U75RgCXboE3u+qEv9wyKyaqMNyMWj9qQlFg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/nested-clients": "3.731.1", @@ -30673,8 +30166,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/types": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", - "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.0.0", @@ -30686,8 +30177,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/util-endpoints": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.731.0.tgz", - "integrity": "sha512-riztxTAfncFS9yQWcBJffGgOgLoKSa63ph+rxWJxKl6BHAmWEvHICj1qDcVmnWfIcvJ5cClclY75l9qKaUH7rQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -30700,19 +30189,17 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/util-locate-window": { - "version": "3.693.0", + "version": "3.723.0", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.731.0.tgz", - "integrity": "sha512-EnYXxTkCNCjTTBjW/pelRPv4Thsi9jepoB6qQjPMA9/ixrZ71BhhQecz9kgqzZLR9BPCwb6hgJ/Yd702jqJ4aQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.731.0", @@ -30723,8 +30210,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@aws-sdk/util-user-agent-node": { "version": "3.731.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.731.0.tgz", - "integrity": "sha512-Rze78Ym5Bx7aWMvmZE2iL3JPo2INNCC5N9rLVx98Gg1G0ZaxclVRUvJrh1AojNlOFxU+otkxAe7FA3Foy2iLLQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/middleware-user-agent": "3.731.0", @@ -30746,7 +30231,7 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@babel/runtime": { - "version": "7.26.0", + "version": "7.26.9", "dev": true, "license": "MIT", "dependencies": { @@ -30757,12 +30242,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/abort-controller": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz", - "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -30770,15 +30253,13 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/config-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz", - "integrity": "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { @@ -30786,17 +30267,15 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.2.0.tgz", - "integrity": "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==", + "version": "3.1.5", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.0.3", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-stream": "^4.2.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-stream": "^4.1.2", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -30805,15 +30284,13 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/credential-provider-imds": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz", - "integrity": "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", "tslib": "^2.6.2" }, "engines": { @@ -30821,13 +30298,11 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/eventstream-codec": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz", - "integrity": "sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "@smithy/util-hex-encoding": "^4.0.0", "tslib": "^2.6.2" }, @@ -30836,13 +30311,11 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/eventstream-serde-browser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz", - "integrity": "sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-serde-universal": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -30850,12 +30323,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz", - "integrity": "sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -30863,13 +30334,11 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/eventstream-serde-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz", - "integrity": "sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-serde-universal": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -30877,13 +30346,11 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/eventstream-serde-universal": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz", - "integrity": "sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/eventstream-codec": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -30891,14 +30358,12 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/fetch-http-handler": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz", - "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==", + "version": "5.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.1.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, @@ -30907,12 +30372,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/hash-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz", - "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -30922,12 +30385,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/invalid-dependency": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz", - "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -30936,8 +30397,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", - "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -30947,13 +30406,11 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/middleware-content-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz", - "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -30961,18 +30418,16 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/middleware-endpoint": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz", - "integrity": "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==", + "version": "4.0.6", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.2.0", - "@smithy/middleware-serde": "^4.0.3", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", - "@smithy/util-middleware": "^4.0.2", + "@smithy/core": "^3.1.5", + "@smithy/middleware-serde": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", + "@smithy/url-parser": "^4.0.1", + "@smithy/util-middleware": "^4.0.1", "tslib": "^2.6.2" }, "engines": { @@ -30980,18 +30435,16 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/middleware-retry": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz", - "integrity": "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==", + "version": "4.0.7", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/service-error-classification": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", + "@smithy/util-middleware": "^4.0.1", + "@smithy/util-retry": "^4.0.1", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -31000,12 +30453,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/middleware-serde": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz", - "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==", + "version": "4.0.2", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31013,12 +30464,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/middleware-stack": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz", - "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31026,14 +30475,12 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/node-config-provider": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz", - "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/shared-ini-file-loader": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31041,15 +30488,13 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/node-http-handler": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz", - "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==", + "version": "4.0.3", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/abort-controller": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/querystring-builder": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31057,12 +30502,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/property-provider": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz", - "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31070,12 +30513,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/protocol-http": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz", - "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==", + "version": "5.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31083,12 +30524,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/querystring-builder": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", - "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, @@ -31097,12 +30536,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/querystring-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz", - "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31110,24 +30547,20 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/service-error-classification": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz", - "integrity": "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0" + "@smithy/types": "^4.1.0" }, "engines": { "node": ">=18.0.0" } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz", - "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31135,16 +30568,14 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/signature-v4": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.2.tgz", - "integrity": "sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==", + "version": "5.0.1", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.1", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -31154,17 +30585,15 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/smithy-client": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.0.tgz", - "integrity": "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==", + "version": "4.1.6", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.2.0", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-stack": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", - "@smithy/util-stream": "^4.2.0", + "@smithy/core": "^3.1.5", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/middleware-stack": "^4.0.1", + "@smithy/protocol-http": "^5.0.1", + "@smithy/types": "^4.1.0", + "@smithy/util-stream": "^4.1.2", "tslib": "^2.6.2" }, "engines": { @@ -31172,9 +30601,7 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/types": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", + "version": "4.1.0", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -31184,13 +30611,11 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/url-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz", - "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/querystring-parser": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31199,8 +30624,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", @@ -31213,8 +30636,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-body-length-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", - "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -31225,8 +30646,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-body-length-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", - "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -31237,8 +30656,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", @@ -31250,8 +30667,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-config-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", - "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -31261,14 +30676,12 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz", - "integrity": "sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==", + "version": "4.0.7", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -31277,17 +30690,15 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz", - "integrity": "sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==", + "version": "4.0.7", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.1.0", - "@smithy/credential-provider-imds": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@smithy/config-resolver": "^4.0.1", + "@smithy/credential-provider-imds": "^4.0.1", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/property-provider": "^4.0.1", + "@smithy/smithy-client": "^4.1.6", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31295,13 +30706,11 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-endpoints": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz", - "integrity": "sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==", + "version": "3.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/node-config-provider": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31310,8 +30719,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-hex-encoding": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", - "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -31321,12 +30728,10 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-middleware": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz", - "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31334,13 +30739,11 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-retry": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.2.tgz", - "integrity": "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==", + "version": "4.0.1", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/service-error-classification": "^4.0.1", + "@smithy/types": "^4.1.0", "tslib": "^2.6.2" }, "engines": { @@ -31348,14 +30751,12 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz", - "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==", + "version": "4.1.2", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/types": "^4.2.0", + "@smithy/fetch-http-handler": "^5.0.1", + "@smithy/node-http-handler": "^4.0.3", + "@smithy/types": "^4.1.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", @@ -31368,8 +30769,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-uri-escape": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", - "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -31380,8 +30779,6 @@ }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@smithy/util-utf8": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", @@ -31391,10 +30788,13 @@ "node": ">=18.0.0" } }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/@tsconfig/node18": { + "version": "18.2.4", + "dev": true, + "license": "MIT" + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/@types/node": { - "version": "18.19.83", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.83.tgz", - "integrity": "sha512-D69JeR5SfFS5H6FLbUaS0vE4r1dGhmMBbG4Ed6BNS4wkDK8GZjsdCShT5LCN59vOHEUHnFCY9J4aclXlIphMkA==", + "version": "18.19.80", "dev": true, "license": "MIT", "dependencies": { @@ -31552,7 +30952,7 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/downlevel-dts/node_modules/typescript": { - "version": "5.9.0-dev.20250314", + "version": "5.9.0-dev.20250324", "dev": true, "license": "Apache-2.0", "bin": { @@ -31601,6 +31001,14 @@ "dev": true, "license": "ISC" }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/get-caller-file": { "version": "2.0.5", "dev": true, @@ -31636,6 +31044,17 @@ "node": ">=8" } }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/inflight": { "version": "1.0.6", "dev": true, @@ -31658,6 +31077,20 @@ "node": ">= 0.10" } }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/is-core-module": { + "version": "2.16.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "dev": true, @@ -31698,6 +31131,11 @@ "node": ">=0.10.0" } }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/rechoir": { "version": "0.6.2", "dev": true, @@ -31721,6 +31159,25 @@ "node": ">=0.10.0" } }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/resolve": { + "version": "1.22.10", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/rimraf": { "version": "3.0.2", "dev": true, @@ -31752,7 +31209,7 @@ "license": "0BSD" }, "src.gen/@amzn/codewhisperer-streaming/node_modules/semver": { - "version": "7.6.3", + "version": "7.7.1", "dev": true, "license": "ISC", "bin": { @@ -31807,7 +31264,13 @@ } }, "src.gen/@amzn/codewhisperer-streaming/node_modules/strnum": { - "version": "1.0.5", + "version": "1.1.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "license": "MIT" }, "src.gen/@amzn/codewhisperer-streaming/node_modules/supports-color": { @@ -31824,6 +31287,17 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/tree-kill": { "version": "1.2.2", "dev": true, @@ -31836,10 +31310,20 @@ "version": "2.8.1", "license": "0BSD" }, + "src.gen/@amzn/codewhisperer-streaming/node_modules/typescript": { + "version": "5.2.2", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "src.gen/@amzn/codewhisperer-streaming/node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true, "license": "MIT" }, diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 3b23a525e95..da84162f2ec 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -46,6 +46,8 @@ import { LINK_CLICK_NOTIFICATION_METHOD, LinkClickParams, INFO_LINK_CLICK_NOTIFICATION_METHOD, + buttonClickRequestType, + ButtonClickResult, CancellationTokenSource, } from '@aws/language-server-runtimes/protocol' import { v4 as uuidv4 } from 'uuid' @@ -304,6 +306,18 @@ export function registerMessageListeners( languageClient.sendNotification(followUpClickNotificationType.method, message.params) } break + case buttonClickRequestType.method: { + const buttonResult = await languageClient.sendRequest( + buttonClickRequestType.method, + message.params + ) + if (!buttonResult.success) { + languageClient.error( + `[VSCode Client] Failed to execute action associated with button with reason: ${buttonResult.failureReason}` + ) + } + break + } default: if (isServerEvent(message.command)) { languageClient.sendNotification(message.command, message.params) @@ -505,7 +519,6 @@ async function handleCompleteResult( ) { const decryptedMessage = typeof result === 'string' && encryptionKey ? await decodeRequest(result, encryptionKey) : result - void provider.webview?.postMessage({ command: chatRequestType.method, params: decryptedMessage, diff --git a/packages/core/package.json b/packages/core/package.json index b9261d971dc..5d60b72cc58 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -443,8 +443,8 @@ "@aws-sdk/types": "^3.13.1", "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.24", - "@aws/language-server-runtimes": "^0.2.58", - "@aws/language-server-runtimes-types": "^0.1.13", + "@aws/language-server-runtimes": "^0.2.70", + "@aws/language-server-runtimes-types": "^0.1.21", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34", From 61805b726dca17e2105ceb26930bd56e47eb638c Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Tue, 22 Apr 2025 10:50:05 -0400 Subject: [PATCH 28/71] feat(amazonq): emit flare telemetry events (#7124) ## Problem telemetry events forwarded to flare aren't emitted ## Solution emit them --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index da84162f2ec..9a53610f761 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -58,6 +58,7 @@ import { AmazonQChatViewProvider } from './webviewProvider' import { AuthUtil } from 'aws-core-vscode/codewhisperer' import { amazonQDiffScheme, AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared' import { DefaultAmazonQAppInitContext, messageDispatcher, EditorContentController } from 'aws-core-vscode/amazonq' +import { telemetry, TelemetryBase } from 'aws-core-vscode/telemetry' export function registerLanguageServerEventListener(languageClient: LanguageClient, provider: AmazonQChatViewProvider) { languageClient.info( @@ -80,7 +81,11 @@ export function registerLanguageServerEventListener(languageClient: LanguageClie }) languageClient.onTelemetry((e) => { - languageClient.info(`[VSCode Client] Received telemetry event from server ${JSON.stringify(e)}`) + const telemetryName: string = e.name + + if (telemetryName in telemetry) { + telemetry[telemetryName as keyof TelemetryBase].emit(e.data) + } }) } From 67825099001f0f1ab9e1e5c394d9d2a0bb739527 Mon Sep 17 00:00:00 2001 From: Tai Lai Date: Tue, 22 Apr 2025 10:14:45 -0700 Subject: [PATCH 29/71] fix(amazonq): diff not appearing for new files (#7127) ## Problem Clicking on diff for newly created files did not open diff ## Solution Allow opening diffs for empty string --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 2 +- .../core/src/amazonq/commons/controllers/contentController.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 9a53610f761..01a3624f195 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -452,7 +452,7 @@ export function registerMessageListeners( activeFileContext: { filePath: params.originalFileUri }, focusAreaContext: { selectionInsideExtendedCodeBlock: entireDocumentSelection }, }, - code: params.fileContent, + code: params.fileContent ?? '', }, amazonQDiffScheme, true diff --git a/packages/core/src/amazonq/commons/controllers/contentController.ts b/packages/core/src/amazonq/commons/controllers/contentController.ts index edb9ac7bd87..2586951a18e 100644 --- a/packages/core/src/amazonq/commons/controllers/contentController.ts +++ b/packages/core/src/amazonq/commons/controllers/contentController.ts @@ -161,7 +161,7 @@ export class EditorContentController { const { filePath, selection } = extractFileAndCodeSelectionFromMessage(message) try { - if (filePath && message?.code?.trim().length > 0 && selection) { + if (filePath && message?.code !== undefined && selection) { const originalFileUri = vscode.Uri.file(filePath) const uri = await createTempFileForDiff(originalFileUri, message, selection, scheme) From 009258c9b01aa6bf4302f2e1edc1ac4aa9e56734 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Tue, 22 Apr 2025 13:17:55 -0400 Subject: [PATCH 30/71] fix(amazonq): show empty response when token was cancelled (#7128) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem in some cases when tools are cancelled on the flare side, a cancellation error will hit our catch and log "❌ Error: Request failed to complete" ## Solution when the token was canceled don't log anything --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 01a3624f195..c82d4c24570 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -254,11 +254,16 @@ export function registerMessageListeners( } catch (e) { languageClient.info(`Error occurred during chat request: ${e}`) // Use the last partial result if available, append error message + let body = '' + if (!cancellationToken.token.isCancellationRequested) { + body = lastPartialResult?.body + ? `${lastPartialResult.body}\n\n ❌ Error: Request failed to complete` + : '❌ An error occurred while processing your request' + } + const errorResult: ChatResult = { ...lastPartialResult, - body: lastPartialResult?.body - ? `${lastPartialResult.body}\n\n ❌ Error: Request failed to complete` - : '❌ An error occurred while processing your request', + body, } await handleCompleteResult( From 69f6d017dd936e6b9f6df86bc91c6c09bd77b730 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Tue, 22 Apr 2025 15:18:09 -0400 Subject: [PATCH 31/71] fix(amazonq): add highlight feature config to context commands (#7131) ## Problem we fetch feature configs but we never send them to flare chat client ## Solution send them --- - 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. --- packages/amazonq/src/lsp/chat/webviewProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/chat/webviewProvider.ts b/packages/amazonq/src/lsp/chat/webviewProvider.ts index 025881f3460..e53e3d7afd9 100644 --- a/packages/amazonq/src/lsp/chat/webviewProvider.ts +++ b/packages/amazonq/src/lsp/chat/webviewProvider.ts @@ -146,7 +146,7 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { const vscodeApi = acquireVsCodeApi() const hybridChatConnector = new HybridChatAdapter(${(await AuthUtil.instance.getChatAuthState()).amazonQ === 'connected'},${featureConfigData},${welcomeCount},${disclaimerAcknowledged},${regionProfileString},${disabledCommands},${isSMUS},${isSM},vscodeApi.postMessage) const commands = [hybridChatConnector.initialQuickActions[0]] - amazonQChat.createChat(vscodeApi, {disclaimerAcknowledged: ${disclaimerAcknowledged}, pairProgrammingAcknowledged: ${pairProgrammingAcknowledged}, quickActionCommands: commands}, hybridChatConnector); + amazonQChat.createChat(vscodeApi, {disclaimerAcknowledged: ${disclaimerAcknowledged}, pairProgrammingAcknowledged: ${pairProgrammingAcknowledged}, quickActionCommands: commands}, hybridChatConnector, ${JSON.stringify(featureConfigData)}); } From 8da7910ffffaf9aaad0c8cd00bb9dca8ac2de278 Mon Sep 17 00:00:00 2001 From: Tai Lai Date: Tue, 22 Apr 2025 13:26:10 -0700 Subject: [PATCH 32/71] fix(amazonq): forward chat update notification (#7136) ## Problem ChatUpdate notifications are not getting forwarded to UI ## Solution Forward chat update notification --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index c82d4c24570..3dddd12ab8c 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -49,6 +49,8 @@ import { buttonClickRequestType, ButtonClickResult, CancellationTokenSource, + chatUpdateNotificationType, + ChatUpdateParams, } from '@aws/language-server-runtimes/protocol' import { v4 as uuidv4 } from 'uuid' import * as vscode from 'vscode' @@ -463,6 +465,13 @@ export function registerMessageListeners( true ) }) + + languageClient.onNotification(chatUpdateNotificationType.method, (params: ChatUpdateParams) => { + void provider.webview?.postMessage({ + command: chatUpdateNotificationType.method, + params: params, + }) + }) } function isServerEvent(command: string) { From cda61ec1e390b454ac65d179c0a2737088b33174 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 23 Apr 2025 13:27:02 -0400 Subject: [PATCH 33/71] fix(amazonq): simulate refresh of chat (#7142) ## Problem Reloading the webview directly causes export/history to be missing ## Solution Add a specialized handler that simulates reloading the webview when a profile changes, rather than actually refresh everything. This is required because the chat-client relies on initializedResult values from the language server that are only sent once --- - 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. --- .../amazonq/src/lsp/chat/webviewProvider.ts | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/webviewProvider.ts b/packages/amazonq/src/lsp/chat/webviewProvider.ts index e53e3d7afd9..d47563169d7 100644 --- a/packages/amazonq/src/lsp/chat/webviewProvider.ts +++ b/packages/amazonq/src/lsp/chat/webviewProvider.ts @@ -80,12 +80,6 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { this.webview = this.webviewView.webview this.onDidResolveWebviewEmitter.fire() - globals.context.subscriptions.push( - this.webviewView.onDidDispose(() => { - this.webviewView = undefined - this.webview = undefined - }) - ) performance.mark(amazonqMark.open) } @@ -142,12 +136,31 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { ` @@ -155,8 +168,10 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { async refreshWebview() { if (this.webview) { - // refresh the webview when the profile changes - this.webview.html = await this.getWebviewContent() + // post a message to the webview telling it to reload + void this.webview?.postMessage({ + command: 'reload', + }) } } } From 7291993d998e3817c6fd98cf697e087e2b251342 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 23 Apr 2025 14:11:30 -0400 Subject: [PATCH 34/71] Revert "fix(amazonq): temporarily disable q developer profiles" (#7138) Reverts aws/aws-toolkit-vscode#7118 We were getting throttled because of https://github.com/aws/aws-toolkit-vscode/pull/7060. That's been reverted so we should be safe to re-enable this --- packages/amazonq/src/lsp/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index 7e612102c23..b3205d009d6 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -127,7 +127,7 @@ export async function startLanguageServer( }, awsClientCapabilities: { q: { - developerProfiles: false, + developerProfiles: true, }, window: { notifications: true, From 7cf7897ea9317aebbae6d54004e488a316b36dfb Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 23 Apr 2025 14:12:13 -0400 Subject: [PATCH 35/71] fix(amazonq): deny restoreTabMessage/contextCommandData messages from cwc chat (#7144) ## Problem cw chat is still registered and sending events to the frontend, in some cases those UI handlers are the same as they are on the chat-client. This causes disruptive behavior to happen like "normal" chat tabs being restored when they shouldn't ## Solution disable restoreTabMessage, contextCommandData ## TODO get rid of cw app start up --- - 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. --- packages/amazonq/src/lsp/chat/activation.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/amazonq/src/lsp/chat/activation.ts b/packages/amazonq/src/lsp/chat/activation.ts index 3592c66fed4..33795219bff 100644 --- a/packages/amazonq/src/lsp/chat/activation.ts +++ b/packages/amazonq/src/lsp/chat/activation.ts @@ -45,6 +45,14 @@ export async function activate(languageClient: LanguageClient, encryptionKey: Bu provider.onDidResolveWebview(() => { const disposable = DefaultAmazonQAppInitContext.instance.getAppsToWebViewMessageListener().onMessage((msg) => { + /** + * codewhispers app handler is still registered because the activation flow hasn't been refactored. + * We need to explicitly deny events like restoreTabMessage, otherwise they will be forwarded to the frontend + * + */ + if (msg.sender === 'CWChat' && ['restoreTabMessage', 'contextCommandData'].includes(msg.type)) { + return + } provider.webview?.postMessage(msg).then(undefined, (e) => { getLogger().error('webView.postMessage failed: %s', (e as Error).message) }) From 1b7a86cdea1b5798e1813a85d76264aaf4597944 Mon Sep 17 00:00:00 2001 From: opieter-aws Date: Wed, 23 Apr 2025 15:47:24 -0400 Subject: [PATCH 36/71] fix(amazonq): Add clarifying comment to telemetry pass through mechanism (#7146) ## Problem It's not obvious that the LSP language client passes on telemetry events to Toolkits Telemetry ## Solution Add clarifying comment to the code implementation --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 3dddd12ab8c..6cdf3bbd3c5 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -82,6 +82,7 @@ export function registerLanguageServerEventListener(languageClient: LanguageClie }) }) + // This passes through metric data from LSP events to Toolkit telemetry with all fields from the LSP server languageClient.onTelemetry((e) => { const telemetryName: string = e.name From 4ba52513d24def9429728a5d12ada57c3ca3666b Mon Sep 17 00:00:00 2001 From: Josh Pinkney Date: Wed, 23 Apr 2025 15:51:53 -0400 Subject: [PATCH 37/71] fix(amazonq): developer profile api requests are still throttling --- packages/amazonq/src/lsp/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index b3205d009d6..7e612102c23 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -127,7 +127,7 @@ export async function startLanguageServer( }, awsClientCapabilities: { q: { - developerProfiles: true, + developerProfiles: false, }, window: { notifications: true, From 0bd3e12e7159c7a5fd338d3826152c793526c84c Mon Sep 17 00:00:00 2001 From: Nikolas Komonen <118216176+nkomonen-amazon@users.noreply.github.com> Date: Wed, 23 Apr 2025 16:27:15 -0400 Subject: [PATCH 38/71] fix(lsp): LSP download timeout message disappears too early (#7145) ## Problem: When downloading the LSP artifacts from the manifest, there are some large ones (100+ MB). For a slow connection this can take 1+ minutes, but our timeout for the "downloading" message is set to disappear much earlier. So it is still downloading in the background, but the message has disappeared and the user thinks that the download is done. ## Solution: Increase the timeout to 30 minutes, which will ensure the downloading message sticks around while the download is still happening. ## Additional In another commit this fixes a separate HTTP client bug where it would time out a request if it took longer than 3 seconds. This caused downloads to be aborted (separate from the download message disappearing). Now it times out after 30 minutes. --- - 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. Signed-off-by: nkomonen-amazon --- packages/core/src/shared/lsp/lspResolver.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/core/src/shared/lsp/lspResolver.ts b/packages/core/src/shared/lsp/lspResolver.ts index 90892148a9f..70f66cafd14 100644 --- a/packages/core/src/shared/lsp/lspResolver.ts +++ b/packages/core/src/shared/lsp/lspResolver.ts @@ -15,9 +15,11 @@ import { lspSetupStage, StageResolver, tryStageResolvers } from './utils/setupSt import { HttpResourceFetcher } from '../resourcefetcher/httpResourceFetcher' import { showMessageWithCancel } from '../../shared/utilities/messages' import { Timeout } from '../utilities/timeoutUtils' +import { oneMinute } from '../datetime' -// max timeout for downloading remote LSP assets progress, the lowest possible is 3000, bounded by httpResourceFetcher's waitUntil -const remoteDownloadTimeout = 5000 +// max timeout for downloading remote LSP assets. Some asserts are large (100+ MB) so this needs to be large for slow connections. +// Since the user can cancel this one we can let it run very long. +const remoteDownloadTimeout = oneMinute * 30 export class LanguageServerResolver { constructor( From e39a32bab356066e9e7129b35e3892d05ee4bb66 Mon Sep 17 00:00:00 2001 From: chungjac Date: Wed, 23 Apr 2025 13:33:07 -0700 Subject: [PATCH 39/71] telemetry(amazonq): bump aws-toolkit-common version to 1.0.316 (#7147) ## Problem toolkit commons needs to be updated so that telemetry events from flare get sent to kibana ## Solution - bump aws-toolkit-common version from 1.0.312 to 1.0.316 --- - 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. --- package-lock.json | 6 ++++-- package.json | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c99210de0f2..87fd273ac31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "vscode-nls-dev": "^4.0.4" }, "devDependencies": { - "@aws-toolkits/telemetry": "^1.0.312", + "@aws-toolkits/telemetry": "^1.0.316", "@playwright/browser-chromium": "^1.43.1", "@stylistic/eslint-plugin": "^2.11.0", "@types/he": "^1.2.3", @@ -10760,7 +10760,9 @@ } }, "node_modules/@aws-toolkits/telemetry": { - "version": "1.0.312", + "version": "1.0.316", + "resolved": "https://registry.npmjs.org/@aws-toolkits/telemetry/-/telemetry-1.0.316.tgz", + "integrity": "sha512-zyzubs7fnCLPqdNtfHdmmNXVWrwIWJHIr6LJqdvUtNfdGmN8PWxq/NdBgCP9QcPVZusuK7SHha1knl8vhped/w==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 637fc21649a..67c648d81db 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "skippedTestReport": "ts-node ./scripts/skippedTestReport.ts ./packages/amazonq/test/e2e/" }, "devDependencies": { - "@aws-toolkits/telemetry": "^1.0.312", + "@aws-toolkits/telemetry": "^1.0.316", "@playwright/browser-chromium": "^1.43.1", "@stylistic/eslint-plugin": "^2.11.0", "@types/he": "^1.2.3", From c9eb33452a9524703292cce28cbd71e6bac122ef Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 23 Apr 2025 16:36:01 -0400 Subject: [PATCH 40/71] fix(amazonq): send sso startUrl on token update (#7148) ## Problem race conditions can occur with getConnectionMetadata ## Solution instead send the start url through the token update. When it's done this way you don't need to [set getConnectionMetadata](https://github.com/aws/language-server-runtimes/blob/5ba754af403a6f35cd771f27efb987c1580ae6b5/runtimes/runtimes/auth/auth.ts#L158) --- - 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. --- packages/amazonq/src/lsp/auth.ts | 11 +++++++++-- packages/amazonq/src/lsp/client.ts | 9 --------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/amazonq/src/lsp/auth.ts b/packages/amazonq/src/lsp/auth.ts index 4eb92e40788..ed5753e9d82 100644 --- a/packages/amazonq/src/lsp/auth.ts +++ b/packages/amazonq/src/lsp/auth.ts @@ -4,10 +4,12 @@ */ import { + bearerCredentialsUpdateRequestType, ConnectionMetadata, NotificationType, RequestType, ResponseMessage, + UpdateCredentialsParams, } from '@aws/language-server-runtimes/protocol' import * as jose from 'jose' import * as crypto from 'crypto' @@ -81,7 +83,7 @@ export class AmazonQLspAuth { token, }) - await this.client.sendRequest(notificationTypes.updateBearerToken.method, request) + await this.client.sendRequest(bearerCredentialsUpdateRequestType.method, request) this.client.info(`UpdateBearerToken: ${JSON.stringify(request)}`) } @@ -96,7 +98,7 @@ export class AmazonQLspAuth { return interval } - private async createUpdateCredentialsRequest(data: any) { + private async createUpdateCredentialsRequest(data: any): Promise { const payload = new TextEncoder().encode(JSON.stringify({ data })) const jwt = await new jose.CompactEncrypt(payload) @@ -105,6 +107,11 @@ export class AmazonQLspAuth { return { data: jwt, + metadata: { + sso: { + startUrl: AuthUtil.instance.auth.startUrl, + }, + }, encrypted: true, } } diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index 7e612102c23..fa45e269114 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -10,7 +10,6 @@ import { LanguageClient, LanguageClientOptions, RequestType } from 'vscode-langu import { InlineCompletionManager } from '../app/inline/completion' import { AmazonQLspAuth, encryptionKey, notificationTypes } from './auth' import { - ConnectionMetadata, CreateFilesParams, DeleteFilesParams, DidChangeWorkspaceFoldersParams, @@ -164,14 +163,6 @@ export async function startLanguageServer( const auth = new AmazonQLspAuth(client) return client.onReady().then(async () => { - // Request handler for when the server wants to know about the clients auth connnection. Must be registered before the initial auth init call - client.onRequest(notificationTypes.getConnectionMetadata.method, () => { - return { - sso: { - startUrl: AuthUtil.instance.auth.startUrl, - }, - } - }) await auth.refreshConnection() if (Experiments.instance.get('amazonqLSPInline', false)) { From dc849e70dc6b93c82945738d4dce4c599749b59c Mon Sep 17 00:00:00 2001 From: Dogus Atasoy <116281103+dogusata@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:41:25 +0200 Subject: [PATCH 41/71] feat(amazonq): update mynah version with no style loading option (#7154) ## Problem - UI styles coming from flare and the local instance are conflictin. ## Solution - Latest production version of mynah-ui has the ability to avoid loading styles. Bumped up mynah-ui version and set `loadStyles` to `false`. --- - 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. --- package-lock.json | 6 ++++-- packages/core/package.json | 2 +- packages/core/src/amazonq/webview/ui/main.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 87fd273ac31..9c2ed110884 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11781,7 +11781,9 @@ } }, "node_modules/@aws/mynah-ui": { - "version": "4.30.1", + "version": "4.30.3", + "resolved": "https://registry.npmjs.org/@aws/mynah-ui/-/mynah-ui-4.30.3.tgz", + "integrity": "sha512-Xy22dzCaFUqpdSHMpLa8Dsq98DiAUq49dm7Iu8Yj2YZXSCyfKQiYMJOfwU8IoqeNcEney5JRMJpf+/RysWugbA==", "hasInstallScript": true, "license": "Apache License 2.0", "dependencies": { @@ -26424,7 +26426,7 @@ "@aws-sdk/s3-request-presigner": "<3.731.0", "@aws-sdk/smithy-client": "<3.731.0", "@aws-sdk/util-arn-parser": "<3.731.0", - "@aws/mynah-ui": "^4.30.1", + "@aws/mynah-ui": "^4.30.3", "@gerhobbelt/gitignore-parser": "^0.2.0-9", "@iarna/toml": "^2.2.5", "@smithy/fetch-http-handler": "^5.0.1", diff --git a/packages/core/package.json b/packages/core/package.json index 5d60b72cc58..31d928da9fa 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -526,7 +526,7 @@ "@aws-sdk/s3-request-presigner": "<3.731.0", "@aws-sdk/smithy-client": "<3.731.0", "@aws-sdk/util-arn-parser": "<3.731.0", - "@aws/mynah-ui": "^4.30.1", + "@aws/mynah-ui": "^4.30.3", "@gerhobbelt/gitignore-parser": "^0.2.0-9", "@iarna/toml": "^2.2.5", "@smithy/fetch-http-handler": "^5.0.1", diff --git a/packages/core/src/amazonq/webview/ui/main.ts b/packages/core/src/amazonq/webview/ui/main.ts index 81b6fdb1941..7d5bd48eaeb 100644 --- a/packages/core/src/amazonq/webview/ui/main.ts +++ b/packages/core/src/amazonq/webview/ui/main.ts @@ -1017,7 +1017,7 @@ export class WebviewUIHandler { * when in hybrid chat the reference gets resolved later so we * don't need to create mynah UI */ - this.mynahUIRef = { mynahUI: new MynahUI(this.mynahUIProps) } + this.mynahUIRef = { mynahUI: new MynahUI({ ...this.mynahUIProps, loadStyles: false }) } } /** From d2f6b9a9c88c18e4deda35b7b89ebcda3d6067d4 Mon Sep 17 00:00:00 2001 From: Nikolas Komonen <118216176+nkomonen-amazon@users.noreply.github.com> Date: Thu, 24 Apr 2025 12:35:48 -0400 Subject: [PATCH 42/71] fix(chat): Resend auth token on server restart (#7156) ## Problem: When the server restarted due to a crash, the auth token was not sent again. This caused users to run in to the state where if it crashed and restarted, when they sent a subsequent chat message they'd get stuck with the server asking the user to Authenticate. Note that server restart is triggered automatically by the LanguageClient, I think. ## Solution: Detect when the server is restarted and manually resend the bearer token again. Note, this solution needs to be revisited since there may be other initialization logic that needs to run on server restart, aside from just the bearer token. ## Repro Steps: 1. Ensure you do not have a workspace open, you can open a new vscode window at the top left `File` > `New Window` 2. Make a random folder in your home directory 3. Make a couple typescript files in that folder 4. Send the prompt: `list all files in {folder}` 5. Accept the permissions 6. Click the toggle drop down from the response, and click the link to the path (this is just to force a crash + restart) 7. Verify the server crashed in the logs, look for the message `Connection to server got closed. Server will restart.` 8. ASSUMING this fix worked, the server will restart automatically and you can continue using chat. Before this fix any subsequent messages would ask the user to `Authenticate` again --- - 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. Signed-off-by: nkomonen-amazon --- packages/amazonq/src/lsp/auth.ts | 7 +++++-- packages/amazonq/src/lsp/client.ts | 22 ++++++++++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/amazonq/src/lsp/auth.ts b/packages/amazonq/src/lsp/auth.ts index ed5753e9d82..6a0953c98ab 100644 --- a/packages/amazonq/src/lsp/auth.ts +++ b/packages/amazonq/src/lsp/auth.ts @@ -68,12 +68,15 @@ export const notificationTypes = { export class AmazonQLspAuth { constructor(private readonly client: LanguageClient) {} - async refreshConnection() { + /** + * @param force bypass memoization, and forcefully update the bearer token + */ + async refreshConnection(force: boolean = false) { const activeConnection = AuthUtil.instance.auth.activeConnection if (activeConnection?.type === 'sso') { // send the token to the language server const token = await AuthUtil.instance.getBearerToken() - await this.updateBearerToken(token) + await (force ? this._updateBearerToken(token) : this.updateBearerToken(token)) } } diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index fa45e269114..3bc5622d837 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -6,7 +6,7 @@ import vscode, { env, version } from 'vscode' import * as nls from 'vscode-nls' import * as crypto from 'crypto' -import { LanguageClient, LanguageClientOptions, RequestType } from 'vscode-languageclient' +import { LanguageClient, LanguageClientOptions, RequestType, State } from 'vscode-languageclient' import { InlineCompletionManager } from '../app/inline/completion' import { AmazonQLspAuth, encryptionKey, notificationTypes } from './auth' import { @@ -268,7 +268,25 @@ export async function startLanguageServer( }, } as DidChangeWorkspaceFoldersParams) }), - { dispose: () => clearInterval(refreshInterval) } + { dispose: () => clearInterval(refreshInterval) }, + // Set this inside onReady so that it only triggers on subsequent language server starts (not the first) + onServerRestartHandler(client, auth) ) }) } + +/** + * When the server restarts (likely due to a crash, then the LanguageClient automatically starts it again) + * we need to run some server intialization again. + */ +function onServerRestartHandler(client: LanguageClient, auth: AmazonQLspAuth) { + return client.onDidChangeState(async (e) => { + // Ensure we are in a "restart" state + if (!(e.oldState === State.Starting && e.newState === State.Running)) { + return + } + + // Need to set the auth token in the again + await auth.refreshConnection(true) + }) +} From 42636aa6206eef851e3b81d745c37718a709700e Mon Sep 17 00:00:00 2001 From: chungjac Date: Thu, 24 Apr 2025 10:04:10 -0700 Subject: [PATCH 43/71] telemetry(amazonq): bump aws-toolkit-common #7157 ## Problem - toolkit commons needs to be updated so that certain telemetry events from flare have `languageServerVersion` ## Solution - bump aws-toolkit-common version from 1.0.316 to 1.0.317 - remove `amazonq_messageResponseError` because it was uplifted to common: https://github.com/aws/aws-toolkit-common/pull/1019 --- package-lock.json | 8 +-- package.json | 2 +- .../src/shared/telemetry/vscodeTelemetry.json | 55 ------------------- 3 files changed, 5 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c2ed110884..8ddd858085d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "vscode-nls-dev": "^4.0.4" }, "devDependencies": { - "@aws-toolkits/telemetry": "^1.0.316", + "@aws-toolkits/telemetry": "^1.0.317", "@playwright/browser-chromium": "^1.43.1", "@stylistic/eslint-plugin": "^2.11.0", "@types/he": "^1.2.3", @@ -10760,9 +10760,9 @@ } }, "node_modules/@aws-toolkits/telemetry": { - "version": "1.0.316", - "resolved": "https://registry.npmjs.org/@aws-toolkits/telemetry/-/telemetry-1.0.316.tgz", - "integrity": "sha512-zyzubs7fnCLPqdNtfHdmmNXVWrwIWJHIr6LJqdvUtNfdGmN8PWxq/NdBgCP9QcPVZusuK7SHha1knl8vhped/w==", + "version": "1.0.317", + "resolved": "https://registry.npmjs.org/@aws-toolkits/telemetry/-/telemetry-1.0.317.tgz", + "integrity": "sha512-QFLBFfHZjuB2pBd1p0Tn/GMKTYYQu3/nrlj0Co7EkqozvDNDG0nTjxtkXxotbwjrqVD5Sv8i46gEdgsyQ7at3w==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 67c648d81db..30f0497cdb2 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "skippedTestReport": "ts-node ./scripts/skippedTestReport.ts ./packages/amazonq/test/e2e/" }, "devDependencies": { - "@aws-toolkits/telemetry": "^1.0.316", + "@aws-toolkits/telemetry": "^1.0.317", "@playwright/browser-chromium": "^1.43.1", "@stylistic/eslint-plugin": "^2.11.0", "@types/he": "^1.2.3", diff --git a/packages/core/src/shared/telemetry/vscodeTelemetry.json b/packages/core/src/shared/telemetry/vscodeTelemetry.json index ffd715cbed8..4a5117ee252 100644 --- a/packages/core/src/shared/telemetry/vscodeTelemetry.json +++ b/packages/core/src/shared/telemetry/vscodeTelemetry.json @@ -87,11 +87,6 @@ "type": "int", "description": "CPU used by LSP server as a percentage of all available CPUs on the system" }, - { - "name": "cwsprChatResponseErrorReason", - "type": "string", - "description": "Client error reason when processing response stream" - }, { "name": "cwsprChatInteractionTarget", "type": "string", @@ -665,56 +660,6 @@ } ] }, - { - "name": "amazonq_messageResponseError", - "description": "When an error has occured in response to a prompt", - "metadata": [ - { - "type": "cwsprChatConversationId", - "required": false - }, - { - "type": "credentialStartUrl", - "required": false - }, - { - "type": "cwsprChatTriggerInteraction" - }, - { - "type": "cwsprChatUserIntent", - "required": false - }, - { - "type": "cwsprChatHasCodeSnippet", - "required": false - }, - { - "type": "cwsprChatProgrammingLanguage", - "required": false - }, - { - "type": "cwsprChatActiveEditorTotalCharacters", - "required": false - }, - { - "type": "cwsprChatActiveEditorImportCount", - "required": false - }, - { - "type": "cwsprChatResponseCode" - }, - { - "type": "cwsprChatRequestLength" - }, - { - "type": "cwsprChatConversationType" - }, - { - "type": "cwsprChatResponseErrorReason", - "required": false - } - ] - }, { "name": "amazonq_modifyCode", "description": "% of code modified by the user after copying/inserting code from a message", From d856334fe347e1b531622ff4943c71f63d045178 Mon Sep 17 00:00:00 2001 From: opieter-aws Date: Thu, 24 Apr 2025 16:06:00 -0400 Subject: [PATCH 44/71] feat(amazonq): Add project context to LSP client --- packages/amazonq/src/lsp/client.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index 3bc5622d837..65059f71e55 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -79,6 +79,7 @@ export async function startLanguageServer( * Convert VSCode settings format to be compatible with flare's configs */ configuration: async (params, token, next) => { + const vscodeConfig = vscode.workspace.getConfiguration() const config = await next(params, token) if (params.items[0].section === 'aws.q') { const customization = undefinedIfEmpty(getSelectedCustomization().arn) @@ -92,7 +93,9 @@ export async function startLanguageServer( customization, optOutTelemetry: getOptOutPreference() === 'OPTOUT', projectContext: { - enableLocalIndexing: true, + enableLocalIndexing: vscodeConfig.get('amazonQ.workspaceIndex'), + enableGpuAcceleration: vscodeConfig.get('amazonQ.workspaceIndexUseGPU'), + indexWorkerThreads: vscodeConfig.get('amazonQ.workspaceIndexWorkerThreads'), }, }, ] @@ -100,12 +103,10 @@ export async function startLanguageServer( if (params.items[0].section === 'aws.codeWhisperer') { return [ { - includeSuggestionsWithCodeReferences: vscode.workspace - .getConfiguration() - .get('amazonQ.showCodeWithReferences'), - shareCodeWhispererContentWithAWS: vscode.workspace - .getConfiguration() - .get('amazonQ.shareContentWithAWS'), + includeSuggestionsWithCodeReferences: vscodeConfig.get( + 'amazonQ.showCodeWithReferences' + ), + shareCodeWhispererContentWithAWS: vscodeConfig.get('amazonQ.shareContentWithAWS'), }, ] } From eb6c9c95817be8480ebdb239d737a74d93ef4a16 Mon Sep 17 00:00:00 2001 From: Hweinstock <42325418+Hweinstock@users.noreply.github.com> Date: Thu, 24 Apr 2025 16:11:50 -0400 Subject: [PATCH 45/71] fix(amazonq): accept empty body partial result. (#7158) ## Problem If the server sends a partial result without a body, we currently ignore it. ## Solution - explicitly check for undefined. --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 6cdf3bbd3c5..f896692606e 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -516,7 +516,7 @@ async function handlePartialResult( ? await decodeRequest(partialResult, encryptionKey) : (partialResult as T) - if (decryptedMessage.body) { + if (decryptedMessage.body !== undefined) { void provider.webview?.postMessage({ command: chatRequestType.method, params: decryptedMessage, From 879584ee283265f28002e7acc568c23d8b5c60d3 Mon Sep 17 00:00:00 2001 From: opieter-aws Date: Thu, 24 Apr 2025 16:20:39 -0400 Subject: [PATCH 46/71] Revert "feat(amazonq): Add project context to LSP client" This reverts commit d856334fe347e1b531622ff4943c71f63d045178. --- packages/amazonq/src/lsp/client.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index 65059f71e55..3bc5622d837 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -79,7 +79,6 @@ export async function startLanguageServer( * Convert VSCode settings format to be compatible with flare's configs */ configuration: async (params, token, next) => { - const vscodeConfig = vscode.workspace.getConfiguration() const config = await next(params, token) if (params.items[0].section === 'aws.q') { const customization = undefinedIfEmpty(getSelectedCustomization().arn) @@ -93,9 +92,7 @@ export async function startLanguageServer( customization, optOutTelemetry: getOptOutPreference() === 'OPTOUT', projectContext: { - enableLocalIndexing: vscodeConfig.get('amazonQ.workspaceIndex'), - enableGpuAcceleration: vscodeConfig.get('amazonQ.workspaceIndexUseGPU'), - indexWorkerThreads: vscodeConfig.get('amazonQ.workspaceIndexWorkerThreads'), + enableLocalIndexing: true, }, }, ] @@ -103,10 +100,12 @@ export async function startLanguageServer( if (params.items[0].section === 'aws.codeWhisperer') { return [ { - includeSuggestionsWithCodeReferences: vscodeConfig.get( - 'amazonQ.showCodeWithReferences' - ), - shareCodeWhispererContentWithAWS: vscodeConfig.get('amazonQ.shareContentWithAWS'), + includeSuggestionsWithCodeReferences: vscode.workspace + .getConfiguration() + .get('amazonQ.showCodeWithReferences'), + shareCodeWhispererContentWithAWS: vscode.workspace + .getConfiguration() + .get('amazonQ.shareContentWithAWS'), }, ] } From dd9ad62bdcef4de467eb21b05034a127ddbecc91 Mon Sep 17 00:00:00 2001 From: opieter-aws Date: Fri, 25 Apr 2025 07:34:09 -0400 Subject: [PATCH 47/71] feat(amazonq): Pass project configuration to LSP client (#7162) ## Problem The LSP server accepts local VSCode workspace configurations for AmazonQ upon initialization, but they are not being passed to the client by the VSCode extension. See https://github.com/aws/language-servers/blob/main/server/aws-lsp-codewhisperer/src/shared/amazonQServiceManager/configurationUtils.ts ## Solution * Add missing settings for file indexing to the extension * Pass the workspace settings to Flare when the client is instantiated ## Testing Screenshot 2025-04-24 at 19 00 59 I confirmed that Flare is receiving the data and that it can parse it --- - 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. --- packages/amazonq/package.json | 20 +++++++++++++++++- packages/amazonq/src/lsp/client.ts | 21 ++++++++++++------- packages/core/package.nls.json | 5 ++++- .../util/codewhispererSettings.ts | 18 +++++++++++++++- .../core/src/shared/settings-amazonq.gen.ts | 3 +++ 5 files changed, 56 insertions(+), 11 deletions(-) diff --git a/packages/amazonq/package.json b/packages/amazonq/package.json index d9e1d35d624..1d285913708 100644 --- a/packages/amazonq/package.json +++ b/packages/amazonq/package.json @@ -181,7 +181,25 @@ "amazonQ.workspaceIndexMaxSize": { "type": "number", "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexMaxSize%", - "default": 250, + "default": 2048, + "scope": "application" + }, + "amazonQ.workspaceIndexMaxFileSize": { + "type": "number", + "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexMaxFileSize%", + "default": 10, + "scope": "application" + }, + "amazonQ.workspaceIndexCacheDirPath": { + "type": "string", + "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexCacheDirPath%", + "default": null, + "scope": "application" + }, + "amazonQ.workspaceIndexIgnoreFilePatterns": { + "type": "array", + "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexIgnoreFilePatterns%", + "default": [], "scope": "application" }, "amazonQ.ignoredSecurityIssues": { diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index 3bc5622d837..1373c026a9c 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -20,7 +20,7 @@ import { updateConfigurationRequestType, WorkspaceFolder, } from '@aws/language-server-runtimes/protocol' -import { AuthUtil, getSelectedCustomization } from 'aws-core-vscode/codewhisperer' +import { AuthUtil, CodeWhispererSettings, getSelectedCustomization } from 'aws-core-vscode/codewhisperer' import { Settings, oidcClientName, @@ -92,7 +92,15 @@ export async function startLanguageServer( customization, optOutTelemetry: getOptOutPreference() === 'OPTOUT', projectContext: { - enableLocalIndexing: true, + enableLocalIndexing: CodeWhispererSettings.instance.isLocalIndexEnabled(), + enableGpuAcceleration: CodeWhispererSettings.instance.isLocalIndexGPUEnabled(), + indexWorkerThreads: CodeWhispererSettings.instance.getIndexWorkerThreads(), + localIndexing: { + ignoreFilePatterns: CodeWhispererSettings.instance.getIndexIgnoreFilePatterns(), + maxFileSizeMB: CodeWhispererSettings.instance.getMaxIndexFileSize(), + maxIndexSizeMB: CodeWhispererSettings.instance.getMaxIndexSize(), + indexCacheDirPath: CodeWhispererSettings.instance.getIndexCacheDirPath(), + }, }, }, ] @@ -100,12 +108,9 @@ export async function startLanguageServer( if (params.items[0].section === 'aws.codeWhisperer') { return [ { - includeSuggestionsWithCodeReferences: vscode.workspace - .getConfiguration() - .get('amazonQ.showCodeWithReferences'), - shareCodeWhispererContentWithAWS: vscode.workspace - .getConfiguration() - .get('amazonQ.shareContentWithAWS'), + includeSuggestionsWithCodeReferences: + CodeWhispererSettings.instance.isSuggestionsWithCodeReferencesEnabled(), + shareCodeWhispererContentWithAWS: !CodeWhispererSettings.instance.isOptoutEnabled(), }, ] } diff --git a/packages/core/package.nls.json b/packages/core/package.nls.json index 9c6ebe66067..81f56a32c57 100644 --- a/packages/core/package.nls.json +++ b/packages/core/package.nls.json @@ -93,7 +93,10 @@ "AWS.configuration.description.amazonq.workspaceIndex": "When you add @workspace to your question in Amazon Q chat, Amazon Q will index your workspace files locally to use as context for its response. Extra CPU usage is expected while indexing a workspace. This will not impact Amazon Q features or your IDE, but you may manage CPU usage by setting the number of local threads in 'Local Workspace Index Threads'.", "AWS.configuration.description.amazonq.workspaceIndexWorkerThreads": "Number of worker threads of Amazon Q local index process. '0' will use the system default worker threads for balance performance. You may increase this number to more quickly index your workspace, but only up to your hardware's number of CPU cores. Please restart VS Code or reload the VS Code window after changing worker threads.", "AWS.configuration.description.amazonq.workspaceIndexUseGPU": "Enable GPU to help index your local workspace files. Only applies to Linux and Windows.", - "AWS.configuration.description.amazonq.workspaceIndexMaxSize": "The maximum size of local workspace files to be indexed in MB", + "AWS.configuration.description.amazonq.workspaceIndexMaxSize": "The maximum size of local workspace to be indexed in MB", + "AWS.configuration.description.amazonq.workspaceIndexMaxFileSize": "The maximum size of local workspace files to be indexed in MB", + "AWS.configuration.description.amazonq.workspaceIndexIgnoreFilePatterns": "File patterns to ignore when indexing your workspace files", + "AWS.configuration.description.amazonq.workspaceIndexCacheDirPath": "The path to the directory that contains the cache of the index of your workspace files", "AWS.configuration.description.amazonq.ignoredSecurityIssues": "Specifies a list of code issue identifiers that Amazon Q should ignore when reviewing your workspace. Each item in the array should be a unique string identifier for a specific code issue. This allows you to suppress notifications for known issues that you've assessed and determined to be false positives or not applicable to your project. Use this setting with caution, as it may cause you to miss important security alerts.", "AWS.command.apig.copyUrl": "Copy URL", "AWS.command.apig.invokeRemoteRestApi": "Invoke in the cloud", diff --git a/packages/core/src/codewhisperer/util/codewhispererSettings.ts b/packages/core/src/codewhisperer/util/codewhispererSettings.ts index c63de7aa84f..4c30c0df467 100644 --- a/packages/core/src/codewhisperer/util/codewhispererSettings.ts +++ b/packages/core/src/codewhisperer/util/codewhispererSettings.ts @@ -13,6 +13,9 @@ const description = { workspaceIndexWorkerThreads: Number, workspaceIndexUseGPU: Boolean, workspaceIndexMaxSize: Number, + workspaceIndexMaxFileSize: Number, + workspaceIndexCacheDirPath: String, + workspaceIndexIgnoreFilePatterns: ArrayConstructor(String), allowFeatureDevelopmentToRunCodeAndTests: Object, ignoredSecurityIssues: ArrayConstructor(String), } @@ -55,7 +58,20 @@ export class CodeWhispererSettings extends fromExtensionManifest('amazonQ', desc public getMaxIndexSize(): number { // minimal 1MB - return Math.max(this.get('workspaceIndexMaxSize', 250), 1) + return Math.max(this.get('workspaceIndexMaxSize', 2048), 1) + } + + public getMaxIndexFileSize(): number { + // minimal 1MB + return Math.max(this.get('workspaceIndexMaxFileSize', 10), 1) + } + + public getIndexCacheDirPath(): string { + return this.get('workspaceIndexCacheDirPath', undefined) + } + + public getIndexIgnoreFilePatterns(): string[] { + return this.get('workspaceIndexIgnoreFilePatterns', []) } public getAutoBuildSetting(): { [key: string]: boolean } { diff --git a/packages/core/src/shared/settings-amazonq.gen.ts b/packages/core/src/shared/settings-amazonq.gen.ts index 7bd20bc1e78..88324e10475 100644 --- a/packages/core/src/shared/settings-amazonq.gen.ts +++ b/packages/core/src/shared/settings-amazonq.gen.ts @@ -32,6 +32,9 @@ export const amazonqSettings = { "amazonQ.workspaceIndexWorkerThreads": {}, "amazonQ.workspaceIndexUseGPU": {}, "amazonQ.workspaceIndexMaxSize": {}, + "amazonQ.workspaceIndexMaxFileSize": {}, + "amazonQ.workspaceIndexCacheDirPath": {}, + "amazonQ.workspaceIndexIgnoreFilePatterns": {}, "amazonQ.ignoredSecurityIssues": {} } From 1e45112c8bb6c0c63fa271095fa24d9ce744a1d7 Mon Sep 17 00:00:00 2001 From: Hweinstock <42325418+Hweinstock@users.noreply.github.com> Date: Fri, 25 Apr 2025 10:04:39 -0400 Subject: [PATCH 48/71] fix(amazonq): handle response errors from lsp (#7161) ## Problem Response errors returned by the LSP are returned to chat after prepending a custom error message. We can remove this custom error message and rely on flare for a single implementation of this error message. ## Solution - perform a sanity check on the response before casting it to the proper type. - log the last result from the language server to help debug. - include the requestId clearly in the logs. image --- - 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. --- packages/amazonq/src/lsp/chat/error.ts | 23 +++++++++++++++++++ packages/amazonq/src/lsp/chat/messages.ts | 23 ++++++++----------- .../test/unit/amazonq/lsp/chat/error.test.ts | 15 ++++++++++++ 3 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 packages/amazonq/src/lsp/chat/error.ts create mode 100644 packages/amazonq/test/unit/amazonq/lsp/chat/error.test.ts diff --git a/packages/amazonq/src/lsp/chat/error.ts b/packages/amazonq/src/lsp/chat/error.ts new file mode 100644 index 00000000000..fc2e0211b0f --- /dev/null +++ b/packages/amazonq/src/lsp/chat/error.ts @@ -0,0 +1,23 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +import { ChatResult } from '@aws/language-server-runtimes/protocol' +import { ResponseError } from '@aws/language-server-runtimes/protocol' +/** + * Perform a sanity check that the error we got from the LSP can be safely cast to the expected type. + * @param error + * @returns + */ +export function isValidResponseError(error: unknown): error is ResponseError & { data: ChatResult } { + return ( + typeof error === 'object' && + error !== null && + 'code' in error && + typeof error.code === 'number' && + 'message' in error && + typeof error.message === 'string' && + 'data' in error && + error.data !== undefined + ) +} diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index f896692606e..0427a8610a3 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -61,6 +61,7 @@ import { AuthUtil } from 'aws-core-vscode/codewhisperer' import { amazonQDiffScheme, AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared' import { DefaultAmazonQAppInitContext, messageDispatcher, EditorContentController } from 'aws-core-vscode/amazonq' import { telemetry, TelemetryBase } from 'aws-core-vscode/telemetry' +import { isValidResponseError } from './error' export function registerLanguageServerEventListener(languageClient: LanguageClient, provider: AmazonQChatViewProvider) { languageClient.info( @@ -255,22 +256,16 @@ export function registerMessageListeners( chatDisposable ) } catch (e) { - languageClient.info(`Error occurred during chat request: ${e}`) - // Use the last partial result if available, append error message - let body = '' - if (!cancellationToken.token.isCancellationRequested) { - body = lastPartialResult?.body - ? `${lastPartialResult.body}\n\n ❌ Error: Request failed to complete` - : '❌ An error occurred while processing your request' - } - - const errorResult: ChatResult = { - ...lastPartialResult, - body, + const errorMsg = `Error occurred during chat request: ${e}` + languageClient.info(errorMsg) + languageClient.info( + `Last result from langauge server: ${JSON.stringify(lastPartialResult, undefined, 2)}` + ) + if (!isValidResponseError(e)) { + throw e } - await handleCompleteResult( - errorResult, + e.data, encryptionKey, provider, chatParams.tabId, diff --git a/packages/amazonq/test/unit/amazonq/lsp/chat/error.test.ts b/packages/amazonq/test/unit/amazonq/lsp/chat/error.test.ts new file mode 100644 index 00000000000..80bfe657cc1 --- /dev/null +++ b/packages/amazonq/test/unit/amazonq/lsp/chat/error.test.ts @@ -0,0 +1,15 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { isValidResponseError } from '../../../../../src/lsp/chat/error' +import { ResponseError } from '@aws/language-server-runtimes/protocol' +import * as assert from 'assert' + +describe('isValidResponseError', async function () { + it('requires the data field', function () { + assert.ok(isValidResponseError(new ResponseError(0, 'this one has data', {}))) + assert.ok(!isValidResponseError(new ResponseError(0, 'this one does not have data'))) + }) +}) From 6db5eda9a7db3b7c9187755d204be9f687469440 Mon Sep 17 00:00:00 2001 From: Avi Alpert <131792194+avi-alpert@users.noreply.github.com> Date: Fri, 25 Apr 2025 13:54:31 -0400 Subject: [PATCH 49/71] fix(amazonq): 401 errors on windows (#7168) ## Problem 401 and CSP errors when launching hybrid chat on windows ## Solution fix paths --- - 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. --- .../amazonq/src/lsp/chat/webviewProvider.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/webviewProvider.ts b/packages/amazonq/src/lsp/chat/webviewProvider.ts index d47563169d7..6fac5a4afcf 100644 --- a/packages/amazonq/src/lsp/chat/webviewProvider.ts +++ b/packages/amazonq/src/lsp/chat/webviewProvider.ts @@ -42,7 +42,7 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { context: WebviewViewResolveContext, _token: CancellationToken ) { - const lspDir = Uri.parse(LanguageServerResolver.defaultDir()) + const lspDir = Uri.file(LanguageServerResolver.defaultDir()) const dist = Uri.joinPath(globals.context.extensionUri, 'dist') const resourcesRoots = [lspDir, dist] @@ -54,7 +54,7 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { const mynahUIPath = getAmazonQLspConfig().ui if (process.env.WEBPACK_DEVELOPER_SERVER && mynahUIPath) { const dir = path.dirname(mynahUIPath) - resourcesRoots.push(Uri.parse(dir)) + resourcesRoots.push(Uri.file(dir)) } webviewView.webview.options = { @@ -68,11 +68,9 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { this.connectorAdapterPath = serverHostname !== undefined - ? Uri.parse(serverHostname) - .with({ path: `/${source}` }) - .toString() - : webviewView.webview.asWebviewUri(Uri.parse(path.join(dist.fsPath, source))).toString() - this.uiPath = webviewView.webview.asWebviewUri(Uri.parse(this.mynahUIPath)).toString() + ? `${serverHostname}/${source}` + : webviewView.webview.asWebviewUri(Uri.joinPath(dist, source)).toString() + this.uiPath = webviewView.webview.asWebviewUri(Uri.file(this.mynahUIPath)).toString() webviewView.webview.html = await this.getWebviewContent() @@ -105,11 +103,11 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { const regionProfileString: string = JSON.stringify(regionProfile) const entrypoint = process.env.WEBPACK_DEVELOPER_SERVER - ? 'http: localhost' - : 'https: file+.vscode-resources.vscode-cdn.net' + ? 'http://localhost:8080' + : 'https://file+.vscode-resource.vscode-cdn.net' const contentPolicy = `default-src ${entrypoint} data: blob: 'unsafe-inline'; - script-src ${entrypoint} filesystem: ws: wss: 'unsafe-inline';` + script-src ${entrypoint} filesystem: file: vscode-resource: https: ws: wss: 'unsafe-inline';` return ` From be976e1176194acc8466fea6ef5ba06dc8de2d0e Mon Sep 17 00:00:00 2001 From: aws-toolkit-automation <43144436+aws-toolkit-automation@users.noreply.github.com> Date: Fri, 25 Apr 2025 14:58:00 -0400 Subject: [PATCH 50/71] Merge master into feature/hybridChat (#7166) ## Automatic merge failed - Resolve conflicts and push to this PR branch. - **Do not squash-merge** this PR. Use the "Create a merge commit" option to do a regular merge. ## Command line hint To perform the merge from the command line, you could do something like the following (where "origin" is the name of the remote in your local git repo): ``` git stash git fetch --all git checkout origin/feature/hybridChat git merge origin/master git commit git push origin HEAD:refs/heads/autoMerge/feature/hybridChat ``` --------- Signed-off-by: nkomonen-amazon Co-authored-by: Nikolas Komonen <118216176+nkomonen-amazon@users.noreply.github.com> Co-authored-by: Hweinstock <42325418+Hweinstock@users.noreply.github.com> Co-authored-by: nkomonen-amazon --- ...-489e72aa-bb0d-4964-bd84-002f25db6b5f.json | 4 + packages/amazonq/package.json | 4 + .../amazonq/test/e2e/inline/inline.test.ts | 2 +- packages/core/src/auth/sso/clients.ts | 4 +- packages/core/src/codewhisperer/activation.ts | 5 + .../core/src/codewhisperer/commands/types.ts | 3 + .../core/src/codewhisperer/region/utils.ts | 49 ++++++++++ .../core/src/codewhisperer/util/authUtil.ts | 1 + .../core/src/shared/settings-amazonq.gen.ts | 3 +- .../src/shared/utilities/collectionUtils.ts | 21 ++++- .../src/shared/utilities/textUtilities.ts | 2 +- packages/core/src/shared/vscode/commands2.ts | 2 +- .../shared/utilities/collectionUtils.test.ts | 91 ++++++++++++------- 13 files changed, 148 insertions(+), 43 deletions(-) create mode 100644 packages/amazonq/.changes/next-release/Bug Fix-489e72aa-bb0d-4964-bd84-002f25db6b5f.json create mode 100644 packages/core/src/codewhisperer/region/utils.ts diff --git a/packages/amazonq/.changes/next-release/Bug Fix-489e72aa-bb0d-4964-bd84-002f25db6b5f.json b/packages/amazonq/.changes/next-release/Bug Fix-489e72aa-bb0d-4964-bd84-002f25db6b5f.json new file mode 100644 index 00000000000..0cd71188f81 --- /dev/null +++ b/packages/amazonq/.changes/next-release/Bug Fix-489e72aa-bb0d-4964-bd84-002f25db6b5f.json @@ -0,0 +1,4 @@ +{ + "type": "Bug Fix", + "description": "Toast message to warn users if Developer Profile is not selected" +} diff --git a/packages/amazonq/package.json b/packages/amazonq/package.json index 1d285913708..2393b574f1e 100644 --- a/packages/amazonq/package.json +++ b/packages/amazonq/package.json @@ -135,6 +135,10 @@ "amazonQChatPairProgramming": { "type": "boolean", "default": false + }, + "amazonQSelectDeveloperProfile": { + "type": "boolean", + "default": false } }, "additionalProperties": false diff --git a/packages/amazonq/test/e2e/inline/inline.test.ts b/packages/amazonq/test/e2e/inline/inline.test.ts index 57c6e1c4996..43a9f67ab73 100644 --- a/packages/amazonq/test/e2e/inline/inline.test.ts +++ b/packages/amazonq/test/e2e/inline/inline.test.ts @@ -122,7 +122,7 @@ describe('Amazon Q Inline', async function () { .query({ metricName: 'codewhisperer_userTriggerDecision', }) - .map((e) => collectionUtil.partialClone(e, 3, ['credentialStartUrl'], '[omitted]')) + .map((e) => collectionUtil.partialClone(e, 3, ['credentialStartUrl'], { replacement: '[omitted]' })) } for (const [name, invokeCompletion] of [ diff --git a/packages/core/src/auth/sso/clients.ts b/packages/core/src/auth/sso/clients.ts index 01d0e031d04..e050bdc793e 100644 --- a/packages/core/src/auth/sso/clients.ts +++ b/packages/core/src/auth/sso/clients.ts @@ -258,7 +258,7 @@ function addLoggingMiddleware(client: SSOOIDCClient) { args.input as unknown as Record, 3, ['clientSecret', 'accessToken', 'refreshToken'], - '[omitted]' + { replacement: '[omitted]' } ) getLogger().debug('API request (%s %s): %O', hostname, path, input) } @@ -288,7 +288,7 @@ function addLoggingMiddleware(client: SSOOIDCClient) { result.output as unknown as Record, 3, ['clientSecret', 'accessToken', 'refreshToken'], - '[omitted]' + { replacement: '[omitted]' } ) getLogger().debug('API response (%s %s): %O', hostname, path, output) } diff --git a/packages/core/src/codewhisperer/activation.ts b/packages/core/src/codewhisperer/activation.ts index efebb01e179..b0aa54e17a0 100644 --- a/packages/core/src/codewhisperer/activation.ts +++ b/packages/core/src/codewhisperer/activation.ts @@ -95,6 +95,7 @@ import { SecurityIssueTreeViewProvider } from './service/securityIssueTreeViewPr import { setContext } from '../shared/vscode/setContext' import { syncSecurityIssueWebview } from './views/securityIssue/securityIssueWebview' import { detectCommentAboveLine } from '../shared/utilities/commentUtils' +import { notifySelectDeveloperProfile } from './region/utils' let localize: nls.LocalizeFunc @@ -380,6 +381,10 @@ export async function activate(context: ExtContext): Promise { await auth.notifySessionConfiguration() } } + + if (auth.requireProfileSelection()) { + await notifySelectDeveloperProfile() + } }, { emit: false, functionId: { name: 'activateCwCore' } } ) diff --git a/packages/core/src/codewhisperer/commands/types.ts b/packages/core/src/codewhisperer/commands/types.ts index e211ae76f9a..cec28829507 100644 --- a/packages/core/src/codewhisperer/commands/types.ts +++ b/packages/core/src/codewhisperer/commands/types.ts @@ -18,6 +18,8 @@ export const firstStartUpSource = ExtStartUpSources.firstStartUp export const cwEllipsesMenu = 'ellipsesMenu' /** Indicates a CodeWhisperer command was executed from the command palette */ export const commandPalette = 'commandPalette' +/** Indicates a CodeWhisperer command was executed as a result of a toast message interaction */ +export const toastMessage = 'toastMessage' /** * Indicates what caused the CodeWhisperer command to be executed, since a command can be executed from different "sources" @@ -35,3 +37,4 @@ export type CodeWhispererSource = | typeof firstStartUpSource | typeof cwEllipsesMenu | typeof commandPalette + | typeof toastMessage diff --git a/packages/core/src/codewhisperer/region/utils.ts b/packages/core/src/codewhisperer/region/utils.ts new file mode 100644 index 00000000000..dd988f74a30 --- /dev/null +++ b/packages/core/src/codewhisperer/region/utils.ts @@ -0,0 +1,49 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +import * as nls from 'vscode-nls' +const localize = nls.loadMessageBundle() +import { AmazonQPromptSettings } from '../../shared/settings' +import { telemetry } from '../../shared/telemetry/telemetry' +import vscode from 'vscode' +import { selectRegionProfileCommand } from '../commands/basicCommands' +import { placeholder } from '../../shared/vscode/commands2' +import { toastMessage } from '../commands/types' + +/** + * Creates a toast message telling the user they need to select a Developer Profile + */ +export async function notifySelectDeveloperProfile() { + const suppressId = 'amazonQSelectDeveloperProfile' + const settings = AmazonQPromptSettings.instance + const shouldShow = settings.isPromptEnabled(suppressId) + if (!shouldShow) { + return + } + + const message = localize( + 'aws.amazonq.profile.mustSelectMessage', + 'You must select a Q Developer Profile for Amazon Q features to work.' + ) + const selectProfile = 'Select Profile' + const dontShowAgain = 'Dont Show Again' + + await telemetry.toolkit_showNotification.run(async () => { + telemetry.record({ id: 'mustSelectDeveloperProfileMessage' }) + void vscode.window.showWarningMessage(message, selectProfile, dontShowAgain).then(async (resp) => { + await telemetry.toolkit_invokeAction.run(async () => { + if (resp === selectProfile) { + // Show Profile + telemetry.record({ action: 'select' }) + void selectRegionProfileCommand.execute(placeholder, toastMessage) + } else if (resp === dontShowAgain) { + telemetry.record({ action: 'dontShowAgain' }) + await settings.disablePrompt(suppressId) + } else { + telemetry.record({ action: 'ignore' }) + } + }) + }) + }) +} diff --git a/packages/core/src/codewhisperer/util/authUtil.ts b/packages/core/src/codewhisperer/util/authUtil.ts index 0898493b6db..f4cc90a5293 100644 --- a/packages/core/src/codewhisperer/util/authUtil.ts +++ b/packages/core/src/codewhisperer/util/authUtil.ts @@ -46,6 +46,7 @@ import { withTelemetryContext } from '../../shared/telemetry/util' import { focusAmazonQPanel } from '../../codewhispererChat/commands/registerCommands' import { throttle } from 'lodash' import { RegionProfileManager } from '../region/regionProfileManager' + /** Backwards compatibility for connections w pre-chat scopes */ export const codeWhispererCoreScopes = [...scopesCodeWhispererCore] export const codeWhispererChatScopes = [...codeWhispererCoreScopes, ...scopesCodeWhispererChat] diff --git a/packages/core/src/shared/settings-amazonq.gen.ts b/packages/core/src/shared/settings-amazonq.gen.ts index 88324e10475..637c5b1b12e 100644 --- a/packages/core/src/shared/settings-amazonq.gen.ts +++ b/packages/core/src/shared/settings-amazonq.gen.ts @@ -22,7 +22,8 @@ export const amazonqSettings = { "amazonQLspManifestMessage": {}, "amazonQWorkspaceLspManifestMessage": {}, "amazonQChatDisclaimer": {}, - "amazonQChatPairProgramming": {} + "amazonQChatPairProgramming": {}, + "amazonQSelectDeveloperProfile": {} }, "amazonQ.showCodeWithReferences": {}, "amazonQ.allowFeatureDevelopmentToRunCodeAndTests": {}, diff --git a/packages/core/src/shared/utilities/collectionUtils.ts b/packages/core/src/shared/utilities/collectionUtils.ts index 9f9fe9875b9..8a428b8e8b7 100644 --- a/packages/core/src/shared/utilities/collectionUtils.ts +++ b/packages/core/src/shared/utilities/collectionUtils.ts @@ -7,6 +7,7 @@ import { isWeb } from '../extensionGlobals' import { inspect as nodeInspect } from 'util' import { AsyncCollection, toCollection } from './asyncCollection' import { SharedProp, AccumulableKeys, Coalesce, isNonNullable } from './tsUtils' +import { truncate } from './textUtilities' export function union(a: Iterable, b: Iterable): Set { const result = new Set() @@ -304,10 +305,22 @@ export function assign, U extends Partial>(data: T * @param depth * @param omitKeys Omit properties matching these names (at any depth). * @param replacement Replacement for object whose fields extend beyond `depth`, and properties matching `omitKeys`. + * @param maxStringLength truncates string values that exceed this threshold (includes values in nested arrays) */ -export function partialClone(obj: any, depth: number = 3, omitKeys: string[] = [], replacement?: any): any { +export function partialClone( + obj: any, + depth: number = 3, + omitKeys: string[] = [], + options?: { + replacement?: any + maxStringLength?: number + } +): any { // Base case: If input is not an object or has no children, return it. if (typeof obj !== 'object' || obj === null || 0 === Object.getOwnPropertyNames(obj).length) { + if (typeof obj === 'string' && options?.maxStringLength) { + return truncate(obj, options?.maxStringLength, '...') + } return obj } @@ -315,15 +328,15 @@ export function partialClone(obj: any, depth: number = 3, omitKeys: string[] = [ const clonedObj = Array.isArray(obj) ? [] : {} if (depth === 0) { - return replacement ? replacement : clonedObj + return options?.replacement ? options.replacement : clonedObj } // Recursively clone properties of the input object for (const key in obj) { if (omitKeys.includes(key)) { - ;(clonedObj as any)[key] = replacement ? replacement : Array.isArray(obj) ? [] : {} + ;(clonedObj as any)[key] = options?.replacement ? options.replacement : Array.isArray(obj) ? [] : {} } else if (Object.prototype.hasOwnProperty.call(obj, key)) { - ;(clonedObj as any)[key] = partialClone(obj[key], depth - 1, omitKeys, replacement) + ;(clonedObj as any)[key] = partialClone(obj[key], depth - 1, omitKeys, options) } } diff --git a/packages/core/src/shared/utilities/textUtilities.ts b/packages/core/src/shared/utilities/textUtilities.ts index 53c2e2be32c..ed1e1619122 100644 --- a/packages/core/src/shared/utilities/textUtilities.ts +++ b/packages/core/src/shared/utilities/textUtilities.ts @@ -10,7 +10,7 @@ import { default as stripAnsi } from 'strip-ansi' import { getLogger } from '../logger/logger' /** - * Truncates string `s` if it exceeds `n` chars. + * Truncates string `s` if it has or exceeds `n` chars. * * If `n` is negative, truncates at start instead of end. * diff --git a/packages/core/src/shared/vscode/commands2.ts b/packages/core/src/shared/vscode/commands2.ts index c55cd66cc7a..b40134c2afa 100644 --- a/packages/core/src/shared/vscode/commands2.ts +++ b/packages/core/src/shared/vscode/commands2.ts @@ -653,7 +653,7 @@ async function runCommand(fn: T, info: CommandInfo): Prom logger.debug( `command: running ${label} with arguments: %O`, - partialClone(args, 3, ['clientSecret', 'accessToken', 'refreshToken', 'tooltip'], '[omitted]') + partialClone(args, 3, ['clientSecret', 'accessToken', 'refreshToken', 'tooltip'], { replacement: '[omitted]' }) ) try { diff --git a/packages/core/src/test/shared/utilities/collectionUtils.test.ts b/packages/core/src/test/shared/utilities/collectionUtils.test.ts index 53ddc39eff8..34aacb9f28e 100644 --- a/packages/core/src/test/shared/utilities/collectionUtils.test.ts +++ b/packages/core/src/test/shared/utilities/collectionUtils.test.ts @@ -710,8 +710,10 @@ describe('CollectionUtils', async function () { }) describe('partialClone', function () { - it('omits properties by depth', function () { - const testObj = { + let multipleTypedObj: object + + before(async function () { + multipleTypedObj = { a: 34234234234, b: '123456789', c: new Date(2023, 1, 1), @@ -724,57 +726,80 @@ describe('CollectionUtils', async function () { throw Error() }, } + }) - assert.deepStrictEqual(partialClone(testObj, 1), { - ...testObj, + it('omits properties by depth', function () { + assert.deepStrictEqual(partialClone(multipleTypedObj, 1), { + ...multipleTypedObj, d: {}, e: {}, }) - assert.deepStrictEqual(partialClone(testObj, 0, [], '[replaced]'), '[replaced]') - assert.deepStrictEqual(partialClone(testObj, 1, [], '[replaced]'), { - ...testObj, + assert.deepStrictEqual(partialClone(multipleTypedObj, 0, [], { replacement: '[replaced]' }), '[replaced]') + assert.deepStrictEqual(partialClone(multipleTypedObj, 1, [], { replacement: '[replaced]' }), { + ...multipleTypedObj, d: '[replaced]', e: '[replaced]', }) - assert.deepStrictEqual(partialClone(testObj, 3), { - ...testObj, + assert.deepStrictEqual(partialClone(multipleTypedObj, 3), { + ...multipleTypedObj, d: { d1: { d2: {} } }, }) - assert.deepStrictEqual(partialClone(testObj, 4), testObj) + assert.deepStrictEqual(partialClone(multipleTypedObj, 4), multipleTypedObj) }) it('omits properties by name', function () { - const testObj = { - a: 34234234234, - b: '123456789', - c: new Date(2023, 1, 1), - d: { d1: { d2: { d3: 'deep' } } }, + assert.deepStrictEqual(partialClone(multipleTypedObj, 2, ['c', 'e2'], { replacement: '[replaced]' }), { + ...multipleTypedObj, + c: '[replaced]', + d: { d1: '[replaced]' }, + e: { + e1: '[replaced]', + e2: '[replaced]', + }, + }) + assert.deepStrictEqual(partialClone(multipleTypedObj, 3, ['c', 'e2'], { replacement: '[replaced]' }), { + ...multipleTypedObj, + c: '[replaced]', + d: { d1: { d2: '[replaced]' } }, e: { e1: [4, 3, 7], - e2: 'loooooooooo \n nnnnnnnnnnn \n gggggggg \n string', + e2: '[replaced]', }, - f: () => { - throw Error() + }) + }) + + it('truncates properties by maxLength', function () { + const testObj = { + strValue: '1', + boolValue: true, + longString: '11111', + nestedObj: { + nestedObjAgain: { + longNestedStr: '11111', + shortNestedStr: '11', + }, + }, + nestedObj2: { + functionValue: (_: unknown) => {}, }, + nestedObj3: { + myArray: ['1', '11111', '1'], + }, + objInArray: [{ shortString: '11', longString: '11111' }], } - - assert.deepStrictEqual(partialClone(testObj, 2, ['c', 'e2'], '[omitted]'), { + assert.deepStrictEqual(partialClone(testObj, 5, [], { maxStringLength: 2 }), { ...testObj, - c: '[omitted]', - d: { d1: '[omitted]' }, - e: { - e1: '[omitted]', - e2: '[omitted]', + longString: '11...', + nestedObj: { + nestedObjAgain: { + longNestedStr: '11...', + shortNestedStr: '11', + }, }, - }) - assert.deepStrictEqual(partialClone(testObj, 3, ['c', 'e2'], '[omitted]'), { - ...testObj, - c: '[omitted]', - d: { d1: { d2: '[omitted]' } }, - e: { - e1: [4, 3, 7], - e2: '[omitted]', + nestedObj3: { + myArray: ['1', '11...', '1'], }, + objInArray: [{ shortString: '11', longString: '11...' }], }) }) }) From 4ceed6e47600fb90b5f133d97b167104aea5112a Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Fri, 25 Apr 2025 15:06:21 -0400 Subject: [PATCH 51/71] fix(amazonq): handle explain, refactor, fix, optimize, sendToPrompt (#7169) ## Problem explain, refactor, fix, optimize right click menus aren't working ## Solution re-enable them through flare's genericCommand message ## TODO - handle generateUnitTests - handle explainIssue both of these need flare API changes to send generic prompts from the frontend to the backend --- - 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. --- packages/amazonq/src/lsp/chat/commands.ts | 82 +++++++++---------- packages/core/src/codewhispererChat/app.ts | 2 +- .../commands/registerCommands.ts | 75 ++--------------- 3 files changed, 49 insertions(+), 110 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/commands.ts b/packages/amazonq/src/lsp/chat/commands.ts index 8a84883b9a7..8cdd33cafe2 100644 --- a/packages/amazonq/src/lsp/chat/commands.ts +++ b/packages/amazonq/src/lsp/chat/commands.ts @@ -4,7 +4,7 @@ */ import { Commands, globals } from 'aws-core-vscode/shared' -// import { window } from 'vscode' +import { window } from 'vscode' import { AmazonQChatViewProvider } from './webviewProvider' /** @@ -13,21 +13,21 @@ import { AmazonQChatViewProvider } from './webviewProvider' */ export function registerCommands(provider: AmazonQChatViewProvider) { globals.context.subscriptions.push( - // registerGenericCommand('aws.amazonq.explainCode', 'Explain', provider), - // registerGenericCommand('aws.amazonq.refactorCode', 'Refactor', provider), - // registerGenericCommand('aws.amazonq.fixCode', 'Fix', provider), - // registerGenericCommand('aws.amazonq.optimizeCode', 'Optimize', provider), - // Commands.register('aws.amazonq.sendToPrompt', (data) => { - // const triggerType = getCommandTriggerType(data) - // const selection = getSelectedText() + registerGenericCommand('aws.amazonq.explainCode', 'Explain', provider), + registerGenericCommand('aws.amazonq.refactorCode', 'Refactor', provider), + registerGenericCommand('aws.amazonq.fixCode', 'Fix', provider), + registerGenericCommand('aws.amazonq.optimizeCode', 'Optimize', provider), + Commands.register('aws.amazonq.sendToPrompt', (data) => { + const triggerType = getCommandTriggerType(data) + const selection = getSelectedText() - // void focusAmazonQPanel().then(() => { - // void provider.webview?.postMessage({ - // command: 'sendToPrompt', - // params: { selection: selection, triggerType }, - // }) - // }) - // }), + void focusAmazonQPanel().then(() => { + void provider.webview?.postMessage({ + command: 'sendToPrompt', + params: { selection: selection, triggerType }, + }) + }) + }), Commands.register('aws.amazonq.openTab', () => { void focusAmazonQPanel().then(() => { void provider.webview?.postMessage({ @@ -39,36 +39,36 @@ export function registerCommands(provider: AmazonQChatViewProvider) { ) } -// function getSelectedText(): string { -// const editor = window.activeTextEditor -// if (editor) { -// const selection = editor.selection -// const selectedText = editor.document.getText(selection) -// return selectedText -// } +function getSelectedText(): string { + const editor = window.activeTextEditor + if (editor) { + const selection = editor.selection + const selectedText = editor.document.getText(selection) + return selectedText + } -// return ' ' -// } + return ' ' +} -// function getCommandTriggerType(data: any): string { -// // data is undefined when commands triggered from keybinding or command palette. Currently no -// // way to differentiate keybinding and command palette, so both interactions are recorded as keybinding -// return data === undefined ? 'hotkeys' : 'contextMenu' -// } +function getCommandTriggerType(data: any): string { + // data is undefined when commands triggered from keybinding or command palette. Currently no + // way to differentiate keybinding and command palette, so both interactions are recorded as keybinding + return data === undefined ? 'hotkeys' : 'contextMenu' +} -// function registerGenericCommand(commandName: string, genericCommand: string, provider: AmazonQChatViewProvider) { -// return Commands.register(commandName, (data) => { -// const triggerType = getCommandTriggerType(data) -// const selection = getSelectedText() +function registerGenericCommand(commandName: string, genericCommand: string, provider: AmazonQChatViewProvider) { + return Commands.register(commandName, (data) => { + const triggerType = getCommandTriggerType(data) + const selection = getSelectedText() -// void focusAmazonQPanel().then(() => { -// void provider.webview?.postMessage({ -// command: 'genericCommand', -// params: { genericCommand, selection, triggerType }, -// }) -// }) -// }) -// } + void focusAmazonQPanel().then(() => { + void provider.webview?.postMessage({ + command: 'genericCommand', + params: { genericCommand, selection, triggerType }, + }) + }) + }) +} /** * Importing focusAmazonQPanel from aws-core-vscode/amazonq leads to several dependencies down the chain not resolving since AmazonQ chat diff --git a/packages/core/src/codewhispererChat/app.ts b/packages/core/src/codewhispererChat/app.ts index 63147002339..3916e571956 100644 --- a/packages/core/src/codewhispererChat/app.ts +++ b/packages/core/src/codewhispererChat/app.ts @@ -236,5 +236,5 @@ export function init(appContext: AmazonQAppInitContext) { appContext.registerWebViewToAppMessagePublisher(new MessagePublisher(cwChatUIInputEventEmitter), 'cwc') - registerCommands(cwChatControllerMessagePublishers) + registerCommands() } diff --git a/packages/core/src/codewhispererChat/commands/registerCommands.ts b/packages/core/src/codewhispererChat/commands/registerCommands.ts index 39d8383c867..13a2db2de95 100644 --- a/packages/core/src/codewhispererChat/commands/registerCommands.ts +++ b/packages/core/src/codewhispererChat/commands/registerCommands.ts @@ -6,7 +6,6 @@ import { commandPalette } from '../../codewhisperer/commands/types' import { CodeScanIssue } from '../../codewhisperer/models/model' import { Commands, VsCodeCommandArg, placeholder } from '../../shared/vscode/commands2' -import { ChatControllerMessagePublishers } from '../controllers/chat/controller' /** * Opens the Amazon Q panel, showing the correct View that should @@ -37,73 +36,13 @@ export const focusAmazonQPanelKeybinding = Commands.declare('_aws.amazonq.focusC await focusAmazonQPanel.execute(placeholder, 'keybinding') }) -const getCommandTriggerType = (data: any): EditorContextCommandTriggerType => { - // data is undefined when commands triggered from keybinding or command palette. Currently no - // way to differentiate keybinding and command palette, so both interactions are recorded as keybinding - return data === undefined ? 'keybinding' : 'contextMenu' -} - -export function registerCommands(controllerPublishers: ChatControllerMessagePublishers) { - Commands.register('aws.amazonq.explainCode', async (data) => { - return focusAmazonQPanel.execute(placeholder, 'amazonq.explainCode').then(() => { - controllerPublishers.processContextMenuCommand.publish({ - type: 'aws.amazonq.explainCode', - triggerType: getCommandTriggerType(data), - }) - }) - }) - Commands.register('aws.amazonq.refactorCode', async (data) => { - return focusAmazonQPanel.execute(placeholder, 'amazonq.refactorCode').then(() => { - controllerPublishers.processContextMenuCommand.publish({ - type: 'aws.amazonq.refactorCode', - triggerType: getCommandTriggerType(data), - }) - }) - }) - Commands.register('aws.amazonq.fixCode', async (data) => { - return focusAmazonQPanel.execute(placeholder, 'amazonq.fixCode').then(() => { - controllerPublishers.processContextMenuCommand.publish({ - type: 'aws.amazonq.fixCode', - triggerType: getCommandTriggerType(data), - }) - }) - }) - Commands.register('aws.amazonq.optimizeCode', async (data) => { - return focusAmazonQPanel.execute(placeholder, 'amazonq.optimizeCode').then(() => { - controllerPublishers.processContextMenuCommand.publish({ - type: 'aws.amazonq.optimizeCode', - triggerType: getCommandTriggerType(data), - }) - }) - }) - Commands.register('aws.amazonq.sendToPrompt', async (data) => { - return focusAmazonQPanel.execute(placeholder, 'amazonq.sendToPrompt').then(() => { - controllerPublishers.processContextMenuCommand.publish({ - type: 'aws.amazonq.sendToPrompt', - triggerType: getCommandTriggerType(data), - }) - }) - }) - Commands.register('aws.amazonq.explainIssue', async (issue) => { - return focusAmazonQPanel.execute(placeholder, 'amazonq.explainIssue').then(() => { - controllerPublishers.processContextMenuCommand.publish({ - type: 'aws.amazonq.explainIssue', - triggerType: 'click', - issue, - }) - }) - }) - Commands.register('aws.amazonq.generateUnitTests', async (data) => { - return focusAmazonQPanel.execute(placeholder, 'amazonq.generateUnitTests').then(() => { - controllerPublishers.processContextMenuCommand.publish({ - type: 'aws.amazonq.generateUnitTests', - triggerType: getCommandTriggerType(data), - }) - }) - }) - Commands.register('aws.amazonq.updateContextCommandItems', () => { - controllerPublishers.processContextCommandUpdateMessage.publish() - }) +export function registerCommands() { + /** + * make these no-ops, since theres still callers that need to be deprecated + */ + Commands.register('aws.amazonq.explainIssue', async (issue) => {}) + Commands.register('aws.amazonq.generateUnitTests', async (data) => {}) + Commands.register('aws.amazonq.updateContextCommandItems', () => {}) } export type EditorContextBaseCommandType = From 3beb8b226a15a1442a59ac9193de332a556c795d Mon Sep 17 00:00:00 2001 From: Zoe Lin <60411978+zixlin7@users.noreply.github.com> Date: Fri, 25 Apr 2025 20:03:13 -0700 Subject: [PATCH 52/71] fix(amazonq): enable local context for falcon (#7176) ## Problem context items should be always on and not controlled by workspace setting there need to be a separate setting to control @workspace indexing, out of scope for this PR ## Solution --- - 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. --- packages/amazonq/src/lsp/client.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index 1373c026a9c..b198aabfd6f 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -92,7 +92,8 @@ export async function startLanguageServer( customization, optOutTelemetry: getOptOutPreference() === 'OPTOUT', projectContext: { - enableLocalIndexing: CodeWhispererSettings.instance.isLocalIndexEnabled(), + // TODO: we might need another setting to control the actual indexing + enableLocalIndexing: true, enableGpuAcceleration: CodeWhispererSettings.instance.isLocalIndexGPUEnabled(), indexWorkerThreads: CodeWhispererSettings.instance.getIndexWorkerThreads(), localIndexing: { From 947c471967e06ffb8a39c6f06630d38ffd20dbee Mon Sep 17 00:00:00 2001 From: Tai Lai Date: Fri, 25 Apr 2025 20:14:33 -0700 Subject: [PATCH 53/71] feat(amazonq): support multiple uri in a single diff scheme (#7167) ## Problem The current viewDiff implementation is restricted to only allowing comparing the current file contents. This means it's not possible to view a diff for a change that was applied at a previous point in time. ## Solution - Create a new `DiffContentProvider` that can support showing multiple URIs in the same scheme. The current `ContentProvider` has a limitation that it can only show a single URI. - Refactor the code to use a defined type `ViewDiffMessage` instead of `any` - Change the logic so that diffs are stored in memory instead of a temp file on disk --- - 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. --- package-lock.json | 8 +- packages/amazonq/src/lsp/chat/messages.ts | 32 ++-- packages/core/package.json | 2 +- .../commons/controllers/contentController.ts | 32 ++-- .../controllers/diffContentProvider.ts | 51 +++++++ packages/core/src/amazonq/index.ts | 2 +- .../shared/utilities/textDocumentUtilities.ts | 75 ++++++++- .../src/shared/utilities/textUtilities.ts | 6 +- .../controllers/contentController.test.ts | 143 ++++++++++++++++++ .../utilities/textDocumentUtilities.test.ts | 140 +++++++++++++++++ 10 files changed, 461 insertions(+), 30 deletions(-) create mode 100644 packages/core/src/amazonq/commons/controllers/diffContentProvider.ts create mode 100644 packages/core/src/test/amazonq/commons/controllers/contentController.test.ts create mode 100644 packages/core/src/test/shared/utilities/textDocumentUtilities.test.ts diff --git a/package-lock.json b/package-lock.json index 8ddd858085d..36222058e8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10829,9 +10829,9 @@ } }, "node_modules/@aws/language-server-runtimes-types": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.22.tgz", - "integrity": "sha512-cyNrq6TqCcD9+vYUvvXJ5EJzfB4DrLtDBzBXgv/4zPIMRH0YwGEsRZLzPDwCPCxuZ5kGlal3GlBMkLkMCRGPdQ==", + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.26.tgz", + "integrity": "sha512-c63rpUbcrtLqaC33t6elRApQqLbQvFgKzIQ2z/VCavE5F7HSLBfzhHkhgUFd775fBpsF4MHrIzwNitYLhDGobw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -26484,7 +26484,7 @@ "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.24", "@aws/language-server-runtimes": "^0.2.70", - "@aws/language-server-runtimes-types": "^0.1.21", + "@aws/language-server-runtimes-types": "^0.1.26", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34", diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 0427a8610a3..6d2d9947dde 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -59,7 +59,12 @@ import * as jose from 'jose' import { AmazonQChatViewProvider } from './webviewProvider' import { AuthUtil } from 'aws-core-vscode/codewhisperer' import { amazonQDiffScheme, AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared' -import { DefaultAmazonQAppInitContext, messageDispatcher, EditorContentController } from 'aws-core-vscode/amazonq' +import { + DefaultAmazonQAppInitContext, + messageDispatcher, + EditorContentController, + ViewDiffMessage, +} from 'aws-core-vscode/amazonq' import { telemetry, TelemetryBase } from 'aws-core-vscode/telemetry' import { isValidResponseError } from './error' @@ -449,17 +454,24 @@ export function registerMessageListeners( new vscode.Position(0, 0), new vscode.Position(doc.lineCount - 1, doc.lineAt(doc.lineCount - 1).text.length) ) - await ecc.viewDiff( - { - context: { - activeFileContext: { filePath: params.originalFileUri }, - focusAreaContext: { selectionInsideExtendedCodeBlock: entireDocumentSelection }, + const viewDiffMessage: ViewDiffMessage = { + context: { + activeFileContext: { + filePath: params.originalFileUri, + fileText: params.originalFileContent ?? '', + fileLanguage: undefined, + matchPolicy: undefined, + }, + focusAreaContext: { + selectionInsideExtendedCodeBlock: entireDocumentSelection, + codeBlock: '', + extendedCodeBlock: '', + names: undefined, }, - code: params.fileContent ?? '', }, - amazonQDiffScheme, - true - ) + code: params.fileContent ?? '', + } + await ecc.viewDiff(viewDiffMessage, amazonQDiffScheme) }) languageClient.onNotification(chatUpdateNotificationType.method, (params: ChatUpdateParams) => { diff --git a/packages/core/package.json b/packages/core/package.json index 31d928da9fa..0ed5e368121 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -444,7 +444,7 @@ "@aws/chat-client": "^0.1.4", "@aws/chat-client-ui-types": "^0.1.24", "@aws/language-server-runtimes": "^0.2.70", - "@aws/language-server-runtimes-types": "^0.1.21", + "@aws/language-server-runtimes-types": "^0.1.26", "@cspotcode/source-map-support": "^0.8.1", "@sinonjs/fake-timers": "^10.0.2", "@types/adm-zip": "^0.4.34", diff --git a/packages/core/src/amazonq/commons/controllers/contentController.ts b/packages/core/src/amazonq/commons/controllers/contentController.ts index 2586951a18e..70744417451 100644 --- a/packages/core/src/amazonq/commons/controllers/contentController.ts +++ b/packages/core/src/amazonq/commons/controllers/contentController.ts @@ -11,7 +11,7 @@ import { amazonQDiffScheme, amazonQTabSuffix } from '../../../shared/constants' import { disposeOnEditorClose } from '../../../shared/utilities/editorUtilities' import { applyChanges, - createTempFileForDiff, + createTempUrisForDiff, getIndentedCode, getSelectionFromRange, } from '../../../shared/utilities/textDocumentUtilities' @@ -19,6 +19,11 @@ import { ToolkitError, getErrorMsg } from '../../../shared/errors' import fs from '../../../shared/fs/fs' import { extractFileAndCodeSelectionFromMessage } from '../../../shared/utilities/textUtilities' import { UserWrittenCodeTracker } from '../../../codewhisperer/tracker/userWrittenCodeTracker' +import type { ViewDiff } from '../../../codewhispererChat/controllers/chat/model' +import type { TriggerEvent } from '../../../codewhispererChat/storages/triggerEvents' +import { DiffContentProvider } from './diffContentProvider' + +export type ViewDiffMessage = Pick & Partial> export class ContentProvider implements vscode.TextDocumentContentProvider { constructor(private uri: vscode.Uri) {} @@ -155,26 +160,35 @@ export class EditorContentController { * isolating them from any other modifications in the original file. * * @param message the message from Amazon Q chat + * @param scheme the URI scheme to use for the diff view */ - public async viewDiff(message: any, scheme: string = amazonQDiffScheme, reverseOrder = false) { + public async viewDiff(message: ViewDiffMessage, scheme: string = amazonQDiffScheme) { const errorNotification = 'Unable to Open Diff.' - const { filePath, selection } = extractFileAndCodeSelectionFromMessage(message) + const { filePath, fileText, selection } = extractFileAndCodeSelectionFromMessage(message) try { if (filePath && message?.code !== undefined && selection) { - const originalFileUri = vscode.Uri.file(filePath) - const uri = await createTempFileForDiff(originalFileUri, message, selection, scheme) - // Register content provider and show diff - const contentProvider = new ContentProvider(uri) + const contentProvider = new DiffContentProvider() const disposable = vscode.workspace.registerTextDocumentContentProvider(scheme, contentProvider) + + const [originalFileUri, modifiedFileUri] = await createTempUrisForDiff( + filePath, + fileText, + message, + selection, + scheme, + contentProvider + ) + await vscode.commands.executeCommand( 'vscode.diff', - ...(reverseOrder ? [uri, originalFileUri] : [originalFileUri, uri]), + originalFileUri, + modifiedFileUri, `${path.basename(filePath)} ${amazonQTabSuffix}` ) - disposeOnEditorClose(uri, disposable) + disposeOnEditorClose(originalFileUri, disposable) } } catch (error) { void vscode.window.showInformationMessage(errorNotification) diff --git a/packages/core/src/amazonq/commons/controllers/diffContentProvider.ts b/packages/core/src/amazonq/commons/controllers/diffContentProvider.ts new file mode 100644 index 00000000000..5d2e7c2efd0 --- /dev/null +++ b/packages/core/src/amazonq/commons/controllers/diffContentProvider.ts @@ -0,0 +1,51 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +import vscode from 'vscode' +import { getLogger } from '../../../shared/logger/logger' + +/** + * A TextDocumentContentProvider that can handle multiple URIs with the same scheme. + * This provider maintains a mapping of URIs to their content. + */ +export class DiffContentProvider implements vscode.TextDocumentContentProvider { + private contentMap = new Map() + private _onDidChange = new vscode.EventEmitter() + + public readonly onDidChange = this._onDidChange.event + + /** + * Register content for a specific URI + * @param uri The URI to register content for + * @param content The content to serve for this URI + */ + public registerContent(uri: vscode.Uri, content: string): void { + this.contentMap.set(uri.toString(), content) + this._onDidChange.fire(uri) + } + + /** + * Unregister a URI + * @param uri The URI to unregister + */ + public unregisterUri(uri: vscode.Uri): void { + this.contentMap.delete(uri.toString()) + } + + /** + * Provides the content for a given URI + * @param uri The URI to provide content for + * @returns The content as a string + */ + public provideTextDocumentContent(uri: vscode.Uri): string { + const content = this.contentMap.get(uri.toString()) + + if (content === undefined) { + getLogger().warn('No content registered for URI: %s', uri.toString()) + return '' + } + + return content + } +} diff --git a/packages/core/src/amazonq/index.ts b/packages/core/src/amazonq/index.ts index 8a4815c1577..168915a8434 100644 --- a/packages/core/src/amazonq/index.ts +++ b/packages/core/src/amazonq/index.ts @@ -47,7 +47,7 @@ export * as authConnection from '../auth/connection' export * as featureConfig from './webview/generators/featureConfig' export * as messageDispatcher from './webview/messages/messageDispatcher' import { FeatureContext } from '../shared/featureConfig' -export { EditorContentController } from './commons/controllers/contentController' +export { EditorContentController, ViewDiffMessage } from './commons/controllers/contentController' /** * main from createMynahUI is a purely browser dependency. Due to this diff --git a/packages/core/src/shared/utilities/textDocumentUtilities.ts b/packages/core/src/shared/utilities/textDocumentUtilities.ts index 48a20a6c44b..93b22c2e560 100644 --- a/packages/core/src/shared/utilities/textDocumentUtilities.ts +++ b/packages/core/src/shared/utilities/textDocumentUtilities.ts @@ -11,6 +11,8 @@ import { getLogger } from '../logger/logger' import fs from '../fs/fs' import { ToolkitError } from '../errors' import { indent } from './textUtilities' +import { ViewDiffMessage } from '../../amazonq/commons/controllers/contentController' +import { DiffContentProvider } from '../../amazonq/commons/controllers/diffContentProvider' /** * Finds occurences of text in a document. Currently only used for highlighting cloudwatchlogs data. @@ -123,13 +125,13 @@ export async function applyChanges(doc: vscode.TextDocument, range: vscode.Range * and applying the proposed changes within the selected range. * * @param {vscode.Uri} originalFileUri - The URI of the original file. - * @param {any} message - The message object containing the proposed code changes. + * @param {ViewDiffMessage} message - The message object containing the proposed code changes. * @param {vscode.Selection} selection - The selection range in the document where the changes are applied. * @returns {Promise} - A promise that resolves to the URI of the temporary file. */ export async function createTempFileForDiff( originalFileUri: vscode.Uri, - message: any, + message: ViewDiffMessage, selection: vscode.Selection, scheme: string ): Promise { @@ -168,6 +170,53 @@ export async function createTempFileForDiff( return tempFileUri } +/** + * Creates temporary URIs for diff comparison and registers their content with a DiffContentProvider. + * This approach avoids writing to the file system by keeping content in memory. + * + * @param filePath The path of the original file (used for naming) + * @param fileText Optional content of the original file (if not provided, will be read from filePath) + * @param message The message object containing the proposed code changes + * @param selection The selection range where changes should be applied + * @param scheme The URI scheme to use + * @param diffProvider The content provider to register URIs with + * @returns A promise that resolves to a tuple of [originalUri, modifiedUri] + */ +export async function createTempUrisForDiff( + filePath: string, + fileText: string | undefined, + message: ViewDiffMessage, + selection: vscode.Selection, + scheme: string, + diffProvider: DiffContentProvider +): Promise<[vscode.Uri, vscode.Uri]> { + const originalFile = _path.parse(filePath) + const id = Date.now() + + // Create URIs with the custom scheme + const originalFileUri = vscode.Uri.parse(`${scheme}:/${originalFile.name}_original-${id}${originalFile.ext}`) + const modifiedFileUri = vscode.Uri.parse(`${scheme}:/${originalFile.name}_proposed-${id}${originalFile.ext}`) + + // Get the original content + const contentToUse = fileText ?? (await fs.readFileText(filePath)) + + // Register the original content + diffProvider.registerContent(originalFileUri, contentToUse) + + const indentedCode = getIndentedCodeFromOriginalContent(message, contentToUse, selection) + const lines = contentToUse.split('\n') + + // Create the modified content + const beforeLines = lines.slice(0, selection.start.line) + const afterLines = lines.slice(selection.end.line + 1) + const modifiedContent = [...beforeLines, indentedCode, ...afterLines].join('\n') + + // Register the modified content + diffProvider.registerContent(modifiedFileUri, modifiedContent) + + return [originalFileUri, modifiedFileUri] +} + /** * Indents the given code based on the current document's indentation at the selection start. * @@ -176,7 +225,7 @@ export async function createTempFileForDiff( * @param selection The selection range in the document. * @returns The processed code to be applied to the document. */ -export function getIndentedCode(message: any, doc: vscode.TextDocument, selection: vscode.Selection) { +export function getIndentedCode(message: ViewDiffMessage, doc: vscode.TextDocument, selection: vscode.Selection) { const indentRange = new vscode.Range(new vscode.Position(selection.start.line, 0), selection.active) let indentation = doc.getText(indentRange) @@ -187,6 +236,26 @@ export function getIndentedCode(message: any, doc: vscode.TextDocument, selectio return indent(message.code, indentation.length) } +/** + * Indents the given code based on the indentation of the original content at the selection start. + * + * @param message The message object containing the code. + * @param originalContent The original content of the document. + * @param selection The selection range in the document. + * @returns The processed code to be applied to the document. + */ +export function getIndentedCodeFromOriginalContent( + message: ViewDiffMessage, + originalContent: string, + selection: vscode.Selection +) { + const lines = originalContent.split('\n') + const selectionStartLine = lines[selection.start.line] || '' + const indentMatch = selectionStartLine.match(/^(\s*)/) + const indentation = indentMatch ? indentMatch[1] : '' + return indent(message.code, indentation.length) +} + export async function showFile(uri: vscode.Uri) { const doc = await vscode.workspace.openTextDocument(uri) await vscode.window.showTextDocument(doc, { preview: false }) diff --git a/packages/core/src/shared/utilities/textUtilities.ts b/packages/core/src/shared/utilities/textUtilities.ts index ed1e1619122..6bc1a4eff21 100644 --- a/packages/core/src/shared/utilities/textUtilities.ts +++ b/packages/core/src/shared/utilities/textUtilities.ts @@ -8,6 +8,7 @@ import * as crypto from 'crypto' import * as fs from 'fs' // eslint-disable-line no-restricted-imports import { default as stripAnsi } from 'strip-ansi' import { getLogger } from '../logger/logger' +import { ViewDiffMessage } from '../../amazonq/commons/controllers/contentController' /** * Truncates string `s` if it has or exceeds `n` chars. @@ -268,10 +269,11 @@ export function decodeBase64(base64Str: string): string { * @param {any} message - The message object containing the file and selection context. * @returns {Object} - An object with `filePath` and `selection` properties. */ -export function extractFileAndCodeSelectionFromMessage(message: any) { +export function extractFileAndCodeSelectionFromMessage(message: ViewDiffMessage) { const filePath = message?.context?.activeFileContext?.filePath + const fileText = message?.context?.activeFileContext?.fileText const selection = message?.context?.focusAreaContext?.selectionInsideExtendedCodeBlock as vscode.Selection - return { filePath, selection } + return { filePath, fileText, selection } } export function matchesPattern(source: string, target: string | RegExp) { diff --git a/packages/core/src/test/amazonq/commons/controllers/contentController.test.ts b/packages/core/src/test/amazonq/commons/controllers/contentController.test.ts new file mode 100644 index 00000000000..003e14e4783 --- /dev/null +++ b/packages/core/src/test/amazonq/commons/controllers/contentController.test.ts @@ -0,0 +1,143 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as vscode from 'vscode' +import * as sinon from 'sinon' +import assert from 'assert' +import { EditorContentController, ViewDiffMessage } from '../../../../amazonq/commons/controllers/contentController' +import * as textDocumentUtilities from '../../../../shared/utilities/textDocumentUtilities' +import * as textUtilities from '../../../../shared/utilities/textUtilities' +import { amazonQDiffScheme, amazonQTabSuffix } from '../../../../shared/constants' +import * as editorUtilities from '../../../../shared/utilities/editorUtilities' + +describe('EditorContentController', () => { + let sandbox: sinon.SinonSandbox + let controller: EditorContentController + let executeCommandStub: sinon.SinonStub + let registerTextDocumentContentProviderStub: sinon.SinonStub + let createTempUrisForDiffStub: sinon.SinonStub + let disposeOnEditorCloseStub: sinon.SinonStub + let extractParamsFromMessageStub: sinon.SinonStub + + beforeEach(() => { + sandbox = sinon.createSandbox() + controller = new EditorContentController() + + // Stub VS Code API calls + executeCommandStub = sandbox.stub(vscode.commands, 'executeCommand').resolves() + registerTextDocumentContentProviderStub = sandbox + .stub(vscode.workspace, 'registerTextDocumentContentProvider') + .returns({ dispose: () => {} }) + + // Stub utility functions + createTempUrisForDiffStub = sandbox.stub(textDocumentUtilities, 'createTempUrisForDiff') + disposeOnEditorCloseStub = sandbox.stub(editorUtilities, 'disposeOnEditorClose') + extractParamsFromMessageStub = sandbox.stub(textUtilities, 'extractFileAndCodeSelectionFromMessage') + }) + + afterEach(() => { + sandbox.restore() + }) + + describe('viewDiff', () => { + const testFilePath = '/path/to/testFile.js' + const testCode = 'new code' + const testSelection = new vscode.Selection(new vscode.Position(1, 0), new vscode.Position(2, 0)) + const testMessage: ViewDiffMessage = { + code: testCode, + } + const originalUri = vscode.Uri.parse('test-scheme:/original/testFile.js') + const modifiedUri = vscode.Uri.parse('test-scheme:/modified/testFile.js') + + beforeEach(() => { + extractParamsFromMessageStub.returns({ + filePath: testFilePath, + selection: testSelection, + }) + createTempUrisForDiffStub.resolves([originalUri, modifiedUri]) + }) + + it('should show diff view with correct URIs and title', async () => { + await controller.viewDiff(testMessage) + + // Verify content provider was registered + assert.strictEqual(registerTextDocumentContentProviderStub.calledOnce, true) + assert.strictEqual(registerTextDocumentContentProviderStub.firstCall.args[0], amazonQDiffScheme) + + // Verify createTempUrisForDiff was called with correct parameters + assert.strictEqual(createTempUrisForDiffStub.calledOnce, true) + assert.strictEqual(createTempUrisForDiffStub.firstCall.args[0], testFilePath) + assert.strictEqual(createTempUrisForDiffStub.firstCall.args[2], testMessage) + assert.strictEqual(createTempUrisForDiffStub.firstCall.args[3], testSelection) + assert.strictEqual(createTempUrisForDiffStub.firstCall.args[4], amazonQDiffScheme) + + // Verify vscode.diff command was executed with correct parameters + assert.strictEqual(executeCommandStub.calledOnce, true) + assert.strictEqual(executeCommandStub.firstCall.args[0], 'vscode.diff') + assert.strictEqual(executeCommandStub.firstCall.args[1], originalUri) + assert.strictEqual(executeCommandStub.firstCall.args[2], modifiedUri) + assert.strictEqual(executeCommandStub.firstCall.args[3], `testFile.js ${amazonQTabSuffix}`) + + // Verify disposeOnEditorClose was called + assert.strictEqual(disposeOnEditorCloseStub.calledOnce, true) + assert.strictEqual(disposeOnEditorCloseStub.firstCall.args[0], originalUri) + }) + + it('should use custom scheme when provided', async () => { + const customScheme = 'custom-scheme' + await controller.viewDiff(testMessage, customScheme) + + assert.strictEqual(registerTextDocumentContentProviderStub.firstCall.args[0], customScheme) + assert.strictEqual(createTempUrisForDiffStub.firstCall.args[4], customScheme) + }) + + it('should pass fileText to createTempUrisForDiff when available', async () => { + const testFileText = 'original file content' + extractParamsFromMessageStub.returns({ + filePath: testFilePath, + fileText: testFileText, + selection: testSelection, + }) + + await controller.viewDiff(testMessage) + + assert.strictEqual(createTempUrisForDiffStub.firstCall.args[1], testFileText) + }) + + it('should not attempt to show diff when filePath is missing', async () => { + extractParamsFromMessageStub.returns({ + filePath: undefined, + selection: testSelection, + }) + + await controller.viewDiff(testMessage) + + assert.strictEqual(registerTextDocumentContentProviderStub.called, false) + assert.strictEqual(createTempUrisForDiffStub.called, false) + assert.strictEqual(executeCommandStub.called, false) + }) + + it('should not attempt to show diff when code is missing', async () => { + await controller.viewDiff({ code: undefined as unknown as string }) + + assert.strictEqual(registerTextDocumentContentProviderStub.called, false) + assert.strictEqual(createTempUrisForDiffStub.called, false) + assert.strictEqual(executeCommandStub.called, false) + }) + + it('should not attempt to show diff when selection is missing', async () => { + extractParamsFromMessageStub.returns({ + filePath: testFilePath, + selection: undefined, + }) + + await controller.viewDiff(testMessage) + + assert.strictEqual(registerTextDocumentContentProviderStub.called, false) + assert.strictEqual(createTempUrisForDiffStub.called, false) + assert.strictEqual(executeCommandStub.called, false) + }) + }) +}) diff --git a/packages/core/src/test/shared/utilities/textDocumentUtilities.test.ts b/packages/core/src/test/shared/utilities/textDocumentUtilities.test.ts new file mode 100644 index 00000000000..e907e09cb41 --- /dev/null +++ b/packages/core/src/test/shared/utilities/textDocumentUtilities.test.ts @@ -0,0 +1,140 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as vscode from 'vscode' +import * as sinon from 'sinon' +import assert from 'assert' +import { createTempUrisForDiff } from '../../../shared/utilities/textDocumentUtilities' +import { DiffContentProvider } from '../../../amazonq/commons/controllers/diffContentProvider' +import fs from '../../../shared/fs/fs' + +describe('textDocumentUtilities', () => { + let sandbox: sinon.SinonSandbox + + beforeEach(() => { + sandbox = sinon.createSandbox() + }) + + afterEach(() => { + sandbox.restore() + }) + + describe('createTempUrisForDiff', () => { + const testScheme = 'test-scheme' + const testFilePath = '/path/to/testFile.js' + const testFileContent = 'line 1\nline 2\nline 3\nline 4\nline 5' + const testMessage = { + code: 'new line 3', + } + const testSelection = new vscode.Selection( + new vscode.Position(2, 0), // Start at line 3 (index 2) + new vscode.Position(2, 6) // End at line 3 (index 2) + ) + + let diffProvider: DiffContentProvider + let fsReadFileTextStub: sinon.SinonStub + + beforeEach(() => { + diffProvider = new DiffContentProvider() + sandbox.stub(diffProvider, 'registerContent') + fsReadFileTextStub = sandbox.stub(fs, 'readFileText').resolves(testFileContent) + }) + + it('should create URIs with the correct scheme and file name', async () => { + const [originalUri, modifiedUri] = await createTempUrisForDiff( + testFilePath, + undefined, + testMessage, + testSelection, + testScheme, + diffProvider + ) + + assert.strictEqual(originalUri.scheme, testScheme) + assert.strictEqual(modifiedUri.scheme, testScheme) + assert.ok(originalUri.path.includes('testFile_original-')) + assert.ok(modifiedUri.path.includes('testFile_proposed-')) + }) + + it('should use provided fileText instead of reading from file when available', async () => { + const providedFileText = 'provided line 1\nprovided line 2\nprovided line 3' + + await createTempUrisForDiff( + testFilePath, + providedFileText, + testMessage, + testSelection, + testScheme, + diffProvider + ) + + // Verify fs.readFileText was not called + assert.strictEqual(fsReadFileTextStub.called, false) + + // Verify the diffProvider was called with the provided content + const registerContentCalls = (diffProvider.registerContent as sinon.SinonStub).getCalls() + assert.strictEqual(registerContentCalls.length, 2) + assert.strictEqual(registerContentCalls[0].args[1], providedFileText) + }) + + it('should read from file when fileText is not provided', async () => { + await createTempUrisForDiff(testFilePath, undefined, testMessage, testSelection, testScheme, diffProvider) + + // Verify fs.readFileText was called with the correct path + assert.strictEqual(fsReadFileTextStub.calledWith(testFilePath), true) + + // Verify the diffProvider was called with the file content + const registerContentCalls = (diffProvider.registerContent as sinon.SinonStub).getCalls() + assert.strictEqual(registerContentCalls.length, 2) + assert.strictEqual(registerContentCalls[0].args[1], testFileContent) + }) + + it('should create modified content by replacing the selected lines', async () => { + await createTempUrisForDiff( + testFilePath, + testFileContent, + testMessage, + testSelection, + testScheme, + diffProvider + ) + + // Verify the diffProvider was called with the correct modified content + const registerContentCalls = (diffProvider.registerContent as sinon.SinonStub).getCalls() + assert.strictEqual(registerContentCalls.length, 2) + + // First call is for original content + assert.strictEqual(registerContentCalls[0].args[1], testFileContent) + + // Second call is for modified content + const expectedModifiedContent = 'line 1\nline 2\nnew line 3\nline 4\nline 5' + assert.strictEqual(registerContentCalls[1].args[1], expectedModifiedContent) + }) + + it('should handle multi-line selections correctly', async () => { + // Selection spanning multiple lines (lines 2-4) + const multiLineSelection = new vscode.Selection( + new vscode.Position(1, 0), // Start at line 2 (index 1) + new vscode.Position(3, 6) // End at line 4 (index 3) + ) + + await createTempUrisForDiff( + testFilePath, + testFileContent, + testMessage, + multiLineSelection, + testScheme, + diffProvider + ) + + // Verify the diffProvider was called with the correct modified content + const registerContentCalls = (diffProvider.registerContent as sinon.SinonStub).getCalls() + + // Expected content should have lines 2-4 replaced with the new code + const expectedModifiedContent = 'line 1\nnew line 3\nline 5' + assert.strictEqual(registerContentCalls[1].args[1], expectedModifiedContent) + }) + }) +}) From 2f103ffaf42c318b6b963d8744400737e915c54c Mon Sep 17 00:00:00 2001 From: Nikolas Komonen <118216176+nkomonen-amazon@users.noreply.github.com> Date: Mon, 28 Apr 2025 13:01:00 -0400 Subject: [PATCH 54/71] fix(amazonq): Remove the 'Cancel' button on LSP download (#7184) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Just remove the 'Cancel' button for now when downloading the language server. We do not want to deal with the edge case of a user cancelling part way and then their Q features don't work since it depends on the language server. Screenshot 2025-04-28 at 12 18 54 PM --- TODO: Figure out a better solution for allowing users to cancel the LS download, but then making it easy to download again if they eventually want it. We will also need to design it so they are aware that cancelling will prevent Q features from working. This will require an update to the spec. --- - 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. Signed-off-by: nkomonen-amazon --- packages/core/src/shared/lsp/lspResolver.ts | 13 +++++++++++-- packages/core/src/shared/utilities/messages.ts | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/core/src/shared/lsp/lspResolver.ts b/packages/core/src/shared/lsp/lspResolver.ts index 70f66cafd14..ba51030e348 100644 --- a/packages/core/src/shared/lsp/lspResolver.ts +++ b/packages/core/src/shared/lsp/lspResolver.ts @@ -13,9 +13,10 @@ import { TargetContent, logger, LspResult, LspVersion, Manifest } from './types' import { createHash } from '../crypto' import { lspSetupStage, StageResolver, tryStageResolvers } from './utils/setupStage' import { HttpResourceFetcher } from '../resourcefetcher/httpResourceFetcher' -import { showMessageWithCancel } from '../../shared/utilities/messages' +import { showProgressWithTimeout } from '../../shared/utilities/messages' import { Timeout } from '../utilities/timeoutUtils' import { oneMinute } from '../datetime' +import vscode from 'vscode' // max timeout for downloading remote LSP assets. Some asserts are large (100+ MB) so this needs to be large for slow connections. // Since the user can cancel this one we can let it run very long. @@ -106,7 +107,15 @@ export class LanguageServerResolver { */ private async showDownloadProgress() { const timeout = new Timeout(remoteDownloadTimeout) - await showMessageWithCancel(`Downloading '${this.lsName}' language server`, timeout) + void showProgressWithTimeout( + { + title: `Downloading '${this.lsName}' language server`, + location: vscode.ProgressLocation.Notification, + cancellable: false, + }, + timeout, + 0 + ) return timeout } diff --git a/packages/core/src/shared/utilities/messages.ts b/packages/core/src/shared/utilities/messages.ts index fe2b08e42cf..26fd745c8d6 100644 --- a/packages/core/src/shared/utilities/messages.ts +++ b/packages/core/src/shared/utilities/messages.ts @@ -236,7 +236,7 @@ export function showOutputMessage(message: string, outputChannel: vscode.OutputC * * @see showMessageWithCancel for an example usage */ -async function showProgressWithTimeout( +export async function showProgressWithTimeout( options: vscode.ProgressOptions, timeout: Timeout, showAfterMs: number From c6afcb62f995f54bb41af304483221294c09d172 Mon Sep 17 00:00:00 2001 From: Nikolas Komonen <118216176+nkomonen-amazon@users.noreply.github.com> Date: Mon, 28 Apr 2025 15:21:37 -0400 Subject: [PATCH 55/71] refactor(amazonq): Change Q LSP downloading message text (#7185) ## PROBLEM: When installing the LSP for Q we get a message that says `"Installing 'Amazon Q' language server"`, but they want it to be slightly different (`"Updating Amazon Q plugin"`). The issue is the base class for the lsp installer class has a generic message that is not easy to customize. ## SOLUTION: Allow an override downloading message to be defined in each specific LspInstaller implementation. This message is then routed in to the LspResolver (the thing that downloads the Lsp), and the message is displayed here. This override message will show when the download is happening. Everyone is happy. --- - 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. Signed-off-by: nkomonen-amazon --- packages/amazonq/src/lsp/lspInstaller.ts | 2 ++ packages/core/src/shared/lsp/baseLspInstaller.ts | 9 ++++++++- packages/core/src/shared/lsp/lspResolver.ts | 12 ++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/amazonq/src/lsp/lspInstaller.ts b/packages/amazonq/src/lsp/lspInstaller.ts index 6374e609ec0..72fa091f027 100644 --- a/packages/amazonq/src/lsp/lspInstaller.ts +++ b/packages/amazonq/src/lsp/lspInstaller.ts @@ -40,4 +40,6 @@ export class AmazonQLspInstaller extends BaseLspInstaller.BaseLspInstaller< ui: path.join(assetDirectory, 'clients/amazonq-ui.js'), } } + + protected override downloadMessageOverride: string | undefined = 'Updating Amazon Q plugin' } diff --git a/packages/core/src/shared/lsp/baseLspInstaller.ts b/packages/core/src/shared/lsp/baseLspInstaller.ts index d130b75f339..7388ca32f80 100644 --- a/packages/core/src/shared/lsp/baseLspInstaller.ts +++ b/packages/core/src/shared/lsp/baseLspInstaller.ts @@ -44,7 +44,8 @@ export abstract class BaseLspInstaller protected abstract resourcePaths(assetDirectory?: string): T } diff --git a/packages/core/src/shared/lsp/lspResolver.ts b/packages/core/src/shared/lsp/lspResolver.ts index ba51030e348..0baa9f89730 100644 --- a/packages/core/src/shared/lsp/lspResolver.ts +++ b/packages/core/src/shared/lsp/lspResolver.ts @@ -23,12 +23,20 @@ import vscode from 'vscode' const remoteDownloadTimeout = oneMinute * 30 export class LanguageServerResolver { + private readonly downloadMessage: string + constructor( private readonly manifest: Manifest, private readonly lsName: string, private readonly versionRange: semver.Range, + /** + * Custom message to show user when downloading, if undefined it will use the default. + */ + downloadMessage?: string, private readonly _defaultDownloadFolder?: string - ) {} + ) { + this.downloadMessage = downloadMessage ?? `Updating '${this.lsName}' language server` + } /** * Downloads and sets up the Language Server, attempting different locations in order: @@ -109,7 +117,7 @@ export class LanguageServerResolver { const timeout = new Timeout(remoteDownloadTimeout) void showProgressWithTimeout( { - title: `Downloading '${this.lsName}' language server`, + title: this.downloadMessage, location: vscode.ProgressLocation.Notification, cancellable: false, }, From db673c9b74b36591bb5642b3da7d4bc7ae2afaf4 Mon Sep 17 00:00:00 2001 From: Hweinstock <42325418+Hweinstock@users.noreply.github.com> Date: Mon, 28 Apr 2025 18:11:17 -0400 Subject: [PATCH 56/71] feat(amazonq): sync lsp logging with local configuration. (#7186) ## Problem Same problem as https://github.com/aws/aws-toolkit-vscode/pull/7172 ## Solution - listen to logLevel change events, and forward them to LSP. - pass initial logLevel to the LSP as well. - This requires mapping the local levels to the Flare Levels. This is done with the following: ``` export const lspLogLevelMapping: Map = new Map([ [vscode.LogLevel.Error, 'error'], [vscode.LogLevel.Warning, 'warn'], [vscode.LogLevel.Info, 'info'], [vscode.LogLevel.Debug, 'log'], [vscode.LogLevel.Trace, 'debug'], [vscode.LogLevel.Off, 'error'], // TODO: once the language server supports a no-log setting, we can map to that. ]) ``` ## Notes - Because of this mapping, it means that to enabled 'debug' logs in Flare, we set to 'trace' in VSC which can be confusing for contributors. --- - 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. --- packages/amazonq/src/lsp/chat/activation.ts | 39 +++++++--- packages/amazonq/src/lsp/client.ts | 81 +++++++++++--------- packages/amazonq/src/lsp/config.ts | 30 +++++++- packages/core/src/shared/extensionGlobals.ts | 4 +- packages/core/src/shared/logger/logger.ts | 5 -- 5 files changed, 105 insertions(+), 54 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/activation.ts b/packages/amazonq/src/lsp/chat/activation.ts index 33795219bff..9dd1d31c3de 100644 --- a/packages/amazonq/src/lsp/chat/activation.ts +++ b/packages/amazonq/src/lsp/chat/activation.ts @@ -85,6 +85,12 @@ export async function activate(languageClient: LanguageClient, encryptionKey: Bu type: 'customization', customization: undefinedIfEmpty(getSelectedCustomization().arn), }) + }), + globals.logOutputChannel.onDidChangeLogLevel((logLevel) => { + getLogger('amazonqLsp').info(`Local log level changed to ${logLevel}, notifying LSP`) + void pushConfigUpdate(languageClient, { + type: 'logLevel', + }) }) ) } @@ -98,16 +104,24 @@ export async function activate(languageClient: LanguageClient, encryptionKey: Bu * push the given config. */ async function pushConfigUpdate(client: LanguageClient, config: QConfigs) { - if (config.type === 'profile') { - await client.sendRequest(updateConfigurationRequestType.method, { - section: 'aws.q', - settings: { profileArn: config.profileArn }, - }) - } else if (config.type === 'customization') { - client.sendNotification(DidChangeConfigurationNotification.type.method, { - section: 'aws.q', - settings: { customization: config.customization }, - }) + switch (config.type) { + case 'profile': + await client.sendRequest(updateConfigurationRequestType.method, { + section: 'aws.q', + settings: { profileArn: config.profileArn }, + }) + break + case 'customization': + client.sendNotification(DidChangeConfigurationNotification.type.method, { + section: 'aws.q', + settings: { customization: config.customization }, + }) + break + case 'logLevel': + client.sendNotification(DidChangeConfigurationNotification.type.method, { + section: 'aws.logLevel', + }) + break } } type ProfileConfig = { @@ -118,4 +132,7 @@ type CustomizationConfig = { type: 'customization' customization: string | undefined } -type QConfigs = ProfileConfig | CustomizationConfig +type LogLevelConfig = { + type: 'logLevel' +} +type QConfigs = ProfileConfig | CustomizationConfig | LogLevelConfig diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index b198aabfd6f..aa1c1a8184f 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -36,6 +36,7 @@ import { } from 'aws-core-vscode/shared' import { activate } from './chat/activation' import { AmazonQResourcePaths } from './lspInstaller' +import { ConfigSection, isValidConfigSection, toAmazonQLSPLogLevel } from './config' const localize = nls.loadMessageBundle() const logger = getLogger('amazonqLsp.lspClient') @@ -80,42 +81,11 @@ export async function startLanguageServer( */ configuration: async (params, token, next) => { const config = await next(params, token) - if (params.items[0].section === 'aws.q') { - const customization = undefinedIfEmpty(getSelectedCustomization().arn) - /** - * IMPORTANT: This object is parsed by the following code in the language server, **so - * it must match that expected shape**. - * https://github.com/aws/language-servers/blob/1d2ca018f2248106690438b860d40a7ee67ac728/server/aws-lsp-codewhisperer/src/shared/amazonQServiceManager/configurationUtils.ts#L114 - */ - return [ - { - customization, - optOutTelemetry: getOptOutPreference() === 'OPTOUT', - projectContext: { - // TODO: we might need another setting to control the actual indexing - enableLocalIndexing: true, - enableGpuAcceleration: CodeWhispererSettings.instance.isLocalIndexGPUEnabled(), - indexWorkerThreads: CodeWhispererSettings.instance.getIndexWorkerThreads(), - localIndexing: { - ignoreFilePatterns: CodeWhispererSettings.instance.getIndexIgnoreFilePatterns(), - maxFileSizeMB: CodeWhispererSettings.instance.getMaxIndexFileSize(), - maxIndexSizeMB: CodeWhispererSettings.instance.getMaxIndexSize(), - indexCacheDirPath: CodeWhispererSettings.instance.getIndexCacheDirPath(), - }, - }, - }, - ] + const section = params.items[0].section + if (!isValidConfigSection(section)) { + return config } - if (params.items[0].section === 'aws.codeWhisperer') { - return [ - { - includeSuggestionsWithCodeReferences: - CodeWhispererSettings.instance.isSuggestionsWithCodeReferencesEnabled(), - shareCodeWhispererContentWithAWS: !CodeWhispererSettings.instance.isOptoutEnabled(), - }, - ] - } - return config + return getConfigSection(section) }, }, }, @@ -139,6 +109,7 @@ export async function startLanguageServer( showSaveFileDialog: true, }, }, + logLevel: toAmazonQLSPLogLevel(globals.logOutputChannel.logLevel), }, credentials: { providesBearerToken: true, @@ -296,3 +267,43 @@ function onServerRestartHandler(client: LanguageClient, auth: AmazonQLspAuth) { await auth.refreshConnection(true) }) } + +function getConfigSection(section: ConfigSection) { + getLogger('amazonqLsp').debug('Fetching config section %s for language server', section) + switch (section) { + case 'aws.q': + /** + * IMPORTANT: This object is parsed by the following code in the language server, **so + * it must match that expected shape**. + * https://github.com/aws/language-servers/blob/1d2ca018f2248106690438b860d40a7ee67ac728/server/aws-lsp-codewhisperer/src/shared/amazonQServiceManager/configurationUtils.ts#L114 + */ + return [ + { + customization: undefinedIfEmpty(getSelectedCustomization().arn), + optOutTelemetry: getOptOutPreference() === 'OPTOUT', + projectContext: { + // TODO: we might need another setting to control the actual indexing + enableLocalIndexing: true, + enableGpuAcceleration: CodeWhispererSettings.instance.isLocalIndexGPUEnabled(), + indexWorkerThreads: CodeWhispererSettings.instance.getIndexWorkerThreads(), + localIndexing: { + ignoreFilePatterns: CodeWhispererSettings.instance.getIndexIgnoreFilePatterns(), + maxFileSizeMB: CodeWhispererSettings.instance.getMaxIndexFileSize(), + maxIndexSizeMB: CodeWhispererSettings.instance.getMaxIndexSize(), + indexCacheDirPath: CodeWhispererSettings.instance.getIndexCacheDirPath(), + }, + }, + }, + ] + case 'aws.codeWhisperer': + return [ + { + includeSuggestionsWithCodeReferences: + CodeWhispererSettings.instance.isSuggestionsWithCodeReferencesEnabled(), + shareCodeWhispererContentWithAWS: !CodeWhispererSettings.instance.isOptoutEnabled(), + }, + ] + case 'aws.logLevel': + return [toAmazonQLSPLogLevel(globals.logOutputChannel.logLevel)] + } +} diff --git a/packages/amazonq/src/lsp/config.ts b/packages/amazonq/src/lsp/config.ts index 62bba1ac93d..c9c9b0df5ac 100644 --- a/packages/amazonq/src/lsp/config.ts +++ b/packages/amazonq/src/lsp/config.ts @@ -2,7 +2,7 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ - +import * as vscode from 'vscode' import { DevSettings, getServiceEnvVarConfig } from 'aws-core-vscode/shared' import { LspConfig } from 'aws-core-vscode/amazonq' @@ -10,6 +10,26 @@ export interface ExtendedAmazonQLSPConfig extends LspConfig { ui?: string } +// Taken from language server runtimes since they are not exported: +// https://github.com/aws/language-server-runtimes/blob/eae85672c345d8adaf4c8cbd741260b8a59750c4/runtimes/runtimes/util/loggingUtil.ts#L4-L10 +const validLspLogLevels = ['error', 'warn', 'info', 'log', 'debug'] as const +export type LspLogLevel = (typeof validLspLogLevels)[number] +const lspLogLevelMapping: Map = new Map([ + [vscode.LogLevel.Error, 'error'], + [vscode.LogLevel.Warning, 'warn'], + [vscode.LogLevel.Info, 'info'], + [vscode.LogLevel.Debug, 'log'], + [vscode.LogLevel.Trace, 'debug'], + [vscode.LogLevel.Off, 'error'], // TODO: once the language server supports a no-log setting, we can map to that. +]) + +const configSections = ['aws.q', 'aws.codeWhisperer', 'aws.logLevel'] as const +export type ConfigSection = (typeof configSections)[number] + +export function isValidConfigSection(section: unknown): section is ConfigSection { + return typeof section === 'string' && configSections.includes(section as ConfigSection) +} + export const defaultAmazonQLspConfig: ExtendedAmazonQLSPConfig = { manifestUrl: 'https://d3akiidp1wvqyg.cloudfront.net/qAgenticChatServer/0/manifest.json', // TODO swap this back supportedVersions: '*', // TODO swap this back @@ -26,3 +46,11 @@ export function getAmazonQLspConfig(): ExtendedAmazonQLSPConfig { ...getServiceEnvVarConfig('amazonqLsp', Object.keys(defaultAmazonQLspConfig)), } } +/** + * The language server logging levels do not directly match those used in VSC. Therefore, we must perform a mapping defined by {@link lspLogLevelMapping} + * @param logLevel vscode log level (0-5) + * @returns language server log level + */ +export function toAmazonQLSPLogLevel(logLevel: vscode.LogLevel): LspLogLevel { + return lspLogLevelMapping.get(logLevel) ?? 'info' +} diff --git a/packages/core/src/shared/extensionGlobals.ts b/packages/core/src/shared/extensionGlobals.ts index e0eca894d7e..6e495339de9 100644 --- a/packages/core/src/shared/extensionGlobals.ts +++ b/packages/core/src/shared/extensionGlobals.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { ExtensionContext, OutputChannel } from 'vscode' +import { ExtensionContext, LogOutputChannel, OutputChannel } from 'vscode' import { LoginManager } from '../auth/deprecated/loginManager' import { AwsResourceManager } from '../dynamicResources/awsResourceManager' import { AWSClientBuilder } from './awsClientBuilder' @@ -191,7 +191,7 @@ export interface ToolkitGlobals { /** * Log messages. Use `outputChannel` for application messages. */ - logOutputChannel: OutputChannel + logOutputChannel: LogOutputChannel loginManager: LoginManager awsContextCommands: AwsContextCommands awsContext: AwsContext diff --git a/packages/core/src/shared/logger/logger.ts b/packages/core/src/shared/logger/logger.ts index eac564b9c35..85df7b4e1f8 100644 --- a/packages/core/src/shared/logger/logger.ts +++ b/packages/core/src/shared/logger/logger.ts @@ -105,11 +105,6 @@ const logLevels = new Map([ export type LogLevel = 'error' | 'warn' | 'info' | 'verbose' | 'debug' export function fromVscodeLogLevel(logLevel: vscode.LogLevel): LogLevel { - if (!vscode.LogLevel) { - // vscode version <= 1.73 - return 'info' - } - switch (logLevel) { case vscode.LogLevel.Trace: case vscode.LogLevel.Debug: From 6dbb21e50e539c5973586714295e3ce066b030ef Mon Sep 17 00:00:00 2001 From: Zoe Lin <60411978+zixlin7@users.noreply.github.com> Date: Mon, 28 Apr 2025 19:24:44 -0700 Subject: [PATCH 57/71] fix(amazonq): fix extension name in lsp initialization (#7189) ## Problem the extension name doesn't match what flare expects: https://github.com/aws/language-servers/blob/main/server/aws-lsp-codewhisperer/src/shared/telemetryUtils.ts#L50 ## Solution update it --- - 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. --- packages/amazonq/src/lsp/client.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index aa1c1a8184f..23633f15048 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -23,7 +23,6 @@ import { import { AuthUtil, CodeWhispererSettings, getSelectedCustomization } from 'aws-core-vscode/codewhisperer' import { Settings, - oidcClientName, createServerOptions, globals, Experiments, @@ -95,7 +94,7 @@ export async function startLanguageServer( name: env.appName, version: version, extension: { - name: oidcClientName(), + name: 'AmazonQ-For-VSCode', version: '0.0.1', }, clientId: crypto.randomUUID(), From 8f3fb4413ad698c239cc31c987ee97132b13ed0d Mon Sep 17 00:00:00 2001 From: Zoe Lin <60411978+zixlin7@users.noreply.github.com> Date: Mon, 28 Apr 2025 19:55:22 -0700 Subject: [PATCH 58/71] fix(amazonq): type error for workspaceIndexCacheDirPath (#7191) ## Problem set default to empty string instead of undefined for workspaceIndexCacheDirPath ## Solution --- - 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. --- packages/core/src/codewhisperer/util/codewhispererSettings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/codewhisperer/util/codewhispererSettings.ts b/packages/core/src/codewhisperer/util/codewhispererSettings.ts index 4c30c0df467..80f5d1f2a0d 100644 --- a/packages/core/src/codewhisperer/util/codewhispererSettings.ts +++ b/packages/core/src/codewhisperer/util/codewhispererSettings.ts @@ -67,7 +67,7 @@ export class CodeWhispererSettings extends fromExtensionManifest('amazonQ', desc } public getIndexCacheDirPath(): string { - return this.get('workspaceIndexCacheDirPath', undefined) + return this.get('workspaceIndexCacheDirPath', '') } public getIndexIgnoreFilePatterns(): string[] { From b60036b6c2ed8211692d8d267b3f45a5a9c41f99 Mon Sep 17 00:00:00 2001 From: Hweinstock <42325418+Hweinstock@users.noreply.github.com> Date: Mon, 28 Apr 2025 23:15:42 -0400 Subject: [PATCH 59/71] fix(amazonq): retry LSP token refresh on recoverable errors only. (#7192) ## Problem Some users were having invalid bearer token exceptions when making chat requests through agentic chat. This highlights an issue in how we sync the token. Originally, we thought this was because of a race condition. We check the token every 10 seconds for changes, and if its expired, refresh it and send it to the language server. However, that still leaves a 10 second gap where the language server could use an expired token before we update it. However, we add a buffer of one minute to our `isExpired` check here: https://github.com/aws/aws-toolkit-vscode/blob/db673c9b74b36591bb5642b3da7d4bc7ae2afaf4/packages/core/src/auth/sso/model.ts#L160 Therefore, this causes the token to expire a minute early, meaning there is a full minute, where our checks should detect the expired token and refresh it both locally and on the language server. However, they don't because the checks aren't actually being made. This is because of how we handle token refresh errors. Note the following behavior: - if refresh throws a recoverable error, we throw it. See [here](https://github.com/aws/aws-toolkit-vscode/blob/6dbb21e50e539c5973586714295e3ce066b030ef/packages/core/src/auth/auth.ts#L856-L878). - if refresh throws a non-recoverable error we invalidate the connection. see [here](https://github.com/aws/aws-toolkit-vscode/blob/6dbb21e50e539c5973586714295e3ce066b030ef/packages/core/src/auth/auth.ts#L893-L948). The current `refreshConnection` logic doesn't work with this because we continuously try to refresh until it throws an error. However, based on the behavior above, we do want to retry on refresh errors since that means the error is recoverable! Additionally, we don't want to retry when token refreshes result in an invalid connection because those are nonrecoverable errors. ## Solution - Refactor our token refreshes to log errors thrown and continue to retry (since these are implicitly recoverable errors). - Avoid refreshing when the connection state is invalid (since this implies an unrecoverable error). ## Notes - Flare auth can't come soon enough. This behavior is not obvious to a consumer, and leads to bugs like this. - debugged w/ @nkomonen-amazon --- - 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. --- packages/amazonq/src/lsp/auth.ts | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/amazonq/src/lsp/auth.ts b/packages/amazonq/src/lsp/auth.ts index 6a0953c98ab..816c4b09ab0 100644 --- a/packages/amazonq/src/lsp/auth.ts +++ b/packages/amazonq/src/lsp/auth.ts @@ -66,20 +66,29 @@ export const notificationTypes = { * Facade over our VSCode Auth that does crud operations on the language server auth */ export class AmazonQLspAuth { - constructor(private readonly client: LanguageClient) {} + #logErrorIfChanged = onceChanged((s) => getLogger('amazonqLsp').error(s)) + constructor( + private readonly client: LanguageClient, + private readonly authUtil: AuthUtil = AuthUtil.instance + ) {} /** * @param force bypass memoization, and forcefully update the bearer token */ async refreshConnection(force: boolean = false) { - const activeConnection = AuthUtil.instance.auth.activeConnection - if (activeConnection?.type === 'sso') { + const activeConnection = this.authUtil.auth.activeConnection + if (activeConnection?.state === 'valid' && activeConnection?.type === 'sso') { // send the token to the language server - const token = await AuthUtil.instance.getBearerToken() + const token = await this.authUtil.getBearerToken() await (force ? this._updateBearerToken(token) : this.updateBearerToken(token)) } } + async logRefreshError(e: unknown) { + const err = e as Error + this.#logErrorIfChanged(`Unable to update bearer token: ${err.name}:${err.message}`) + } + public updateBearerToken = onceChanged(this._updateBearerToken.bind(this)) private async _updateBearerToken(token: string) { const request = await this.createUpdateCredentialsRequest({ @@ -93,10 +102,7 @@ export class AmazonQLspAuth { public startTokenRefreshInterval(pollingTime: number = oneMinute / 2) { const interval = setInterval(async () => { - await this.refreshConnection().catch((e) => { - getLogger('amazonqLsp').error('Unable to update bearer token: %s', (e as Error).message) - clearInterval(interval) - }) + await this.refreshConnection().catch((e) => this.logRefreshError(e)) }, pollingTime) return interval } From f1ede423b97fdca1edc032ff438b5987becb09d4 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Tue, 29 Apr 2025 08:01:55 -0400 Subject: [PATCH 60/71] fix(amazonq): open review tab for generate tests (#7195) ## Problem using the generate tests right click command won't work because a new tab never gets created, causing a "no more tabs available" warning ## Solution If we're using the right click -> generate tests command AND there isn't a /test tab open then create a new tab --- - 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. --- .../src/amazonq/webview/ui/quickActions/handler.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/core/src/amazonq/webview/ui/quickActions/handler.ts b/packages/core/src/amazonq/webview/ui/quickActions/handler.ts index d9572e13728..b492f939e11 100644 --- a/packages/core/src/amazonq/webview/ui/quickActions/handler.ts +++ b/packages/core/src/amazonq/webview/ui/quickActions/handler.ts @@ -155,7 +155,7 @@ export class QuickActionHandler { } } - private handleTestCommand(chatPrompt: ChatPrompt, tabID: string, eventId: string | undefined) { + private handleTestCommand(chatPrompt: ChatPrompt, tabID: string | undefined, eventId: string | undefined) { if (!this.isTestEnabled || !this.mynahUI) { return } @@ -169,6 +169,15 @@ export class QuickActionHandler { return } + /** + * right click -> generate test has no tab id + * we have to manually create one if a testgen tab + * wasn't previously created + */ + if (!tabID) { + tabID = this.mynahUI.updateStore('', {}) + } + // if there is no test tab, open a new one const affectedTabId: string | undefined = this.addTab(tabID) From 907c784f46bdf25f468e8eb0ede6f41297511d7e Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Tue, 29 Apr 2025 10:32:45 -0400 Subject: [PATCH 61/71] fix(amazonq): explain issue fails (#7194) ## Problem - Explain issue from security scan hasn't been hooked up when moving to flare ## Solution - use sendToPrompt from flare to automatically submit an "explain message". This message contains a prompt that gets shown to the user and an escaped prompt that gets sent to the backend - text/formatting for uiMessage and contextMessage were taken from codewhisperer chat --- - 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. --- packages/amazonq/src/lsp/chat/commands.ts | 41 +++++++++++++++++++ .../commands/registerCommands.ts | 1 - 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/chat/commands.ts b/packages/amazonq/src/lsp/chat/commands.ts index 8cdd33cafe2..b24ec5f9bc8 100644 --- a/packages/amazonq/src/lsp/chat/commands.ts +++ b/packages/amazonq/src/lsp/chat/commands.ts @@ -6,6 +6,8 @@ import { Commands, globals } from 'aws-core-vscode/shared' import { window } from 'vscode' import { AmazonQChatViewProvider } from './webviewProvider' +import { CodeScanIssue } from 'aws-core-vscode/codewhisperer' +import { EditorContextExtractor } from 'aws-core-vscode/codewhispererChat' /** * TODO: Re-enable these once we can figure out which path they're going to live in @@ -17,6 +19,45 @@ export function registerCommands(provider: AmazonQChatViewProvider) { registerGenericCommand('aws.amazonq.refactorCode', 'Refactor', provider), registerGenericCommand('aws.amazonq.fixCode', 'Fix', provider), registerGenericCommand('aws.amazonq.optimizeCode', 'Optimize', provider), + Commands.register('aws.amazonq.explainIssue', async (issue: CodeScanIssue) => { + void focusAmazonQPanel().then(async () => { + const editorContextExtractor = new EditorContextExtractor() + const extractedContext = await editorContextExtractor.extractContextForTrigger('ContextMenu') + const selectedCode = + extractedContext?.activeFileContext?.fileText + ?.split('\n') + .slice(issue.startLine, issue.endLine) + .join('\n') ?? '' + + // The message that gets sent to the UI + const uiMessage = [ + 'Explain the ', + issue.title, + ' issue in the following code:', + '\n```\n', + selectedCode, + '\n```', + ].join('') + + // The message that gets sent to the backend + const contextMessage = `Explain the issue "${issue.title}" (${JSON.stringify( + issue + )}) and generate code demonstrating the fix` + + void provider.webview?.postMessage({ + command: 'sendToPrompt', + params: { + selection: '', + triggerType: 'contextMenu', + prompt: { + prompt: uiMessage, // what gets sent to the user + escapedPrompt: contextMessage, // what gets sent to the backend + }, + autoSubmit: true, + }, + }) + }) + }), Commands.register('aws.amazonq.sendToPrompt', (data) => { const triggerType = getCommandTriggerType(data) const selection = getSelectedText() diff --git a/packages/core/src/codewhispererChat/commands/registerCommands.ts b/packages/core/src/codewhispererChat/commands/registerCommands.ts index 13a2db2de95..75896047e90 100644 --- a/packages/core/src/codewhispererChat/commands/registerCommands.ts +++ b/packages/core/src/codewhispererChat/commands/registerCommands.ts @@ -40,7 +40,6 @@ export function registerCommands() { /** * make these no-ops, since theres still callers that need to be deprecated */ - Commands.register('aws.amazonq.explainIssue', async (issue) => {}) Commands.register('aws.amazonq.generateUnitTests', async (data) => {}) Commands.register('aws.amazonq.updateContextCommandItems', () => {}) } From 35e16865c34de460a90975e94623c8f8ca5bee38 Mon Sep 17 00:00:00 2001 From: Nikolas Komonen <118216176+nkomonen-amazon@users.noreply.github.com> Date: Tue, 29 Apr 2025 13:05:30 -0400 Subject: [PATCH 62/71] feat(amazonq): Log attribution notice when downloading language server (#7193) ## Problem: Legal requires us to log the attribution notice when downloading the language server. We do not currently do this. ## Solution: - What our message looks like: `lsp: Installing 'AmazonQ' Language Server v0.1.0-alpha.100 to /Users/nkomonen/Library/Caches/aws/toolkits/language-servers/AmazonQ/0.1.0-alpha.100 (Attribution notice can be found at https://dhi0h88q3j9q6.cloudfront.net/6a0c7aa8-8b63-43a7-b14b-ee7594a29c9d/THIRD_PARTY_LICENSES)` - This log message is in the generic part of our LSP downloader, and will show for all LSPs downloaded. The link to the attribution notice is already part of the manifest, so we grab it from there. --- - 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. Signed-off-by: nkomonen-amazon --- packages/core/src/shared/lsp/baseLspInstaller.ts | 2 +- packages/core/src/shared/lsp/lspResolver.ts | 12 +++++++++--- packages/core/src/shared/lsp/types.ts | 4 ++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/core/src/shared/lsp/baseLspInstaller.ts b/packages/core/src/shared/lsp/baseLspInstaller.ts index 7388ca32f80..27e19df6b3a 100644 --- a/packages/core/src/shared/lsp/baseLspInstaller.ts +++ b/packages/core/src/shared/lsp/baseLspInstaller.ts @@ -41,7 +41,7 @@ export abstract class BaseLspInstaller { const timeout = await this.showDownloadProgress() try { - if (await this.downloadRemoteTargetContent(targetContents, latestVersion.serverVersion, timeout)) { + if (await this.downloadRemoteTargetContent(targetContents, latestVersion, timeout)) { return { location: 'remote', version: latestVersion.serverVersion, @@ -236,8 +236,8 @@ export class LanguageServerResolver { * true, if all of the contents were successfully downloaded and unzipped * false, if any of the contents failed to download or unzip */ - private async downloadRemoteTargetContent(contents: TargetContent[], version: string, timeout: Timeout) { - const downloadDirectory = this.getDownloadDirectory(version) + private async downloadRemoteTargetContent(contents: TargetContent[], lspVersion: LspVersion, timeout: Timeout) { + const downloadDirectory = this.getDownloadDirectory(lspVersion.serverVersion) if (!(await fs.existsDir(downloadDirectory))) { await fs.mkdir(downloadDirectory) @@ -273,6 +273,12 @@ export class LanguageServerResolver { const filesToDownload = await lspSetupStage('validate', async () => (await Promise.all(verifyTasks)).flat()) + // We were instructed by legal to show this message + const thirdPartyLicenses = lspVersion.thirdPartyLicenses + logger.info( + `Installing '${this.lsName}' Language Server v${lspVersion.serverVersion} to: ${downloadDirectory}${thirdPartyLicenses ? ` (Attribution notice can be found at ${thirdPartyLicenses})` : ''}` + ) + for (const file of filesToDownload) { await fs.writeFile(`${downloadDirectory}/${file.filename}`, file.data) } diff --git a/packages/core/src/shared/lsp/types.ts b/packages/core/src/shared/lsp/types.ts index 3cc96dbe681..1262d6e8fd1 100644 --- a/packages/core/src/shared/lsp/types.ts +++ b/packages/core/src/shared/lsp/types.ts @@ -72,6 +72,10 @@ export interface LspVersion { serverVersion: string isDelisted: boolean targets: Target[] + /** + * I'm not sure if this **always** exists (couldn't find it in the spec) + */ + thirdPartyLicenses?: string } export interface Manifest { From 7fd3bf21eba9a06abb2382fcd904e91a015c752b Mon Sep 17 00:00:00 2001 From: Zoe Lin <60411978+zixlin7@users.noreply.github.com> Date: Tue, 29 Apr 2025 10:09:46 -0700 Subject: [PATCH 63/71] fix(amazonq): stop workspace indexing in extension (#7197) ## Problem - we don't need workspace indexing on extension side anymore, the `isVectorIndexEnabled` setting controls if we build vector index used for @workspace feature, since now chat is moving to language server, the extension side workspace lsp should be only responsible for building BM25 index for inline, and not responsible for vector indexing for chat. ## Solution - stop vector indexing on extension - next step is to tie workspace index setting to language server workspace indexing, will be in next PR --- - 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. --- packages/amazonq/src/app/chat/activation.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/amazonq/src/app/chat/activation.ts b/packages/amazonq/src/app/chat/activation.ts index 11275188440..bf6b7cdc3df 100644 --- a/packages/amazonq/src/app/chat/activation.ts +++ b/packages/amazonq/src/app/chat/activation.ts @@ -18,7 +18,7 @@ export async function activate(context: ExtensionContext) { void amazonq.LspController.instance.trySetupLsp(context, { startUrl: AuthUtil.instance.startUrl, maxIndexSize: CodeWhispererSettings.instance.getMaxIndexSize(), - isVectorIndexEnabled: CodeWhispererSettings.instance.isLocalIndexEnabled(), + isVectorIndexEnabled: false, }) }, 5000) @@ -30,14 +30,7 @@ export async function activate(context: ExtensionContext) { amazonq.listCodeWhispererCommandsWalkthrough.register(), amazonq.focusAmazonQPanel.register(), amazonq.focusAmazonQPanelKeybinding.register(), - amazonq.tryChatCodeLensCommand.register(), - vscode.workspace.onDidChangeConfiguration(async (configurationChangeEvent) => { - if (configurationChangeEvent.affectsConfiguration('amazonQ.workspaceIndex')) { - if (CodeWhispererSettings.instance.isLocalIndexEnabled()) { - void setupLsp() - } - } - }) + amazonq.tryChatCodeLensCommand.register() ) Commands.register('aws.amazonq.learnMore', () => { From bf63747e1a55949274a8366e0e4d2da6489f0b05 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Tue, 29 Apr 2025 13:13:22 -0400 Subject: [PATCH 64/71] fix(amazonq): add event publisher for generateUnitTests (#7198) ## Problem `aws.amazonq.generateUnitTests` is not sending any events to /review ## Solution publish a chat message event to the /review tab to start I forgot to include these changes in https://github.com/aws/aws-toolkit-vscode/pull/7195 --- - 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. --- packages/amazonq/src/lsp/chat/commands.ts | 8 ++++++++ .../src/codewhispererChat/commands/registerCommands.ts | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/chat/commands.ts b/packages/amazonq/src/lsp/chat/commands.ts index b24ec5f9bc8..74c63592a4f 100644 --- a/packages/amazonq/src/lsp/chat/commands.ts +++ b/packages/amazonq/src/lsp/chat/commands.ts @@ -8,6 +8,7 @@ import { window } from 'vscode' import { AmazonQChatViewProvider } from './webviewProvider' import { CodeScanIssue } from 'aws-core-vscode/codewhisperer' import { EditorContextExtractor } from 'aws-core-vscode/codewhispererChat' +import { DefaultAmazonQAppInitContext } from 'aws-core-vscode/amazonq' /** * TODO: Re-enable these once we can figure out which path they're going to live in @@ -19,6 +20,13 @@ export function registerCommands(provider: AmazonQChatViewProvider) { registerGenericCommand('aws.amazonq.refactorCode', 'Refactor', provider), registerGenericCommand('aws.amazonq.fixCode', 'Fix', provider), registerGenericCommand('aws.amazonq.optimizeCode', 'Optimize', provider), + Commands.register('aws.amazonq.generateUnitTests', async () => { + DefaultAmazonQAppInitContext.instance.getAppsToWebViewMessagePublisher().publish({ + sender: 'testChat', + command: 'test', + type: 'chatMessage', + }) + }), Commands.register('aws.amazonq.explainIssue', async (issue: CodeScanIssue) => { void focusAmazonQPanel().then(async () => { const editorContextExtractor = new EditorContextExtractor() diff --git a/packages/core/src/codewhispererChat/commands/registerCommands.ts b/packages/core/src/codewhispererChat/commands/registerCommands.ts index 75896047e90..8ec1f7ac759 100644 --- a/packages/core/src/codewhispererChat/commands/registerCommands.ts +++ b/packages/core/src/codewhispererChat/commands/registerCommands.ts @@ -40,7 +40,6 @@ export function registerCommands() { /** * make these no-ops, since theres still callers that need to be deprecated */ - Commands.register('aws.amazonq.generateUnitTests', async (data) => {}) Commands.register('aws.amazonq.updateContextCommandItems', () => {}) } From 574990ef0f984f101ec3192d931e01059e6e1c5e Mon Sep 17 00:00:00 2001 From: Nikolas Komonen <118216176+nkomonen-amazon@users.noreply.github.com> Date: Tue, 29 Apr 2025 13:16:38 -0400 Subject: [PATCH 65/71] fix(amazonq): re-enable developer profile fetching in flare (#7190) Reverts previous PR #7118 --- - 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. Signed-off-by: nkomonen-amazon --- packages/amazonq/src/lsp/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index 23633f15048..0065b38af26 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -101,7 +101,7 @@ export async function startLanguageServer( }, awsClientCapabilities: { q: { - developerProfiles: false, + developerProfiles: true, }, window: { notifications: true, From f07432b449e30538a22a622c6070a93a5b6163bb Mon Sep 17 00:00:00 2001 From: Zoe Lin <60411978+zixlin7@users.noreply.github.com> Date: Tue, 29 Apr 2025 11:23:32 -0700 Subject: [PATCH 66/71] fix(amazonq): tie enableLocalIndex back to user setting (#7200) ## Problem With https://github.com/aws/language-servers/pull/1201 we can now use userSetting to control vector indexing ## Solution --- - 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. --- packages/amazonq/src/lsp/client.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/amazonq/src/lsp/client.ts b/packages/amazonq/src/lsp/client.ts index 0065b38af26..d813370cb0b 100644 --- a/packages/amazonq/src/lsp/client.ts +++ b/packages/amazonq/src/lsp/client.ts @@ -281,8 +281,7 @@ function getConfigSection(section: ConfigSection) { customization: undefinedIfEmpty(getSelectedCustomization().arn), optOutTelemetry: getOptOutPreference() === 'OPTOUT', projectContext: { - // TODO: we might need another setting to control the actual indexing - enableLocalIndexing: true, + enableLocalIndexing: CodeWhispererSettings.instance.isLocalIndexEnabled(), enableGpuAcceleration: CodeWhispererSettings.instance.isLocalIndexGPUEnabled(), indexWorkerThreads: CodeWhispererSettings.instance.getIndexWorkerThreads(), localIndexing: { From 00974f30064a1367c87f1758555d94503cc1d432 Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 30 Apr 2025 08:19:06 -0400 Subject: [PATCH 67/71] feat(amazonq): add reference log for chat messages (#7206) ## Problem Chat results are never getting added to the reference tracker ## Solution If code references are available, add them to the reference tracker --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 14 +++++++++++--- packages/core/src/amazonq/commons/model.ts | 10 ++++++++++ packages/core/src/amazonq/index.ts | 2 +- packages/core/src/amazonqDoc/session/session.ts | 2 +- packages/core/src/amazonqFeatureDev/constants.ts | 8 -------- .../core/src/amazonqFeatureDev/session/session.ts | 4 +++- 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 6d2d9947dde..37acb43e7b9 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -57,13 +57,14 @@ import * as vscode from 'vscode' import { Disposable, LanguageClient, Position, TextDocumentIdentifier } from 'vscode-languageclient' import * as jose from 'jose' import { AmazonQChatViewProvider } from './webviewProvider' -import { AuthUtil } from 'aws-core-vscode/codewhisperer' +import { AuthUtil, ReferenceLogViewProvider } from 'aws-core-vscode/codewhisperer' import { amazonQDiffScheme, AmazonQPromptSettings, messages, openUrl } from 'aws-core-vscode/shared' import { DefaultAmazonQAppInitContext, messageDispatcher, EditorContentController, ViewDiffMessage, + referenceLogText, } from 'aws-core-vscode/amazonq' import { telemetry, TelemetryBase } from 'aws-core-vscode/telemetry' import { isValidResponseError } from './error' @@ -531,13 +532,17 @@ async function handlePartialResult( tabId: tabId, }) } + + for (const ref of decryptedMessage.codeReference ?? []) { + ReferenceLogViewProvider.instance.addReferenceLog(referenceLogText(ref)) + } } /** * Decodes the final chat responses from the language server before sending it to mynah UI. * Once this is called the answer response is finished */ -async function handleCompleteResult( +async function handleCompleteResult( result: string | T, encryptionKey: Buffer | undefined, provider: AmazonQChatViewProvider, @@ -545,12 +550,15 @@ async function handleCompleteResult( disposable: Disposable ) { const decryptedMessage = - typeof result === 'string' && encryptionKey ? await decodeRequest(result, encryptionKey) : result + typeof result === 'string' && encryptionKey ? await decodeRequest(result, encryptionKey) : (result as T) void provider.webview?.postMessage({ command: chatRequestType.method, params: decryptedMessage, tabId: tabId, }) + for (const ref of decryptedMessage.codeReference ?? []) { + ReferenceLogViewProvider.instance.addReferenceLog(referenceLogText(ref)) + } disposable.dispose() } diff --git a/packages/core/src/amazonq/commons/model.ts b/packages/core/src/amazonq/commons/model.ts index 766c5160262..3c5b228d2fc 100644 --- a/packages/core/src/amazonq/commons/model.ts +++ b/packages/core/src/amazonq/commons/model.ts @@ -3,6 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +import { LicenseUtil } from '../../codewhisperer/util/licenseUtil' +import { CodeReference } from '../../codewhispererChat/view/connector/connector' + // Currently importing ChatItemType in Mynah UI from the vscode side causes an error // TODO remove this once the import stops failing export type ChatItemType = @@ -13,3 +16,10 @@ export type ChatItemType = | 'answer-stream' | 'answer-part' | 'code-result' + +export const referenceLogText = (reference: CodeReference) => + `[${new Date().toLocaleString()}] Accepted recommendation from Amazon Q. Code provided with reference under ${reference.licenseName} license from repository ${reference.repository}.

` diff --git a/packages/core/src/amazonq/index.ts b/packages/core/src/amazonq/index.ts index 168915a8434..14c0e4a59a0 100644 --- a/packages/core/src/amazonq/index.ts +++ b/packages/core/src/amazonq/index.ts @@ -35,7 +35,7 @@ export { computeDiff, } from './commons/diff' export { AuthFollowUpType, AuthMessageDataMap } from './auth/model' -export { ChatItemType } from './commons/model' +export { ChatItemType, referenceLogText } from './commons/model' export { ExtensionMessage } from '../amazonq/webview/ui/commands' export { CodeReference } from '../codewhispererChat/view/connector/connector' export { extractAuthFollowUp } from './util/authUtils' diff --git a/packages/core/src/amazonqDoc/session/session.ts b/packages/core/src/amazonqDoc/session/session.ts index b52474ffdd4..e3eb29d6d32 100644 --- a/packages/core/src/amazonqDoc/session/session.ts +++ b/packages/core/src/amazonqDoc/session/session.ts @@ -15,7 +15,7 @@ import { TelemetryHelper } from '../../amazonq/util/telemetryHelper' import { ConversationNotStartedState } from '../../amazonqFeatureDev/session/sessionState' import { logWithConversationId } from '../../amazonqFeatureDev/userFacingText' import { ConversationIdNotFoundError, IllegalStateError } from '../../amazonqFeatureDev/errors' -import { referenceLogText } from '../../amazonqFeatureDev/constants' +import { referenceLogText } from '../../amazonq/commons/model' import { DocInteractionType, DocV2AcceptanceEvent, diff --git a/packages/core/src/amazonqFeatureDev/constants.ts b/packages/core/src/amazonqFeatureDev/constants.ts index 4bc3ca1fdb2..78cae972cc3 100644 --- a/packages/core/src/amazonqFeatureDev/constants.ts +++ b/packages/core/src/amazonqFeatureDev/constants.ts @@ -26,14 +26,6 @@ export const clientErrorMessages = [ 'The folder you chose did not contain any source files in a supported language. Choose another folder and try again.', ] -// License text that's used in codewhisperer reference log -export const referenceLogText = (reference: CodeReference) => - `[${new Date().toLocaleString()}] Accepted recommendation from Amazon Q. Code provided with reference under ${reference.licenseName} license from repository ${reference.repository}.

` - // License text that's used in the file view export const licenseText = (reference: CodeReference) => `${ diff --git a/packages/core/src/amazonqFeatureDev/session/session.ts b/packages/core/src/amazonqFeatureDev/session/session.ts index d2b174f0f6f..c1fc81a4701 100644 --- a/packages/core/src/amazonqFeatureDev/session/session.ts +++ b/packages/core/src/amazonqFeatureDev/session/session.ts @@ -15,7 +15,7 @@ import { UpdateFilesPathsParams, } from '../../amazonq/commons/types' import { ContentLengthError, ConversationIdNotFoundError, IllegalStateError } from '../errors' -import { featureDevChat, referenceLogText, featureDevScheme } from '../constants' +import { featureDevChat, featureDevScheme } from '../constants' import fs from '../../shared/fs/fs' import { FeatureDevClient } from '../client/featureDev' import { codeGenRetryLimit } from '../limits' @@ -34,6 +34,8 @@ import { FollowUpTypes } from '../../amazonq/commons/types' import { SessionConfig } from '../../amazonq/commons/session/sessionConfigFactory' import { Messenger } from '../../amazonq/commons/connector/baseMessenger' import { ContentLengthError as CommonContentLengthError } from '../../shared/errors' +import { referenceLogText } from '../../amazonq/commons/model' + export class Session { private _state?: SessionState | Omit private task: string = '' From d3db47aff9f1aebd531326ab57d2a23d7ad2b0cc Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 30 Apr 2025 09:26:57 -0400 Subject: [PATCH 68/71] fix(amazonq): enable agentic mode (#7199) ## Problem In [this PR](https://github.com/aws/language-servers/pull/1172/files#diff-3ef0f209f2cb39ae2f8b1c622f885a33cbf797f1882dfb4b22fb4cb17bcf901aR381) they're going to add a config setting for indicating we're in agentic mode ## Solution always enable it so we see the agentic UI --- - 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. --- packages/amazonq/src/lsp/chat/webviewProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amazonq/src/lsp/chat/webviewProvider.ts b/packages/amazonq/src/lsp/chat/webviewProvider.ts index 6fac5a4afcf..1a513f1df3f 100644 --- a/packages/amazonq/src/lsp/chat/webviewProvider.ts +++ b/packages/amazonq/src/lsp/chat/webviewProvider.ts @@ -139,7 +139,7 @@ export class AmazonQChatViewProvider implements WebviewViewProvider { const vscodeApi = acquireVsCodeApi() const hybridChatConnector = new HybridChatAdapter(${(await AuthUtil.instance.getChatAuthState()).amazonQ === 'connected'},${featureConfigData},${welcomeCount},${disclaimerAcknowledged},${regionProfileString},${disabledCommands},${isSMUS},${isSM},vscodeApi.postMessage) const commands = [hybridChatConnector.initialQuickActions[0]] - qChat = amazonQChat.createChat(vscodeApi, {disclaimerAcknowledged: ${disclaimerAcknowledged}, pairProgrammingAcknowledged: ${pairProgrammingAcknowledged}, quickActionCommands: commands}, hybridChatConnector, ${JSON.stringify(featureConfigData)}); + qChat = amazonQChat.createChat(vscodeApi, {disclaimerAcknowledged: ${disclaimerAcknowledged}, pairProgrammingAcknowledged: ${pairProgrammingAcknowledged}, agenticMode: true, quickActionCommands: commands}, hybridChatConnector, ${JSON.stringify(featureConfigData)}); } window.addEventListener('message', (event) => { /** From e08a3bd2c27fec9bede298ec71146b5544f1370c Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 30 Apr 2025 10:03:45 -0400 Subject: [PATCH 69/71] fix(amazonq): full project scan command not working (#7207) ## Problem a tab id isn't getting created when you call `status bar` -> `full project scan with /review` causing the command to fail with "you cannot open more then 10 tabs" ## Solution create a new tab if tabId is undefined. This can only happen when agent commands are triggered via a command, since they don't know the tabId ahead of time --- - 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. --- .../src/amazonq/webview/ui/quickActions/handler.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/core/src/amazonq/webview/ui/quickActions/handler.ts b/packages/core/src/amazonq/webview/ui/quickActions/handler.ts index b492f939e11..fe124d1fc0c 100644 --- a/packages/core/src/amazonq/webview/ui/quickActions/handler.ts +++ b/packages/core/src/amazonq/webview/ui/quickActions/handler.ts @@ -107,7 +107,7 @@ export class QuickActionHandler { } } - private handleScanCommand(tabID: string, eventId: string | undefined) { + private handleScanCommand(tabID: string | undefined, eventId: string | undefined) { if (!this.isScanEnabled || !this.mynahUI) { return } @@ -126,6 +126,14 @@ export class QuickActionHandler { return } + /** + * status bar -> "full project scan is now /review" doesn't have a tab ID + * since it's called via a command so we need to manually create one + */ + if (!tabID) { + tabID = this.mynahUI.updateStore('', {}) + } + // if there is no scan tab, open a new one const affectedTabId: string | undefined = this.addTab(tabID) From db976c932ba8cb34a40a928013b902ed728eb36e Mon Sep 17 00:00:00 2001 From: Josh Pinkney <103940141+jpinkney-aws@users.noreply.github.com> Date: Wed, 30 Apr 2025 13:03:53 -0400 Subject: [PATCH 70/71] fix(amazonq): duplicate code reference in reference log (#7208) ## Problem We're currently adding the reference log on partial responses and on complete responses, causing duplicate messages ## Solution on flare side we're combining all code references into the final response, so we just need to emit once --- - 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. --- packages/amazonq/src/lsp/chat/messages.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/amazonq/src/lsp/chat/messages.ts b/packages/amazonq/src/lsp/chat/messages.ts index 37acb43e7b9..9578858b708 100644 --- a/packages/amazonq/src/lsp/chat/messages.ts +++ b/packages/amazonq/src/lsp/chat/messages.ts @@ -532,10 +532,6 @@ async function handlePartialResult( tabId: tabId, }) } - - for (const ref of decryptedMessage.codeReference ?? []) { - ReferenceLogViewProvider.instance.addReferenceLog(referenceLogText(ref)) - } } /** @@ -556,6 +552,8 @@ async function handleCompleteResult( params: decryptedMessage, tabId: tabId, }) + + // only add the reference log once the request is complete, otherwise we will get duplicate log items for (const ref of decryptedMessage.codeReference ?? []) { ReferenceLogViewProvider.instance.addReferenceLog(referenceLogText(ref)) } From 1dff0998004642aac45885bb188d8a3894981ba0 Mon Sep 17 00:00:00 2001 From: opieter-aws Date: Wed, 30 Apr 2025 22:16:54 -0400 Subject: [PATCH 71/71] feat(agentic chat): Add changelog (#7211) Add changelog for the agentic chat release --- - 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. --- .../Feature-ef539952-41de-40d0-870e-94aee31f36d3.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/amazonq/.changes/next-release/Feature-ef539952-41de-40d0-870e-94aee31f36d3.json diff --git a/packages/amazonq/.changes/next-release/Feature-ef539952-41de-40d0-870e-94aee31f36d3.json b/packages/amazonq/.changes/next-release/Feature-ef539952-41de-40d0-870e-94aee31f36d3.json new file mode 100644 index 00000000000..64aa113d435 --- /dev/null +++ b/packages/amazonq/.changes/next-release/Feature-ef539952-41de-40d0-870e-94aee31f36d3.json @@ -0,0 +1,4 @@ +{ + "type": "Feature", + "description": "Agentic coding experience: Amazon Q can now write code and run shell commands on your behalf" +}