diff --git a/package-lock.json b/package-lock.json
index e9418440268..4c207195030 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,6 +16,7 @@
],
"dependencies": {
"@types/node": "^22.7.5",
+ "jaro-winkler": "^0.2.8",
"vscode-nls": "^5.2.0",
"vscode-nls-dev": "^4.0.4"
},
@@ -24,6 +25,7 @@
"@playwright/browser-chromium": "^1.43.1",
"@stylistic/eslint-plugin": "^2.11.0",
"@types/he": "^1.2.3",
+ "@types/jaro-winkler": "^0.2.4",
"@types/vscode": "^1.68.0",
"@types/vscode-webview": "^1.57.1",
"@types/webpack-env": "^1.18.5",
@@ -7211,6 +7213,530 @@
"node": ">=16.0.0"
}
},
+ "node_modules/@aws-sdk/client-sfn": {
+ "version": "3.693.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.693.0.tgz",
+ "integrity": "sha512-B2K3aXGnP7eD1ITEIx4kO43l1N5OLqHdLW4AUbwoopwU5qzicc9jADrthXpGxymJI8AhJz9T2WtLmceBU2EpNg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/client-sso-oidc": "3.693.0",
+ "@aws-sdk/client-sts": "3.693.0",
+ "@aws-sdk/core": "3.693.0",
+ "@aws-sdk/credential-provider-node": "3.693.0",
+ "@aws-sdk/middleware-host-header": "3.693.0",
+ "@aws-sdk/middleware-logger": "3.693.0",
+ "@aws-sdk/middleware-recursion-detection": "3.693.0",
+ "@aws-sdk/middleware-user-agent": "3.693.0",
+ "@aws-sdk/region-config-resolver": "3.693.0",
+ "@aws-sdk/types": "3.692.0",
+ "@aws-sdk/util-endpoints": "3.693.0",
+ "@aws-sdk/util-user-agent-browser": "3.693.0",
+ "@aws-sdk/util-user-agent-node": "3.693.0",
+ "@smithy/config-resolver": "^3.0.11",
+ "@smithy/core": "^2.5.2",
+ "@smithy/fetch-http-handler": "^4.1.0",
+ "@smithy/hash-node": "^3.0.9",
+ "@smithy/invalid-dependency": "^3.0.9",
+ "@smithy/middleware-content-length": "^3.0.11",
+ "@smithy/middleware-endpoint": "^3.2.2",
+ "@smithy/middleware-retry": "^3.0.26",
+ "@smithy/middleware-serde": "^3.0.9",
+ "@smithy/middleware-stack": "^3.0.9",
+ "@smithy/node-config-provider": "^3.1.10",
+ "@smithy/node-http-handler": "^3.3.0",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/smithy-client": "^3.4.3",
+ "@smithy/types": "^3.7.0",
+ "@smithy/url-parser": "^3.0.9",
+ "@smithy/util-base64": "^3.0.0",
+ "@smithy/util-body-length-browser": "^3.0.0",
+ "@smithy/util-body-length-node": "^3.0.0",
+ "@smithy/util-defaults-mode-browser": "^3.0.26",
+ "@smithy/util-defaults-mode-node": "^3.0.26",
+ "@smithy/util-endpoints": "^2.1.5",
+ "@smithy/util-middleware": "^3.0.9",
+ "@smithy/util-retry": "^3.0.9",
+ "@smithy/util-utf8": "^3.0.0",
+ "@types/uuid": "^9.0.1",
+ "tslib": "^2.6.2",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.693.0",
+ "@aws-sdk/middleware-host-header": "3.693.0",
+ "@aws-sdk/middleware-logger": "3.693.0",
+ "@aws-sdk/middleware-recursion-detection": "3.693.0",
+ "@aws-sdk/middleware-user-agent": "3.693.0",
+ "@aws-sdk/region-config-resolver": "3.693.0",
+ "@aws-sdk/types": "3.692.0",
+ "@aws-sdk/util-endpoints": "3.693.0",
+ "@aws-sdk/util-user-agent-browser": "3.693.0",
+ "@aws-sdk/util-user-agent-node": "3.693.0",
+ "@smithy/config-resolver": "^3.0.11",
+ "@smithy/core": "^2.5.2",
+ "@smithy/fetch-http-handler": "^4.1.0",
+ "@smithy/hash-node": "^3.0.9",
+ "@smithy/invalid-dependency": "^3.0.9",
+ "@smithy/middleware-content-length": "^3.0.11",
+ "@smithy/middleware-endpoint": "^3.2.2",
+ "@smithy/middleware-retry": "^3.0.26",
+ "@smithy/middleware-serde": "^3.0.9",
+ "@smithy/middleware-stack": "^3.0.9",
+ "@smithy/node-config-provider": "^3.1.10",
+ "@smithy/node-http-handler": "^3.3.0",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/smithy-client": "^3.4.3",
+ "@smithy/types": "^3.7.0",
+ "@smithy/url-parser": "^3.0.9",
+ "@smithy/util-base64": "^3.0.0",
+ "@smithy/util-body-length-browser": "^3.0.0",
+ "@smithy/util-body-length-node": "^3.0.0",
+ "@smithy/util-defaults-mode-browser": "^3.0.26",
+ "@smithy/util-defaults-mode-node": "^3.0.26",
+ "@smithy/util-endpoints": "^2.1.5",
+ "@smithy/util-middleware": "^3.0.9",
+ "@smithy/util-retry": "^3.0.9",
+ "@smithy/util-utf8": "^3.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.693.0",
+ "@aws-sdk/credential-provider-node": "3.693.0",
+ "@aws-sdk/middleware-host-header": "3.693.0",
+ "@aws-sdk/middleware-logger": "3.693.0",
+ "@aws-sdk/middleware-recursion-detection": "3.693.0",
+ "@aws-sdk/middleware-user-agent": "3.693.0",
+ "@aws-sdk/region-config-resolver": "3.693.0",
+ "@aws-sdk/types": "3.692.0",
+ "@aws-sdk/util-endpoints": "3.693.0",
+ "@aws-sdk/util-user-agent-browser": "3.693.0",
+ "@aws-sdk/util-user-agent-node": "3.693.0",
+ "@smithy/config-resolver": "^3.0.11",
+ "@smithy/core": "^2.5.2",
+ "@smithy/fetch-http-handler": "^4.1.0",
+ "@smithy/hash-node": "^3.0.9",
+ "@smithy/invalid-dependency": "^3.0.9",
+ "@smithy/middleware-content-length": "^3.0.11",
+ "@smithy/middleware-endpoint": "^3.2.2",
+ "@smithy/middleware-retry": "^3.0.26",
+ "@smithy/middleware-serde": "^3.0.9",
+ "@smithy/middleware-stack": "^3.0.9",
+ "@smithy/node-config-provider": "^3.1.10",
+ "@smithy/node-http-handler": "^3.3.0",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/smithy-client": "^3.4.3",
+ "@smithy/types": "^3.7.0",
+ "@smithy/url-parser": "^3.0.9",
+ "@smithy/util-base64": "^3.0.0",
+ "@smithy/util-body-length-browser": "^3.0.0",
+ "@smithy/util-body-length-node": "^3.0.0",
+ "@smithy/util-defaults-mode-browser": "^3.0.26",
+ "@smithy/util-defaults-mode-node": "^3.0.26",
+ "@smithy/util-endpoints": "^2.1.5",
+ "@smithy/util-middleware": "^3.0.9",
+ "@smithy/util-retry": "^3.0.9",
+ "@smithy/util-utf8": "^3.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/client-sts": "^3.693.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/client-sso-oidc": "3.693.0",
+ "@aws-sdk/core": "3.693.0",
+ "@aws-sdk/credential-provider-node": "3.693.0",
+ "@aws-sdk/middleware-host-header": "3.693.0",
+ "@aws-sdk/middleware-logger": "3.693.0",
+ "@aws-sdk/middleware-recursion-detection": "3.693.0",
+ "@aws-sdk/middleware-user-agent": "3.693.0",
+ "@aws-sdk/region-config-resolver": "3.693.0",
+ "@aws-sdk/types": "3.692.0",
+ "@aws-sdk/util-endpoints": "3.693.0",
+ "@aws-sdk/util-user-agent-browser": "3.693.0",
+ "@aws-sdk/util-user-agent-node": "3.693.0",
+ "@smithy/config-resolver": "^3.0.11",
+ "@smithy/core": "^2.5.2",
+ "@smithy/fetch-http-handler": "^4.1.0",
+ "@smithy/hash-node": "^3.0.9",
+ "@smithy/invalid-dependency": "^3.0.9",
+ "@smithy/middleware-content-length": "^3.0.11",
+ "@smithy/middleware-endpoint": "^3.2.2",
+ "@smithy/middleware-retry": "^3.0.26",
+ "@smithy/middleware-serde": "^3.0.9",
+ "@smithy/middleware-stack": "^3.0.9",
+ "@smithy/node-config-provider": "^3.1.10",
+ "@smithy/node-http-handler": "^3.3.0",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/smithy-client": "^3.4.3",
+ "@smithy/types": "^3.7.0",
+ "@smithy/url-parser": "^3.0.9",
+ "@smithy/util-base64": "^3.0.0",
+ "@smithy/util-body-length-browser": "^3.0.0",
+ "@smithy/util-body-length-node": "^3.0.0",
+ "@smithy/util-defaults-mode-browser": "^3.0.26",
+ "@smithy/util-defaults-mode-node": "^3.0.26",
+ "@smithy/util-endpoints": "^2.1.5",
+ "@smithy/util-middleware": "^3.0.9",
+ "@smithy/util-retry": "^3.0.9",
+ "@smithy/util-utf8": "^3.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@smithy/core": "^2.5.2",
+ "@smithy/node-config-provider": "^3.1.10",
+ "@smithy/property-provider": "^3.1.9",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/signature-v4": "^4.2.2",
+ "@smithy/smithy-client": "^3.4.3",
+ "@smithy/types": "^3.7.0",
+ "@smithy/util-middleware": "^3.0.9",
+ "fast-xml-parser": "4.4.1",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-sdk/types": "3.692.0",
+ "@smithy/fetch-http-handler": "^4.1.0",
+ "@smithy/node-http-handler": "^3.3.0",
+ "@smithy/property-provider": "^3.1.9",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/smithy-client": "^3.4.3",
+ "@smithy/types": "^3.7.0",
+ "@smithy/util-stream": "^3.3.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-sdk/credential-provider-env": "3.693.0",
+ "@aws-sdk/credential-provider-http": "3.693.0",
+ "@aws-sdk/credential-provider-process": "3.693.0",
+ "@aws-sdk/credential-provider-sso": "3.693.0",
+ "@aws-sdk/credential-provider-web-identity": "3.693.0",
+ "@aws-sdk/types": "3.692.0",
+ "@smithy/credential-provider-imds": "^3.2.6",
+ "@smithy/property-provider": "^3.1.9",
+ "@smithy/shared-ini-file-loader": "^3.1.10",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/client-sts": "^3.693.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-sdk/credential-provider-http": "3.693.0",
+ "@aws-sdk/credential-provider-ini": "3.693.0",
+ "@aws-sdk/credential-provider-process": "3.693.0",
+ "@aws-sdk/credential-provider-sso": "3.693.0",
+ "@aws-sdk/credential-provider-web-identity": "3.693.0",
+ "@aws-sdk/types": "3.692.0",
+ "@smithy/credential-provider-imds": "^3.2.6",
+ "@smithy/property-provider": "^3.1.9",
+ "@smithy/shared-ini-file-loader": "^3.1.10",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-sdk/core": "3.693.0",
+ "@aws-sdk/token-providers": "3.693.0",
+ "@aws-sdk/types": "3.692.0",
+ "@smithy/property-provider": "^3.1.9",
+ "@smithy/shared-ini-file-loader": "^3.1.10",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-sdk/types": "3.692.0",
+ "@smithy/property-provider": "^3.1.9",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/client-sts": "^3.693.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-sdk/types": "3.692.0",
+ "@aws-sdk/util-endpoints": "3.693.0",
+ "@smithy/core": "^2.5.2",
+ "@smithy/protocol-http": "^4.1.6",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@smithy/node-config-provider": "^3.1.10",
+ "@smithy/types": "^3.7.0",
+ "@smithy/util-config-provider": "^3.0.0",
+ "@smithy/util-middleware": "^3.0.9",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@smithy/property-provider": "^3.1.9",
+ "@smithy/shared-ini-file-loader": "^3.1.10",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/client-sso-oidc": "^3.693.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@smithy/types": "^3.7.0",
+ "@smithy/util-endpoints": "^2.1.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@smithy/types": "^3.7.0",
+ "bowser": "^2.11.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "@aws-sdk/types": "3.692.0",
+ "@smithy/node-config-provider": "^3.1.10",
+ "@smithy/types": "^3.7.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "aws-crt": ">=1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sfn/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",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
"node_modules/@aws-sdk/client-ssm": {
"version": "3.693.0",
"license": "Apache-2.0",
@@ -13105,6 +13631,25 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/@svgdotjs/svg.js": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz",
+ "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Fuzzyma"
+ }
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.17",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
+ "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
"node_modules/@szmarczak/http-timer": {
"version": "4.0.6",
"license": "MIT",
@@ -13347,6 +13892,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/jaro-winkler": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@types/jaro-winkler/-/jaro-winkler-0.2.4.tgz",
+ "integrity": "sha512-TNVu6vL0Z3h+hYcW78IRloINA0y0MTVJ1PFVtVpBSgk+ejmaH5aVfcVghzNXZ0fa6gXe4zapNMQtMGWOJKTLig==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/js-yaml": {
"version": "4.0.5",
"dev": true,
@@ -13553,6 +14105,13 @@
"@types/node": "*"
}
},
+ "node_modules/@types/svgdom": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@types/svgdom/-/svgdom-0.1.2.tgz",
+ "integrity": "sha512-ZFwX8cDhbz6jiv3JZdMVYq8SSWHOUchChPmRoMwdIu3lz89aCu/gVK9TdR1eeb0ARQ8+5rtjUKrk1UR8hh0dhQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/tcp-port-used": {
"version": "1.0.1",
"dev": true,
@@ -15232,6 +15791,15 @@
"version": "1.1.0",
"license": "MIT"
},
+ "node_modules/brotli": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
+ "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.1.2"
+ }
+ },
"node_modules/browser-stdout": {
"version": "1.3.1",
"dev": true,
@@ -16563,6 +17131,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/dfa": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
+ "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==",
+ "license": "MIT"
+ },
"node_modules/diff": {
"version": "5.1.0",
"license": "BSD-3-Clause",
@@ -17634,7 +18208,6 @@
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
- "dev": true,
"license": "MIT"
},
"node_modules/fast-diff": {
@@ -17897,6 +18470,23 @@
}
}
},
+ "node_modules/fontkit": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz",
+ "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@swc/helpers": "^0.5.12",
+ "brotli": "^1.3.2",
+ "clone": "^2.1.2",
+ "dfa": "^1.2.0",
+ "fast-deep-equal": "^3.1.3",
+ "restructure": "^3.0.0",
+ "tiny-inflate": "^1.0.3",
+ "unicode-properties": "^1.4.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
"node_modules/for-each": {
"version": "0.3.3",
"license": "MIT",
@@ -18788,6 +19378,21 @@
"node": ">= 4"
}
},
+ "node_modules/image-size": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz",
+ "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==",
+ "license": "MIT",
+ "dependencies": {
+ "queue": "6.0.2"
+ },
+ "bin": {
+ "image-size": "bin/image-size.js"
+ },
+ "engines": {
+ "node": ">=16.x"
+ }
+ },
"node_modules/immediate": {
"version": "3.0.6",
"dev": true,
@@ -19363,6 +19968,12 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
+ "node_modules/jaro-winkler": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/jaro-winkler/-/jaro-winkler-0.2.8.tgz",
+ "integrity": "sha512-yr+mElb6dWxA1mzFu0+26njV5DWAQRNTi5pB6fFMm79zHrfAs3d0qjhe/IpZI4AHIUJkzvu5QXQRWOw2O0GQyw==",
+ "license": "MIT"
+ },
"node_modules/jest-worker": {
"version": "27.5.1",
"dev": true,
@@ -21931,6 +22542,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/queue": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
+ "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "~2.0.3"
+ }
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"dev": true,
@@ -22573,6 +23193,12 @@
"lowercase-keys": "^2.0.0"
}
},
+ "node_modules/restructure": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz",
+ "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==",
+ "license": "MIT"
+ },
"node_modules/retry": {
"version": "0.13.1",
"dev": true,
@@ -23549,6 +24175,27 @@
"svg2ttf": "svg2ttf.js"
}
},
+ "node_modules/svgdom": {
+ "version": "0.1.21",
+ "resolved": "https://registry.npmjs.org/svgdom/-/svgdom-0.1.21.tgz",
+ "integrity": "sha512-PrMx2aEzjRgyK9nbff6/NOzNmGcRnkjwO9p3JnHISmqPTMGtBPi4uFp59fVhI9PqRp8rVEWgmXFbkgYRsTnapg==",
+ "license": "MIT",
+ "dependencies": {
+ "fontkit": "^2.0.4",
+ "image-size": "^1.2.1",
+ "sax": "^1.4.1"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Fuzzyma"
+ }
+ },
+ "node_modules/svgdom/node_modules/sax": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
+ "license": "ISC"
+ },
"node_modules/svgicons2svgfont": {
"version": "10.0.6",
"dev": true,
@@ -23867,6 +24514,12 @@
"next-tick": "1"
}
},
+ "node_modules/tiny-inflate": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
+ "license": "MIT"
+ },
"node_modules/tmp": {
"version": "0.2.1",
"dev": true,
@@ -24013,7 +24666,9 @@
}
},
"node_modules/tslib": {
- "version": "2.6.2",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
"node_modules/tsscmp": {
@@ -24222,6 +24877,32 @@
"version": "1.1.0",
"license": "MIT"
},
+ "node_modules/unicode-properties": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
+ "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.0",
+ "unicode-trie": "^2.0.0"
+ }
+ },
+ "node_modules/unicode-trie": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
+ "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
+ }
+ },
+ "node_modules/unicode-trie/node_modules/pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
+ "license": "MIT"
+ },
"node_modules/universalify": {
"version": "2.0.1",
"dev": true,
@@ -25679,7 +26360,7 @@
},
"packages/amazonq": {
"name": "amazon-q-vscode",
- "version": "1.79.0-SNAPSHOT",
+ "version": "1.80.0-SNAPSHOT",
"license": "Apache-2.0",
"dependencies": {
"aws-core-vscode": "file:../core/"
@@ -25710,6 +26391,7 @@
"@aws-sdk/client-iam": "<3.731.0",
"@aws-sdk/client-lambda": "<3.731.0",
"@aws-sdk/client-s3": "<3.731.0",
+ "@aws-sdk/client-sfn": "<3.731.0",
"@aws-sdk/client-ssm": "<3.731.0",
"@aws-sdk/client-sso": "<3.731.0",
"@aws-sdk/client-sso-oidc": "<3.731.0",
@@ -25732,6 +26414,7 @@
"@smithy/service-error-classification": "^4.0.1",
"@smithy/shared-ini-file-loader": "^4.0.0",
"@smithy/util-retry": "^4.0.1",
+ "@svgdotjs/svg.js": "^3.0.16",
"@vscode/debugprotocol": "^1.57.0",
"@zip.js/zip.js": "^2.7.41",
"adm-zip": "^0.5.10",
@@ -25750,6 +26433,7 @@
"http2": "^3.3.6",
"i18n-ts": "^1.0.5",
"immutable": "^4.3.0",
+ "jaro-winkler": "^0.2.8",
"jose": "5.4.1",
"js-yaml": "^4.1.0",
"jsonc-parser": "^3.2.0",
@@ -25762,6 +26446,7 @@
"semver": "^7.5.4",
"stream-buffers": "^3.0.2",
"strip-ansi": "^5.2.0",
+ "svgdom": "^0.1.0",
"tcp-port-used": "^1.0.1",
"vscode-languageclient": "^6.1.4",
"vscode-languageserver": "^6.1.1",
@@ -25806,6 +26491,7 @@
"@types/sinon": "^10.0.5",
"@types/sinonjs__fake-timers": "^8.1.2",
"@types/stream-buffers": "^3.0.7",
+ "@types/svgdom": "^0.1.2",
"@types/tcp-port-used": "^1.0.1",
"@types/uuid": "^9.0.1",
"@types/whatwg-url": "^11.0.4",
@@ -27393,7 +28079,7 @@
},
"packages/toolkit": {
"name": "aws-toolkit-vscode",
- "version": "3.67.0-SNAPSHOT",
+ "version": "3.68.0-SNAPSHOT",
"license": "Apache-2.0",
"dependencies": {
"aws-core-vscode": "file:../core/"
@@ -29052,10 +29738,6 @@
"tree-kill": "cli.js"
}
},
- "src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/tslib": {
- "version": "2.8.1",
- "license": "0BSD"
- },
"src.gen/@amzn/amazon-q-developer-streaming-client/node_modules/typescript": {
"version": "5.2.2",
"dev": true,
@@ -30606,10 +31288,6 @@
"tree-kill": "cli.js"
}
},
- "src.gen/@amzn/codewhisperer-streaming/node_modules/tslib": {
- "version": "2.8.1",
- "license": "0BSD"
- },
"src.gen/@amzn/codewhisperer-streaming/node_modules/typescript": {
"version": "5.2.2",
"dev": true,
diff --git a/package.json b/package.json
index 5134b42aaa3..8dab28aba35 100644
--- a/package.json
+++ b/package.json
@@ -45,6 +45,7 @@
"@playwright/browser-chromium": "^1.43.1",
"@stylistic/eslint-plugin": "^2.11.0",
"@types/he": "^1.2.3",
+ "@types/jaro-winkler": "^0.2.4",
"@types/vscode": "^1.68.0",
"@types/vscode-webview": "^1.57.1",
"@types/webpack-env": "^1.18.5",
@@ -74,6 +75,7 @@
},
"dependencies": {
"@types/node": "^22.7.5",
+ "jaro-winkler": "^0.2.8",
"vscode-nls": "^5.2.0",
"vscode-nls-dev": "^4.0.4"
}
diff --git a/packages/amazonq/.changes/1.79.0.json b/packages/amazonq/.changes/1.79.0.json
new file mode 100644
index 00000000000..51d910cca2b
--- /dev/null
+++ b/packages/amazonq/.changes/1.79.0.json
@@ -0,0 +1,18 @@
+{
+ "date": "2025-06-25",
+ "version": "1.79.0",
+ "entries": [
+ {
+ "type": "Bug Fix",
+ "description": "Added automatic system certificate detection and VSCode proxy settings support"
+ },
+ {
+ "type": "Bug Fix",
+ "description": "Improved Amazon Linux 2 support with better SageMaker environment detection"
+ },
+ {
+ "type": "Feature",
+ "description": "/transform: run all builds client-side"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/amazonq/CHANGELOG.md b/packages/amazonq/CHANGELOG.md
index c3e17d8a77b..e4d0ff47c77 100644
--- a/packages/amazonq/CHANGELOG.md
+++ b/packages/amazonq/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 1.79.0 2025-06-25
+
+- **Bug Fix** Added automatic system certificate detection and VSCode proxy settings support
+- **Bug Fix** Improved Amazon Linux 2 support with better SageMaker environment detection
+- **Feature** /transform: run all builds client-side
+
## 1.78.0 2025-06-20
- **Bug Fix** Resolve missing chat options in Amazon Q chat interface.
diff --git a/packages/amazonq/package.json b/packages/amazonq/package.json
index f52c8c1beb0..9b6c3dd50bd 100644
--- a/packages/amazonq/package.json
+++ b/packages/amazonq/package.json
@@ -2,7 +2,7 @@
"name": "amazon-q-vscode",
"displayName": "Amazon Q",
"description": "The most capable generative AI-powered assistant for building, operating, and transforming software, with advanced capabilities for managing data and AI",
- "version": "1.79.0-SNAPSHOT",
+ "version": "1.80.0-SNAPSHOT",
"extensionKind": [
"workspace"
],
@@ -828,6 +828,18 @@
"command": "aws.amazonq.clearCache",
"title": "%AWS.amazonq.clearCache%",
"category": "%AWS.amazonq.title%"
+ },
+ {
+ "command": "aws.amazonq.inline.acceptEdit",
+ "title": "%aws.amazonq.inline.acceptEdit%"
+ },
+ {
+ "command": "aws.amazonq.inline.rejectEdit",
+ "title": "%aws.amazonq.inline.rejectEdit%"
+ },
+ {
+ "command": "aws.amazonq.toggleNextEditPredictionPanel",
+ "title": "%aws.amazonq.toggleNextEditPredictionPanel%"
}
],
"keybindings": [
@@ -837,6 +849,18 @@
"mac": "cmd+alt+i",
"linux": "meta+alt+i"
},
+ {
+ "command": "aws.amazonq.inline.debugAcceptEdit",
+ "key": "ctrl+alt+a",
+ "mac": "cmd+alt+a",
+ "when": "editorTextFocus"
+ },
+ {
+ "command": "aws.amazonq.inline.debugRejectEdit",
+ "key": "ctrl+alt+r",
+ "mac": "cmd+alt+r",
+ "when": "editorTextFocus"
+ },
{
"command": "aws.amazonq.explainCode",
"win": "win+alt+e",
@@ -917,6 +941,16 @@
"command": "aws.amazonq.inline.waitForUserDecisionRejectAll",
"key": "escape",
"when": "editorTextFocus && aws.codewhisperer.connected && amazonq.inline.codelensShortcutEnabled"
+ },
+ {
+ "command": "aws.amazonq.inline.acceptEdit",
+ "key": "tab",
+ "when": "editorTextFocus && aws.amazonq.editSuggestionActive"
+ },
+ {
+ "command": "aws.amazonq.inline.rejectEdit",
+ "key": "escape",
+ "when": "editorTextFocus && aws.amazonq.editSuggestionActive"
}
],
"icons": {
diff --git a/packages/amazonq/src/app/inline/EditRendering/diffUtils.ts b/packages/amazonq/src/app/inline/EditRendering/diffUtils.ts
new file mode 100644
index 00000000000..24014d692ea
--- /dev/null
+++ b/packages/amazonq/src/app/inline/EditRendering/diffUtils.ts
@@ -0,0 +1,142 @@
+/*!
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+// TODO: deprecate this file in favor of core/shared/utils/diffUtils
+import { applyPatch } from 'diff'
+
+export type LineDiff =
+ | { type: 'added'; content: string }
+ | { type: 'removed'; content: string }
+ | { type: 'modified'; before: string; after: string }
+
+/**
+ * Apply a unified diff to original code to generate modified code
+ * @param originalCode The original code as a string
+ * @param unifiedDiff The unified diff content
+ * @returns The modified code after applying the diff
+ */
+export function applyUnifiedDiff(
+ docText: string,
+ unifiedDiff: string
+): { appliedCode: string; addedCharacterCount: number; deletedCharacterCount: number } {
+ try {
+ const { addedCharacterCount, deletedCharacterCount } = getAddedAndDeletedCharCount(unifiedDiff)
+ // First try the standard diff package
+ try {
+ const result = applyPatch(docText, unifiedDiff)
+ if (result !== false) {
+ return {
+ appliedCode: result,
+ addedCharacterCount: addedCharacterCount,
+ deletedCharacterCount: deletedCharacterCount,
+ }
+ }
+ } catch (error) {}
+
+ // Parse the unified diff to extract the changes
+ const diffLines = unifiedDiff.split('\n')
+ let result = docText
+
+ // Find all hunks in the diff
+ const hunkStarts = diffLines
+ .map((line, index) => (line.startsWith('@@ ') ? index : -1))
+ .filter((index) => index !== -1)
+
+ // Process each hunk
+ for (const hunkStart of hunkStarts) {
+ // Parse the hunk header
+ const hunkHeader = diffLines[hunkStart]
+ const match = hunkHeader.match(/@@ -(\d+),(\d+) \+(\d+),(\d+) @@/)
+
+ if (!match) {
+ continue
+ }
+
+ const oldStart = parseInt(match[1])
+ const oldLines = parseInt(match[2])
+
+ // Extract the content lines for this hunk
+ let i = hunkStart + 1
+ const contentLines = []
+ while (i < diffLines.length && !diffLines[i].startsWith('@@')) {
+ contentLines.push(diffLines[i])
+ i++
+ }
+
+ // Build the old and new text
+ let oldText = ''
+ let newText = ''
+
+ for (const line of contentLines) {
+ if (line.startsWith('-')) {
+ oldText += line.substring(1) + '\n'
+ } else if (line.startsWith('+')) {
+ newText += line.substring(1) + '\n'
+ } else if (line.startsWith(' ')) {
+ oldText += line.substring(1) + '\n'
+ newText += line.substring(1) + '\n'
+ }
+ }
+
+ // Remove trailing newline if it was added
+ oldText = oldText.replace(/\n$/, '')
+ newText = newText.replace(/\n$/, '')
+
+ // Find the text to replace in the document
+ const docLines = docText.split('\n')
+ const startLine = oldStart - 1 // Convert to 0-based
+ const endLine = startLine + oldLines
+
+ // Extract the text that should be replaced
+ const textToReplace = docLines.slice(startLine, endLine).join('\n')
+
+ // Replace the text
+ result = result.replace(textToReplace, newText)
+ }
+ return {
+ appliedCode: result,
+ addedCharacterCount: addedCharacterCount,
+ deletedCharacterCount: deletedCharacterCount,
+ }
+ } catch (error) {
+ return {
+ appliedCode: docText, // Return original text if all methods fail
+ addedCharacterCount: 0,
+ deletedCharacterCount: 0,
+ }
+ }
+}
+
+export function getAddedAndDeletedCharCount(diff: string): {
+ addedCharacterCount: number
+ deletedCharacterCount: number
+} {
+ let addedCharacterCount = 0
+ let deletedCharacterCount = 0
+ let i = 0
+ const lines = diff.split('\n')
+ while (i < lines.length) {
+ const line = lines[i]
+ if (line.startsWith('+') && !line.startsWith('+++')) {
+ addedCharacterCount += line.length - 1
+ } else if (line.startsWith('-') && !line.startsWith('---')) {
+ const removedLine = line.substring(1)
+ deletedCharacterCount += removedLine.length
+
+ // Check if this is a modified line rather than a pure deletion
+ const nextLine = lines[i + 1]
+ if (nextLine && nextLine.startsWith('+') && !nextLine.startsWith('+++') && nextLine.includes(removedLine)) {
+ // This is a modified line, not a pure deletion
+ // We've already counted the deletion, so we'll just increment i to skip the next line
+ // since we'll process the addition on the next iteration
+ i += 1
+ }
+ }
+ i += 1
+ }
+ return {
+ addedCharacterCount,
+ deletedCharacterCount,
+ }
+}
diff --git a/packages/amazonq/src/app/inline/EditRendering/displayImage.ts b/packages/amazonq/src/app/inline/EditRendering/displayImage.ts
new file mode 100644
index 00000000000..80d5231f113
--- /dev/null
+++ b/packages/amazonq/src/app/inline/EditRendering/displayImage.ts
@@ -0,0 +1,377 @@
+/*!
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { getLogger, setContext } from 'aws-core-vscode/shared'
+import * as vscode from 'vscode'
+import { diffLines } from 'diff'
+import { LanguageClient } from 'vscode-languageclient'
+import { CodeWhispererSession } from '../sessionManager'
+import { LogInlineCompletionSessionResultsParams } from '@aws/language-server-runtimes/protocol'
+import { InlineCompletionItemWithReferences } from '@aws/language-server-runtimes/protocol'
+import path from 'path'
+import { imageVerticalOffset } from './svgGenerator'
+
+export class EditDecorationManager {
+ private imageDecorationType: vscode.TextEditorDecorationType
+ private removedCodeDecorationType: vscode.TextEditorDecorationType
+ private currentImageDecoration: vscode.DecorationOptions | undefined
+ private currentRemovedCodeDecorations: vscode.DecorationOptions[] = []
+ private acceptHandler: (() => void) | undefined
+ private rejectHandler: (() => void) | undefined
+
+ constructor() {
+ this.registerCommandHandlers()
+ this.imageDecorationType = vscode.window.createTextEditorDecorationType({
+ isWholeLine: true,
+ })
+
+ this.removedCodeDecorationType = vscode.window.createTextEditorDecorationType({
+ backgroundColor: 'rgba(255, 0, 0, 0.2)',
+ })
+ }
+
+ private imageToDecoration(image: vscode.Uri, range: vscode.Range) {
+ return {
+ range,
+ renderOptions: {
+ after: {
+ contentIconPath: image,
+ verticalAlign: 'text-top',
+ width: '100%',
+ height: 'auto',
+ margin: '1px 0',
+ },
+ },
+ hoverMessage: new vscode.MarkdownString('Edit suggestion. Press [Tab] to accept or [Esc] to reject.'),
+ }
+ }
+
+ /**
+ * Highlights code that will be removed using the provided highlight ranges
+ * @param editor The active text editor
+ * @param startLine The line where the edit starts
+ * @param highlightRanges Array of ranges specifying which parts to highlight
+ * @returns Array of decoration options
+ */
+ private highlightRemovedLines(
+ editor: vscode.TextEditor,
+ startLine: number,
+ highlightRanges: Array<{ line: number; start: number; end: number }>
+ ): vscode.DecorationOptions[] {
+ const decorations: vscode.DecorationOptions[] = []
+
+ // Group ranges by line for more efficient processing
+ const rangesByLine = new Map
Failed to load debug.html file: ${error}
+ +