From 2d9e484c8e73e4c06024dfae86d27ce8c679e41a Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 19 Feb 2026 11:12:46 -0800 Subject: [PATCH 01/37] Switch most remaining extensions to use esbuild Just 3 left: - git and github. These are doing weird stuff with d.ts imports and const enums - github-authentication which has some tricky path mapping stuff --- extensions/debug-auto-launch/.vscodeignore | 2 +- ...xtension.webpack.config.js => esbuild.mts} | 22 +++--- extensions/debug-server-ready/.vscodeignore | 2 +- ...xtension.webpack.config.js => esbuild.mts} | 22 +++--- extensions/git-base/.vscodeignore | 3 +- extensions/git-base/esbuild.browser.mts | 18 +++++ ...-browser.webpack.config.js => esbuild.mts} | 22 +++--- extensions/git-base/tsconfig.browser.json | 7 ++ extensions/ipynb/.vscodeignore | 4 +- extensions/ipynb/esbuild.browser.mts | 19 +++++ extensions/ipynb/esbuild.mts | 19 +++++ .../ipynb/extension-browser.webpack.config.js | 34 --------- extensions/ipynb/extension.webpack.config.js | 22 ------ extensions/ipynb/tsconfig.browser.json | 10 +++ extensions/media-preview/package.json | 8 ++- extensions/mermaid-chat-features/package.json | 8 ++- .../microsoft-authentication/.vscodeignore | 2 +- .../microsoft-authentication/esbuild.mts | 67 ++++++++++++++++++ .../extension.webpack.config.js | 69 ------------------- extensions/vscode-test-resolver/.vscodeignore | 1 + .../vscode-test-resolver/esbuild.browser.mts | 18 +++++ .../esbuild.mts} | 22 +++--- .../extension-browser.webpack.config.js | 16 ----- .../tsconfig.browser.json | 10 +++ 24 files changed, 234 insertions(+), 193 deletions(-) rename extensions/debug-auto-launch/{extension.webpack.config.js => esbuild.mts} (51%) rename extensions/debug-server-ready/{extension.webpack.config.js => esbuild.mts} (51%) create mode 100644 extensions/git-base/esbuild.browser.mts rename extensions/git-base/{extension-browser.webpack.config.js => esbuild.mts} (51%) create mode 100644 extensions/git-base/tsconfig.browser.json create mode 100644 extensions/ipynb/esbuild.browser.mts create mode 100644 extensions/ipynb/esbuild.mts delete mode 100644 extensions/ipynb/extension-browser.webpack.config.js delete mode 100644 extensions/ipynb/extension.webpack.config.js create mode 100644 extensions/ipynb/tsconfig.browser.json create mode 100644 extensions/microsoft-authentication/esbuild.mts delete mode 100644 extensions/microsoft-authentication/extension.webpack.config.js create mode 100644 extensions/vscode-test-resolver/esbuild.browser.mts rename extensions/{git-base/extension.webpack.config.js => vscode-test-resolver/esbuild.mts} (51%) delete mode 100644 extensions/vscode-test-resolver/extension-browser.webpack.config.js create mode 100644 extensions/vscode-test-resolver/tsconfig.browser.json diff --git a/extensions/debug-auto-launch/.vscodeignore b/extensions/debug-auto-launch/.vscodeignore index 1ebf0088b62a4..0628555db0021 100644 --- a/extensions/debug-auto-launch/.vscodeignore +++ b/extensions/debug-auto-launch/.vscodeignore @@ -1,5 +1,5 @@ src/** tsconfig*.json out/** -extension.webpack.config.js +esbuild*.mts package-lock.json diff --git a/extensions/debug-auto-launch/extension.webpack.config.js b/extensions/debug-auto-launch/esbuild.mts similarity index 51% rename from extensions/debug-auto-launch/extension.webpack.config.js rename to extensions/debug-auto-launch/esbuild.mts index 0c857b362f5da..2b75ca703da06 100644 --- a/extensions/debug-auto-launch/extension.webpack.config.js +++ b/extensions/debug-auto-launch/esbuild.mts @@ -2,15 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults from '../shared.webpack.config.mjs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -export default withDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/extension.ts', +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), }, - resolve: { - mainFields: ['module', 'main'] - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/debug-server-ready/.vscodeignore b/extensions/debug-server-ready/.vscodeignore index 04b88eb4a4520..7b79c7b47b449 100644 --- a/extensions/debug-server-ready/.vscodeignore +++ b/extensions/debug-server-ready/.vscodeignore @@ -1,6 +1,6 @@ src/** tsconfig*.json out/** -extension.webpack.config.js +esbuild*.mts package-lock.json .vscode diff --git a/extensions/debug-server-ready/extension.webpack.config.js b/extensions/debug-server-ready/esbuild.mts similarity index 51% rename from extensions/debug-server-ready/extension.webpack.config.js rename to extensions/debug-server-ready/esbuild.mts index 0c857b362f5da..2b75ca703da06 100644 --- a/extensions/debug-server-ready/extension.webpack.config.js +++ b/extensions/debug-server-ready/esbuild.mts @@ -2,15 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults from '../shared.webpack.config.mjs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -export default withDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/extension.ts', +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), }, - resolve: { - mainFields: ['module', 'main'] - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/git-base/.vscodeignore b/extensions/git-base/.vscodeignore index 835918d940378..44bb9f7ee78e3 100644 --- a/extensions/git-base/.vscodeignore +++ b/extensions/git-base/.vscodeignore @@ -1,7 +1,6 @@ src/** build/** cgmanifest.json -extension.webpack.config.js -extension-browser.webpack.config.js +esbuild*.mts tsconfig*.json diff --git a/extensions/git-base/esbuild.browser.mts b/extensions/git-base/esbuild.browser.mts new file mode 100644 index 0000000000000..bf525ffa1efcb --- /dev/null +++ b/extensions/git-base/esbuild.browser.mts @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +run({ + platform: 'browser', + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/git-base/extension-browser.webpack.config.js b/extensions/git-base/esbuild.mts similarity index 51% rename from extensions/git-base/extension-browser.webpack.config.js rename to extensions/git-base/esbuild.mts index fcdf954744c12..2b75ca703da06 100644 --- a/extensions/git-base/extension-browser.webpack.config.js +++ b/extensions/git-base/esbuild.mts @@ -2,15 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -export default withBrowserDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/extension.ts' +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), }, - output: { - filename: 'extension.js' - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/git-base/tsconfig.browser.json b/extensions/git-base/tsconfig.browser.json new file mode 100644 index 0000000000000..dbacbb22fdff4 --- /dev/null +++ b/extensions/git-base/tsconfig.browser.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ] +} diff --git a/extensions/ipynb/.vscodeignore b/extensions/ipynb/.vscodeignore index 8805685e2220b..6823ef2cb7ab9 100644 --- a/extensions/ipynb/.vscodeignore +++ b/extensions/ipynb/.vscodeignore @@ -3,8 +3,6 @@ src/** notebook-src/** out/** tsconfig*.json -extension.webpack.config.js -extension-browser.webpack.config.js +esbuild*.mts package-lock.json .gitignore -esbuild.* diff --git a/extensions/ipynb/esbuild.browser.mts b/extensions/ipynb/esbuild.browser.mts new file mode 100644 index 0000000000000..6b08f26043b37 --- /dev/null +++ b/extensions/ipynb/esbuild.browser.mts @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +run({ + platform: 'browser', + entryPoints: { + 'ipynbMain.browser': path.join(srcDir, 'ipynbMain.browser.ts'), + 'notebookSerializerWorker': path.join(srcDir, 'notebookSerializerWorker.web.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/ipynb/esbuild.mts b/extensions/ipynb/esbuild.mts new file mode 100644 index 0000000000000..3aebefcf4dfb7 --- /dev/null +++ b/extensions/ipynb/esbuild.mts @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'ipynbMain.node': path.join(srcDir, 'ipynbMain.node.ts'), + 'notebookSerializerWorker': path.join(srcDir, 'notebookSerializerWorker.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/ipynb/extension-browser.webpack.config.js b/extensions/ipynb/extension-browser.webpack.config.js deleted file mode 100644 index 08a0edc8ad03e..0000000000000 --- a/extensions/ipynb/extension-browser.webpack.config.js +++ /dev/null @@ -1,34 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check -import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -import path from 'path'; - -const mainConfig = withBrowserDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/ipynbMain.browser.ts' - }, - output: { - filename: 'ipynbMain.browser.js', - path: path.join(import.meta.dirname, 'dist', 'browser') - } -}); - - -const workerConfig = withBrowserDefaults({ - context: import.meta.dirname, - entry: { - notebookSerializerWorker: './src/notebookSerializerWorker.web.ts', - }, - output: { - filename: 'notebookSerializerWorker.js', - path: path.join(import.meta.dirname, 'dist', 'browser'), - libraryTarget: 'var', - library: 'serverExportVar' - }, -}); - -export default [mainConfig, workerConfig]; diff --git a/extensions/ipynb/extension.webpack.config.js b/extensions/ipynb/extension.webpack.config.js deleted file mode 100644 index 2bfea01dd914f..0000000000000 --- a/extensions/ipynb/extension.webpack.config.js +++ /dev/null @@ -1,22 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults, { nodePlugins } from '../shared.webpack.config.mjs'; -import path from 'path'; - -export default withDefaults({ - context: import.meta.dirname, - entry: { - ['ipynbMain.node']: './src/ipynbMain.node.ts', - notebookSerializerWorker: './src/notebookSerializerWorker.ts', - }, - output: { - path: path.resolve(import.meta.dirname, 'dist'), - filename: '[name].js' - }, - plugins: [ - ...nodePlugins(import.meta.dirname), // add plugins, don't replace inherited - ] -}); diff --git a/extensions/ipynb/tsconfig.browser.json b/extensions/ipynb/tsconfig.browser.json new file mode 100644 index 0000000000000..cdcf648641c2a --- /dev/null +++ b/extensions/ipynb/tsconfig.browser.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ], + "files": [ + "./src/ipynbMain.browser.ts" + ] +} diff --git a/extensions/media-preview/package.json b/extensions/media-preview/package.json index f1ee36118f2eb..838a94e6396a1 100644 --- a/extensions/media-preview/package.json +++ b/extensions/media-preview/package.json @@ -156,8 +156,12 @@ "watch": "npm run build-preview && gulp watch-extension:media-preview", "vscode:prepublish": "npm run build-ext", "build-ext": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.mjs compile-extension:media-preview ./tsconfig.json", - "compile-web": "npx webpack-cli --config extension-browser.webpack.config --mode none", - "watch-web": "npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose" + "compile-web": "npm-run-all2 -lp bundle-web typecheck-web", + "bundle-web": "node ./esbuild.browser.mts", + "typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit", + "watch-web": "npm-run-all2 -lp watch-bundle-web watch-typecheck-web", + "watch-bundle-web": "node ./esbuild.browser.mts --watch", + "watch-typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit --watch" }, "dependencies": { "@vscode/extension-telemetry": "^0.9.8", diff --git a/extensions/mermaid-chat-features/package.json b/extensions/mermaid-chat-features/package.json index ba67e03fdcee3..fed905d2651ec 100644 --- a/extensions/mermaid-chat-features/package.json +++ b/extensions/mermaid-chat-features/package.json @@ -118,8 +118,12 @@ "vscode:prepublish": "npm run build-ext && npm run build-chat-webview", "build-ext": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.mjs compile-extension:mermaid-chat-features", "build-chat-webview": "node ./esbuild.webview.mts", - "compile-web": "npx webpack-cli --config extension-browser.webpack.config --mode none", - "watch-web": "npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose" + "compile-web": "npm-run-all2 -lp bundle-web typecheck-web", + "bundle-web": "node ./esbuild.browser.mts", + "typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit", + "watch-web": "npm-run-all2 -lp watch-bundle-web watch-typecheck-web", + "watch-bundle-web": "node ./esbuild.browser.mts --watch", + "watch-typecheck-web": "tsgo --project ./tsconfig.browser.json --noEmit --watch" }, "devDependencies": { "@types/node": "^22.18.10", diff --git a/extensions/microsoft-authentication/.vscodeignore b/extensions/microsoft-authentication/.vscodeignore index 3e683c7e56dd4..e61623be63b1f 100644 --- a/extensions/microsoft-authentication/.vscodeignore +++ b/extensions/microsoft-authentication/.vscodeignore @@ -2,7 +2,7 @@ .vscode-test/** out/test/** out/** -extension.webpack.config.js +esbuild*.mts package-lock.json src/** .gitignore diff --git a/extensions/microsoft-authentication/esbuild.mts b/extensions/microsoft-authentication/esbuild.mts new file mode 100644 index 0000000000000..38e288a2bcc78 --- /dev/null +++ b/extensions/microsoft-authentication/esbuild.mts @@ -0,0 +1,67 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +const isWindows = process.platform === 'win32'; +const isMacOS = process.platform === 'darwin'; +const isLinux = !isWindows && !isMacOS; + +const windowsArches = ['x64']; +const linuxArches = ['x64']; + +let platformFolder: string; +switch (process.platform) { + case 'win32': platformFolder = 'windows'; break; + case 'darwin': platformFolder = 'macos'; break; + case 'linux': platformFolder = 'linux'; break; + default: platformFolder = ''; +} + +const arch = process.env.VSCODE_ARCH || process.arch; + +/** + * Copy native MSAL runtime binaries to the output directory. + */ +async function copyNativeMsalFiles(outDir: string): Promise { + if ( + !(isWindows && windowsArches.includes(arch)) && + !isMacOS && + !(isLinux && linuxArches.includes(arch)) + ) { + return; + } + + const msalRuntimeDir = path.join(import.meta.dirname, 'node_modules', '@azure', 'msal-node-runtime', 'dist', platformFolder, arch); + try { + const files = await fs.promises.readdir(msalRuntimeDir); + for (const file of files) { + if (/^(lib)?msal.*\.(node|dll|dylib|so)$/.test(file)) { + await fs.promises.copyFile(path.join(msalRuntimeDir, file), path.join(outDir, file)); + } + } + } catch { + // Skip if directory doesn't exist (unsupported platform/arch) + } +} + +run({ + platform: 'node', + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), + }, + srcDir, + outdir: outDir, + additionalOptions: { + external: ['vscode', './msal-node-runtime'], + alias: { + 'keytar': path.resolve(import.meta.dirname, 'packageMocks', 'keytar', 'index.js'), + }, + }, +}, process.argv, copyNativeMsalFiles); diff --git a/extensions/microsoft-authentication/extension.webpack.config.js b/extensions/microsoft-authentication/extension.webpack.config.js deleted file mode 100644 index a46d5a527dfec..0000000000000 --- a/extensions/microsoft-authentication/extension.webpack.config.js +++ /dev/null @@ -1,69 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults, { nodePlugins } from '../shared.webpack.config.mjs'; -import CopyWebpackPlugin from 'copy-webpack-plugin'; -import path from 'path'; - -const isWindows = process.platform === 'win32'; -const isMacOS = process.platform === 'darwin'; -const isLinux = !isWindows && !isMacOS; - -const windowsArches = ['x64']; -const linuxArches = ['x64']; - -let platformFolder; -switch (process.platform) { - case 'win32': - platformFolder = 'windows'; - break; - case 'darwin': - platformFolder = 'macos'; - break; - case 'linux': - platformFolder = 'linux'; - break; - default: - throw new Error(`Unsupported platform: ${process.platform}`); -} - -const arch = process.env.VSCODE_ARCH || process.arch; -console.log(`Building Microsoft Authentication Extension for ${process.platform} (${arch})`); - -const plugins = [...nodePlugins(import.meta.dirname)]; -if ( - (isWindows && windowsArches.includes(arch)) || - isMacOS || - (isLinux && linuxArches.includes(arch)) -) { - plugins.push(new CopyWebpackPlugin({ - patterns: [ - { - // The native files we need to ship with the extension - from: `**/dist/${platformFolder}/${arch}/(lib|)msal*.(node|dll|dylib|so)`, - to: '[name][ext]' - } - ] - })); -} - -export default withDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/extension.ts' - }, - externals: { - // The @azure/msal-node-runtime package requires this native node module (.node). - // It is currently only included on Windows, but the package handles unsupported platforms - // gracefully. - './msal-node-runtime': 'commonjs ./msal-node-runtime' - }, - resolve: { - alias: { - 'keytar': path.resolve(import.meta.dirname, 'packageMocks', 'keytar', 'index.js') - } - }, - plugins -}); diff --git a/extensions/vscode-test-resolver/.vscodeignore b/extensions/vscode-test-resolver/.vscodeignore index 43e7067afbd26..ec136872c1762 100644 --- a/extensions/vscode-test-resolver/.vscodeignore +++ b/extensions/vscode-test-resolver/.vscodeignore @@ -4,3 +4,4 @@ typings/** **/*.map .gitignore tsconfig*.json +esbuild*.mts diff --git a/extensions/vscode-test-resolver/esbuild.browser.mts b/extensions/vscode-test-resolver/esbuild.browser.mts new file mode 100644 index 0000000000000..29f504d6987a3 --- /dev/null +++ b/extensions/vscode-test-resolver/esbuild.browser.mts @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; + +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist', 'browser'); + +run({ + platform: 'browser', + entryPoints: { + 'testResolverMain': path.join(srcDir, 'extension.browser.ts'), + }, + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/git-base/extension.webpack.config.js b/extensions/vscode-test-resolver/esbuild.mts similarity index 51% rename from extensions/git-base/extension.webpack.config.js rename to extensions/vscode-test-resolver/esbuild.mts index 0bea7c7e821e4..2b75ca703da06 100644 --- a/extensions/git-base/extension.webpack.config.js +++ b/extensions/vscode-test-resolver/esbuild.mts @@ -2,15 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -// @ts-check -import withDefaults from '../shared.webpack.config.mjs'; +import * as path from 'node:path'; +import { run } from '../esbuild-extension-common.mts'; -export default withDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/extension.ts' +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'dist'); + +run({ + platform: 'node', + entryPoints: { + 'extension': path.join(srcDir, 'extension.ts'), }, - output: { - filename: 'extension.js' - } -}); + srcDir, + outdir: outDir, +}, process.argv); diff --git a/extensions/vscode-test-resolver/extension-browser.webpack.config.js b/extensions/vscode-test-resolver/extension-browser.webpack.config.js deleted file mode 100644 index 9aeb636997b86..0000000000000 --- a/extensions/vscode-test-resolver/extension-browser.webpack.config.js +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check -import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; - -export default withBrowserDefaults({ - context: import.meta.dirname, - entry: { - extension: './src/extension.browser.ts' - }, - output: { - filename: 'testResolverMain.js' - } -}); diff --git a/extensions/vscode-test-resolver/tsconfig.browser.json b/extensions/vscode-test-resolver/tsconfig.browser.json new file mode 100644 index 0000000000000..790349e7fec3f --- /dev/null +++ b/extensions/vscode-test-resolver/tsconfig.browser.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": {}, + "exclude": [ + "./src/test/**" + ], + "files": [ + "./src/extension.browser.ts" + ] +} From b93c59301981fc92d69248efc09eac79c938eb50 Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 19 Feb 2026 12:00:34 -0800 Subject: [PATCH 02/37] Update extensions/ipynb/tsconfig.browser.json Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- extensions/ipynb/tsconfig.browser.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions/ipynb/tsconfig.browser.json b/extensions/ipynb/tsconfig.browser.json index cdcf648641c2a..27cbc984bb210 100644 --- a/extensions/ipynb/tsconfig.browser.json +++ b/extensions/ipynb/tsconfig.browser.json @@ -5,6 +5,7 @@ "./src/test/**" ], "files": [ - "./src/ipynbMain.browser.ts" + "./src/ipynbMain.browser.ts", + "./src/notebookSerializerWorker.web.ts" ] } From 2402f6cb410a9eabc2f1daeac7d09bc50a521adc Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Thu, 19 Feb 2026 12:00:44 -0800 Subject: [PATCH 03/37] Update extensions/microsoft-authentication/esbuild.mts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- extensions/microsoft-authentication/esbuild.mts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/microsoft-authentication/esbuild.mts b/extensions/microsoft-authentication/esbuild.mts index 38e288a2bcc78..ef8f793c26ed1 100644 --- a/extensions/microsoft-authentication/esbuild.mts +++ b/extensions/microsoft-authentication/esbuild.mts @@ -21,7 +21,7 @@ switch (process.platform) { case 'win32': platformFolder = 'windows'; break; case 'darwin': platformFolder = 'macos'; break; case 'linux': platformFolder = 'linux'; break; - default: platformFolder = ''; + default: throw new Error(`Unsupported platform: ${process.platform}`); } const arch = process.env.VSCODE_ARCH || process.arch; From 3af20595e52c1766c8cb7352f83dbdecd51ac06f Mon Sep 17 00:00:00 2001 From: Isidor Date: Fri, 20 Feb 2026 17:21:56 +0100 Subject: [PATCH 04/37] fix link, remove lightbulb icon --- .../browser/widget/input/chatModelPicker.ts | 2 ++ .../contrib/chat/browser/widget/media/chat.css | 10 ++++++++++ .../widget/input/chatModelPicker.test.ts | 17 +++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts b/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts index cc98c13f05678..d5968bd6501b3 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts @@ -423,8 +423,10 @@ function createUnavailableModelItem( kind: ActionListItemKind.Action, label: entry.label, description, + group: { title: '', icon: ThemeIcon.fromId(Codicon.blank.id) }, disabled: true, hideIcon: false, + className: 'chat-model-picker-unavailable', section, hover: { content: hoverContent }, }; diff --git a/src/vs/workbench/contrib/chat/browser/widget/media/chat.css b/src/vs/workbench/contrib/chat/browser/widget/media/chat.css index 24007074fe847..7b0efa3c09121 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +++ b/src/vs/workbench/contrib/chat/browser/widget/media/chat.css @@ -1401,6 +1401,16 @@ have to be updated for changes to the rules above, or to support more deeply nes max-width: 100%; } +.action-widget .monaco-list-row.chat-model-picker-unavailable .description a, +.action-widget .monaco-list-row.chat-model-picker-unavailable .description a:visited { + color: var(--vscode-textLink-foreground); +} + +.action-widget .monaco-list-row.chat-model-picker-unavailable .description a:hover, +.action-widget .monaco-list-row.chat-model-picker-unavailable .description a:active { + color: var(--vscode-textLink-activeForeground); +} + .interactive-session .chat-input-toolbars .codicon-debug-stop { color: var(--vscode-icon-foreground) !important; } diff --git a/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts b/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts index 704754ad90818..62a423f2a3b22 100644 --- a/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts +++ b/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts @@ -5,6 +5,7 @@ import assert from 'assert'; import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../../base/test/common/utils.js'; +import { Codicon } from '../../../../../../../base/common/codicons.js'; import { IStringDictionary } from '../../../../../../../base/common/collections.js'; import { MarkdownString } from '../../../../../../../base/common/htmlContent.js'; import { ActionListItemKind, IActionListItem } from '../../../../../../../platform/actionWidget/browser/actionList.js'; @@ -537,4 +538,20 @@ suite('buildModelPickerItems', () => { assert.ok(description instanceof MarkdownString); assert.ok(description.value.includes('https://aka.ms/github-copilot-settings')); }); + + test('unavailable models keep indentation with blank icon', () => { + const auto = createAutoModel(); + const items = callBuild([auto], { + recentModelIds: ['missing-model'], + controlModels: { + 'missing-model': { label: 'Missing Model' }, + }, + isProUser: false, + }); + + const unavailable = getActionItems(items).find(a => a.label === 'Missing Model'); + assert.ok(unavailable); + assert.strictEqual(unavailable.hideIcon, false); + assert.strictEqual(unavailable.group?.icon?.id, Codicon.blank.id); + }); }); From 7986e4bb652cb6e8ac4c12ab0c535881023ada80 Mon Sep 17 00:00:00 2001 From: Isidor Date: Fri, 20 Feb 2026 17:30:24 +0100 Subject: [PATCH 05/37] fix errors --- .../chat/test/browser/widget/input/chatModelPicker.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts b/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts index 62a423f2a3b22..da8ff146cb164 100644 --- a/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts +++ b/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts @@ -520,7 +520,7 @@ suite('buildModelPickerItems', () => { [auto], undefined, ['missing-model'], - { 'missing-model': { label: 'Missing Model' } }, + { 'missing-model': { label: 'Missing Model' } as IModelControlEntry }, true, '1.100.0', StateType.Idle, @@ -544,7 +544,7 @@ suite('buildModelPickerItems', () => { const items = callBuild([auto], { recentModelIds: ['missing-model'], controlModels: { - 'missing-model': { label: 'Missing Model' }, + 'missing-model': { label: 'Missing Model' } as IModelControlEntry, }, isProUser: false, }); From 5ba9ca4ec1eb57c686052b2f12dee7e236ebb75b Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Feb 2026 17:34:38 +0000 Subject: [PATCH 06/37] Add accessible label to workbench progress bar (#296533) * Initial plan * Add aria-label to progress bar Co-authored-by: meganrogge <29464607+meganrogge@users.noreply.github.com> * Allow progress bar aria label override Co-authored-by: meganrogge <29464607+meganrogge@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: meganrogge <29464607+meganrogge@users.noreply.github.com> --- src/vs/base/browser/ui/progressbar/progressbar.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vs/base/browser/ui/progressbar/progressbar.ts b/src/vs/base/browser/ui/progressbar/progressbar.ts index a369fb8187156..254bb04f46cf0 100644 --- a/src/vs/base/browser/ui/progressbar/progressbar.ts +++ b/src/vs/base/browser/ui/progressbar/progressbar.ts @@ -8,6 +8,7 @@ import { getProgressAccessibilitySignalScheduler } from './progressAccessibility import { RunOnceScheduler } from '../../../common/async.js'; import { Disposable, IDisposable, MutableDisposable } from '../../../common/lifecycle.js'; import { isNumber } from '../../../common/types.js'; +import { localize } from '../../../../nls.js'; import './progressbar.css'; const CSS_DONE = 'done'; @@ -15,8 +16,10 @@ const CSS_ACTIVE = 'active'; const CSS_INFINITE = 'infinite'; const CSS_INFINITE_LONG_RUNNING = 'infinite-long-running'; const CSS_DISCRETE = 'discrete'; +const NLS_PROGRESS_LABEL = localize('progress', "Progress"); export interface IProgressBarOptions extends IProgressBarStyles { + ariaLabel?: string; } export interface IProgressBarStyles { @@ -68,6 +71,7 @@ export class ProgressBar extends Disposable { this.element.classList.add('monaco-progress-container'); this.element.setAttribute('role', 'progressbar'); this.element.setAttribute('aria-valuemin', '0'); + this.element.setAttribute('aria-label', options?.ariaLabel && options.ariaLabel.trim() ? options.ariaLabel : NLS_PROGRESS_LABEL); container.appendChild(this.element); this.bit = document.createElement('div'); From ffa43b765768cd2bc4188ebe835e3aa3938230d8 Mon Sep 17 00:00:00 2001 From: Megan Rogge Date: Fri, 20 Feb 2026 12:05:03 -0600 Subject: [PATCH 07/37] extend chat OS notifications to enable them to play when the window is focused (#296552) fixes #294850 --- .../accessibility/chatAccessibilityService.ts | 13 +++-- .../contrib/chat/browser/chat.contribution.ts | 50 ++++++++++++++++--- .../chat/browser/chatWindowNotifier.ts | 14 ++++-- .../contrib/chat/common/constants.ts | 7 +++ 4 files changed, 67 insertions(+), 17 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.ts b/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.ts index a10346c9bb343..2691767520083 100644 --- a/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.ts +++ b/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.ts @@ -19,7 +19,7 @@ import { IHostService } from '../../../../services/host/browser/host.js'; import { AccessibilityVoiceSettingId } from '../../../accessibility/browser/accessibilityConfiguration.js'; import { ElicitationState, IChatElicitationRequest, IChatService } from '../../common/chatService/chatService.js'; import { IChatResponseViewModel } from '../../common/model/chatViewModel.js'; -import { ChatConfiguration } from '../../common/constants.js'; +import { ChatConfiguration, ChatNotificationMode } from '../../common/constants.js'; import { IChatAccessibilityService, IChatWidgetService } from '../chat.js'; import { ChatWidget } from '../widget/chatWidget.js'; import { CancellationTokenSource } from '../../../../../base/common/cancellation.js'; @@ -91,7 +91,8 @@ export class ChatAccessibilityService extends Disposable implements IChatAccessi } private async _showOSNotification(widget: ChatWidget, container: HTMLElement, responseContent: string): Promise { - if (!this._configurationService.getValue(ChatConfiguration.NotifyWindowOnResponseReceived)) { + const mode = this._configurationService.getValue(ChatConfiguration.NotifyWindowOnResponseReceived); + if (mode === ChatNotificationMode.Off) { return; } @@ -100,7 +101,8 @@ export class ChatAccessibilityService extends Disposable implements IChatAccessi return; } - if (targetWindow.document.hasFocus()) { + const isFocused = targetWindow.document.hasFocus(); + if (mode !== ChatNotificationMode.Always && isFocused) { return; } @@ -109,7 +111,10 @@ export class ChatAccessibilityService extends Disposable implements IChatAccessi return; } - await this._hostService.focus(targetWindow, { mode: FocusMode.Notify }); + // Focus window in notify mode (flash taskbar/dock) if not already focused + if (!isFocused) { + await this._hostService.focus(targetWindow, { mode: FocusMode.Notify }); + } // Dispose any previous unhandled notifications to avoid replacement/coalescing. this.toasts.clearAndDisposeAll(); diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index 9c86e875e9b01..54e5db4fda328 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -43,7 +43,7 @@ import { ChatTodoListService, IChatTodoListService } from '../common/tools/chatT import { ChatTransferService, IChatTransferService } from '../common/model/chatTransferService.js'; import { IChatVariablesService } from '../common/attachments/chatVariables.js'; import { ChatWidgetHistoryService, IChatWidgetHistoryService } from '../common/widget/chatWidgetHistoryService.js'; -import { AgentsControlClickBehavior, ChatConfiguration } from '../common/constants.js'; +import { AgentsControlClickBehavior, ChatConfiguration, ChatNotificationMode } from '../common/constants.js'; import { ILanguageModelIgnoredFilesService, LanguageModelIgnoredFilesService } from '../common/ignoredFiles.js'; import { ILanguageModelsService, LanguageModelsService } from '../common/languageModels.js'; import { ILanguageModelStatsService, LanguageModelStatsService } from '../common/languageModelStats.js'; @@ -332,10 +332,16 @@ configurationRegistry.registerConfiguration({ default: { } }, - 'chat.notifyWindowOnConfirmation': { - type: 'boolean', - description: nls.localize('chat.notifyWindowOnConfirmation', "Controls whether a chat session should present the user with an OS notification when a confirmation or question needs input while the window is not in focus. This includes a window badge as well as notification toast."), - default: true, + [ChatConfiguration.NotifyWindowOnConfirmation]: { + type: 'string', + enum: ['off', 'windowNotFocused', 'always'], + enumDescriptions: [ + nls.localize('chat.notifyWindowOnConfirmation.off', "Never show OS notifications for confirmations."), + nls.localize('chat.notifyWindowOnConfirmation.windowNotFocused', "Show OS notifications for confirmations when the window is not focused."), + nls.localize('chat.notifyWindowOnConfirmation.always', "Always show OS notifications for confirmations, even when the window is focused."), + ], + description: nls.localize('chat.notifyWindowOnConfirmation', "Controls whether a chat session should present the user with an OS notification when a confirmation or question needs input. This includes a window badge as well as notification toast."), + default: 'windowNotFocused', }, [ChatConfiguration.AutoReply]: { default: false, @@ -480,9 +486,15 @@ configurationRegistry.registerConfiguration({ description: nls.localize('chat.contextUsage.enabled', "Show the context window usage indicator in the chat input."), }, [ChatConfiguration.NotifyWindowOnResponseReceived]: { - type: 'boolean', - default: true, - description: nls.localize('chat.notifyWindowOnResponseReceived', "Controls whether a chat session should present the user with an OS notification when a response is received while the window is not in focus. This includes a window badge as well as notification toast."), + type: 'string', + enum: ['off', 'windowNotFocused', 'always'], + enumDescriptions: [ + nls.localize('chat.notifyWindowOnResponseReceived.off', "Never show OS notifications for responses."), + nls.localize('chat.notifyWindowOnResponseReceived.windowNotFocused', "Show OS notifications for responses when the window is not focused."), + nls.localize('chat.notifyWindowOnResponseReceived.always', "Always show OS notifications for responses, even when the window is focused."), + ], + default: 'windowNotFocused', + description: nls.localize('chat.notifyWindowOnResponseReceived', "Controls whether a chat session should present the user with an OS notification when a response is received. This includes a window badge as well as notification toast."), }, 'chat.checkpoints.enabled': { type: 'boolean', @@ -1225,6 +1237,28 @@ Registry.as(Extensions.ConfigurationMigration). return { value }; } }, + { + key: ChatConfiguration.NotifyWindowOnConfirmation, + migrateFn: (value: unknown) => { + if (value === true) { + return { value: ChatNotificationMode.WindowNotFocused }; + } else if (value === false) { + return { value: ChatNotificationMode.Off }; + } + return []; + } + }, + { + key: ChatConfiguration.NotifyWindowOnResponseReceived, + migrateFn: (value: unknown) => { + if (value === true) { + return { value: ChatNotificationMode.WindowNotFocused }; + } else if (value === false) { + return { value: ChatNotificationMode.Off }; + } + return []; + } + }, ]); class ChatResolverContribution extends Disposable { diff --git a/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.ts b/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.ts index 2b4857787cfef..abece4b0a87a0 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.ts @@ -17,6 +17,7 @@ import { IWorkbenchContribution } from '../../../common/contributions.js'; import { IHostService } from '../../../services/host/browser/host.js'; import { IChatModel, IChatRequestNeedsInputInfo } from '../common/model/chatModel.js'; import { IChatService } from '../common/chatService/chatService.js'; +import { ChatConfiguration, ChatNotificationMode } from '../common/constants.js'; import { IChatWidgetService } from './chat.js'; import { AcceptToolConfirmationActionId, IToolConfirmationActionContext } from './actions/chatToolActions.js'; @@ -71,7 +72,8 @@ export class ChatWindowNotifier extends Disposable implements IWorkbenchContribu private async _notifyIfNeeded(sessionResource: URI, info: IChatRequestNeedsInputInfo): Promise { // Check configuration - if (!this._configurationService.getValue('chat.notifyWindowOnConfirmation')) { + const mode = this._configurationService.getValue(ChatConfiguration.NotifyWindowOnConfirmation); + if (mode === ChatNotificationMode.Off) { return; } @@ -79,16 +81,18 @@ export class ChatWindowNotifier extends Disposable implements IWorkbenchContribu const widget = this._chatWidgetService.getWidgetBySessionResource(sessionResource); const targetWindow = widget ? dom.getWindow(widget.domNode) : mainWindow; - // Only notify if window doesn't have focus - if (targetWindow.document.hasFocus()) { + const isFocused = targetWindow.document.hasFocus(); + if (mode !== ChatNotificationMode.Always && isFocused) { return; } // Clear any existing notification for this session this._clearNotification(sessionResource); - // Focus window in notify mode (flash taskbar/dock) - await this._hostService.focus(targetWindow, { mode: FocusMode.Notify }); + // Focus window in notify mode (flash taskbar/dock) if not already focused + if (!isFocused) { + await this._hostService.focus(targetWindow, { mode: FocusMode.Notify }); + } // Create OS notification const notificationTitle = info.title ? localize('chatTitle', "Chat: {0}", info.title) : localize('chat.untitledChat', "Untitled Chat"); diff --git a/src/vs/workbench/contrib/chat/common/constants.ts b/src/vs/workbench/contrib/chat/common/constants.ts index 693f7c1f9da74..ed3f2318acc61 100644 --- a/src/vs/workbench/contrib/chat/common/constants.ts +++ b/src/vs/workbench/contrib/chat/common/constants.ts @@ -38,6 +38,7 @@ export enum ChatConfiguration { ThinkingPhrases = 'chat.agent.thinking.phrases', AutoExpandToolFailures = 'chat.tools.autoExpandFailures', TodosShowWidget = 'chat.tools.todos.showWidget', + NotifyWindowOnConfirmation = 'chat.notifyWindowOnConfirmation', NotifyWindowOnResponseReceived = 'chat.notifyWindowOnResponseReceived', ChatViewSessionsEnabled = 'chat.viewSessions.enabled', ChatViewSessionsGrouping = 'chat.viewSessions.grouping', @@ -90,6 +91,12 @@ export enum CollapsedToolsDisplayMode { Always = 'always', } +export enum ChatNotificationMode { + Off = 'off', + WindowNotFocused = 'windowNotFocused', + Always = 'always', +} + export enum AgentsControlClickBehavior { Default = 'default', Cycle = 'cycle', From a915fedc73601743e4622a645c2e0316a3c6ee4a Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 20 Feb 2026 19:10:22 +0100 Subject: [PATCH 08/37] modal - support icons and label format (#296542) --- .../parts/editor/media/modalEditorPart.css | 15 +++++++-- .../browser/parts/editor/modalEditorPart.ts | 32 ++++++++++++++----- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/vs/workbench/browser/parts/editor/media/modalEditorPart.css b/src/vs/workbench/browser/parts/editor/media/modalEditorPart.css index 44c003884676a..6be747356305d 100644 --- a/src/vs/workbench/browser/parts/editor/media/modalEditorPart.css +++ b/src/vs/workbench/browser/parts/editor/media/modalEditorPart.css @@ -55,7 +55,7 @@ align-items: center; height: 32px; min-height: 32px; - padding: 0 8px 0 16px; + padding: 0 8px 0 10px; color: var(--vscode-titleBar-activeForeground); background-color: var(--vscode-titleBar-activeBackground); border-bottom: 1px solid var(--vscode-titleBar-border, transparent); @@ -67,8 +67,17 @@ font-weight: 500; color: var(--vscode-titleBar-activeForeground); overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + + .monaco-icon-label { + color: inherit; + height: 32px; + line-height: 32px; + + &::before, + & > .monaco-icon-label-iconpath { + height: 32px; + } + } } /* Modal Editor Navigation */ diff --git a/src/vs/workbench/browser/parts/editor/modalEditorPart.ts b/src/vs/workbench/browser/parts/editor/modalEditorPart.ts index bdbd911fe2884..1f6e93ba311e1 100644 --- a/src/vs/workbench/browser/parts/editor/modalEditorPart.ts +++ b/src/vs/workbench/browser/parts/editor/modalEditorPart.ts @@ -25,7 +25,8 @@ import { EditorPart } from './editorPart.js'; import { GroupDirection, GroupsOrder, IModalEditorPart, GroupActivationReason } from '../../../services/editor/common/editorGroupsService.js'; import { IEditorService } from '../../../services/editor/common/editorService.js'; import { EditorPartModalContext, EditorPartModalMaximizedContext, EditorPartModalNavigationContext } from '../../../common/contextkeys.js'; -import { Verbosity } from '../../../common/editor.js'; +import { EditorResourceAccessor, SideBySideEditor, Verbosity } from '../../../common/editor.js'; +import { ResourceLabel } from '../../labels.js'; import { IHostService } from '../../../services/host/browser/host.js'; import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js'; import { mainWindow } from '../../../../base/browser/window.js'; @@ -123,7 +124,7 @@ export class ModalEditorPart { const headerElement = editorPartContainer.appendChild($('.modal-editor-header')); // Title element - const titleElement = append(headerElement, $('div.modal-editor-title')); + const titleElement = append(headerElement, $('div.modal-editor-title.show-file-icons')); titleElement.id = titleId; titleElement.textContent = ''; @@ -194,15 +195,30 @@ export class ModalEditorPart { menuOptions: { shouldForwardArgs: true } })); - disposables.add(Event.runAndSubscribe(modalEditorService.onDidActiveEditorChange, (() => { - - // Update title when active editor changes + // Create label + const label = disposables.add(scopedInstantiationService.createInstance(ResourceLabel, titleElement, {})); + disposables.add(Event.runAndSubscribe(modalEditorService.onDidActiveEditorChange, () => { const activeEditor = editorPart.activeGroup.activeEditor; - titleElement.textContent = activeEditor?.getTitle(Verbosity.MEDIUM) ?? ''; + if (activeEditor) { + const { labelFormat } = editorPart.partOptions; + + label.element.setResource( + { + resource: EditorResourceAccessor.getOriginalUri(activeEditor, { supportSideBySide: SideBySideEditor.BOTH }), + name: activeEditor.getName(), + description: activeEditor.getDescription(labelFormat === 'short' ? Verbosity.SHORT : labelFormat === 'long' ? Verbosity.LONG : Verbosity.MEDIUM) || '' + }, + { + icon: activeEditor.getIcon(), + extraClasses: activeEditor.getLabelExtraClasses(), + } + ); + } else { + label.element.clear(); + } - // Notify editor part that active editor changed editorPart.notifyActiveEditorChanged(); - }))); + })); // Handle double-click on header to toggle maximize disposables.add(addDisposableListener(headerElement, EventType.DBLCLICK, e => { From 009cde025b2f1dfcdb9be642237f0b4903b0cead Mon Sep 17 00:00:00 2001 From: Megan Rogge Date: Fri, 20 Feb 2026 12:10:56 -0600 Subject: [PATCH 09/37] add `chatTip` telemetry (#296564) fixes #296557 --- .../contrib/chat/browser/chatTipService.ts | 52 +++++++ .../chat/test/browser/chatTipService.test.ts | 132 ++++++++++++++++++ 2 files changed, 184 insertions(+) diff --git a/src/vs/workbench/contrib/chat/browser/chatTipService.ts b/src/vs/workbench/contrib/chat/browser/chatTipService.ts index a6635f79a2e91..8ffdf7c86a788 100644 --- a/src/vs/workbench/contrib/chat/browser/chatTipService.ts +++ b/src/vs/workbench/contrib/chat/browser/chatTipService.ts @@ -24,6 +24,21 @@ import { localChatSessionType } from '../common/chatSessionsService.js'; import { IChatService } from '../common/chatService/chatService.js'; import { CreateSlashCommandsUsageTracker } from './createSlashCommandsUsageTracker.js'; import { IChatEntitlementService } from '../../../services/chat/common/chatEntitlementService.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; + +type ChatTipEvent = { + tipId: string; + action: string; + commandId?: string; +}; + +type ChatTipClassification = { + tipId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The identifier of the tip.' }; + action: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The action performed on the tip (shown, dismissed, navigateNext, navigatePrevious, hidden, disabled, commandClicked).' }; + commandId?: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The command ID that was clicked, if applicable.' }; + owner: 'meganrogge'; + comment: 'Tracks user interactions with chat tips to understand which tips resonate and which are dismissed.'; +}; export const IChatTipService = createDecorator('chatTipService'); @@ -583,6 +598,7 @@ export class ChatTipService extends Disposable implements IChatTipService { private readonly _tracker: TipEligibilityTracker; private readonly _createSlashCommandsUsageTracker: CreateSlashCommandsUsageTracker; private _yoloModeEverEnabled: boolean; + private readonly _tipCommandListener = this._register(new MutableDisposable()); constructor( @IProductService private readonly _productService: IProductService, @@ -592,6 +608,8 @@ export class ChatTipService extends Disposable implements IChatTipService { @IInstantiationService instantiationService: IInstantiationService, @ILogService private readonly _logService: ILogService, @IChatEntitlementService chatEntitlementService: IChatEntitlementService, + @ICommandService private readonly _commandService: ICommandService, + @ITelemetryService private readonly _telemetryService: ITelemetryService, ) { super(); this._tracker = this._register(instantiationService.createInstance(TipEligibilityTracker, TIP_CATALOG)); @@ -630,6 +648,7 @@ export class ChatTipService extends Disposable implements IChatTipService { dismissTip(): void { if (this._shownTip) { + this._logTipTelemetry(this._shownTip.id, 'dismissed'); const dismissed = new Set(this._getDismissedTipIds()); dismissed.add(this._shownTip.id); this._storageService.store(ChatTipService._DISMISSED_TIP_KEY, JSON.stringify([...dismissed]), StorageScope.APPLICATION, StorageTarget.MACHINE); @@ -676,12 +695,18 @@ export class ChatTipService extends Disposable implements IChatTipService { } hideTip(): void { + if (this._shownTip) { + this._logTipTelemetry(this._shownTip.id, 'hidden'); + } this._shownTip = undefined; this._tipRequestId = undefined; this._onDidHideTip.fire(); } async disableTips(): Promise { + if (this._shownTip) { + this._logTipTelemetry(this._shownTip.id, 'disabled'); + } this._shownTip = undefined; this._tipRequestId = undefined; await this._configurationService.updateValue('chat.tips.enabled', false, ConfigurationTarget.APPLICATION); @@ -787,6 +812,9 @@ export class ChatTipService extends Disposable implements IChatTipService { this._tipRequestId = sourceId; this._shownTip = selectedTip; + this._logTipTelemetry(selectedTip.id, 'shown'); + this._trackTipCommandClicks(selectedTip); + return this._createTip(selectedTip); } @@ -820,9 +848,12 @@ export class ChatTipService extends Disposable implements IChatTipService { const idx = ((currentIndex + direction * i) % TIP_CATALOG.length + TIP_CATALOG.length) % TIP_CATALOG.length; const candidate = TIP_CATALOG[idx]; if (!dismissedIds.has(candidate.id) && this._isEligible(candidate, contextKeyService)) { + this._logTipTelemetry(this._shownTip.id, direction === 1 ? 'navigateNext' : 'navigatePrevious'); this._shownTip = candidate; this._tipRequestId = 'welcome'; this._storageService.store(ChatTipService._LAST_TIP_ID_KEY, candidate.id, StorageScope.APPLICATION, StorageTarget.USER); + this._logTipTelemetry(candidate.id, 'shown'); + this._trackTipCommandClicks(candidate); const tip = this._createTip(candidate); this._onDidNavigateTip.fire(tip); return tip; @@ -932,6 +963,27 @@ export class ChatTipService extends Disposable implements IChatTipService { }; } + private _logTipTelemetry(tipId: string, action: string, commandId?: string): void { + this._telemetryService.publicLog2('chatTip', { + tipId, + action, + commandId, + }); + } + + private _trackTipCommandClicks(tip: ITipDefinition): void { + this._tipCommandListener.clear(); + if (!tip.enabledCommands?.length) { + return; + } + const enabledCommandSet = new Set(tip.enabledCommands); + this._tipCommandListener.value = this._commandService.onDidExecuteCommand(e => { + if (enabledCommandSet.has(e.commandId) && this._shownTip?.id === tip.id) { + this._logTipTelemetry(tip.id, 'commandClicked', e.commandId); + } + }); + } + private _readApplicationWithProfileFallback(key: string): string | undefined { const applicationValue = this._storageService.get(key, StorageScope.APPLICATION); if (applicationValue) { diff --git a/src/vs/workbench/contrib/chat/test/browser/chatTipService.test.ts b/src/vs/workbench/contrib/chat/test/browser/chatTipService.test.ts index df645e77bea4d..b1c79a5e6e621 100644 --- a/src/vs/workbench/contrib/chat/test/browser/chatTipService.test.ts +++ b/src/vs/workbench/contrib/chat/test/browser/chatTipService.test.ts @@ -31,6 +31,8 @@ import { CreateSlashCommandsUsageTracker } from '../../browser/createSlashComman import { ChatRequestSlashCommandPart } from '../../common/requestParser/chatParserTypes.js'; import { OffsetRange } from '../../../../../editor/common/core/ranges/offsetRange.js'; import { Range } from '../../../../../editor/common/core/range.js'; +import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; +import { NullTelemetryService } from '../../../../../platform/telemetry/common/telemetryUtils.js'; class MockContextKeyServiceWithRulesMatching extends MockContextKeyService { override contextMatchesRules(rules: ContextKeyExpression): boolean { @@ -99,6 +101,7 @@ suite('ChatTipService', () => { instantiationService.stub(ILanguageModelToolsService, testDisposables.add(new MockLanguageModelToolsService())); instantiationService.stub(IChatEntitlementService, new TestChatEntitlementService()); instantiationService.stub(IChatService, new MockChatService()); + instantiationService.stub(ITelemetryService, NullTelemetryService); }); test('returns a welcome tip', () => { @@ -924,6 +927,135 @@ suite('ChatTipService', () => { }); } + test('logs telemetry when tip is shown', () => { + const events: { eventName: string; data: Record }[] = []; + instantiationService.stub(ITelemetryService, { + ...NullTelemetryService, + publicLog2(eventName: string, data: Record) { + events.push({ eventName, data }); + }, + } as Partial as ITelemetryService); + + const service = createService(); + const tip = service.getWelcomeTip(contextKeyService); + assert.ok(tip); + + const shownEvents = events.filter(e => e.data.action === 'shown'); + assert.strictEqual(shownEvents.length, 1, 'Should log exactly one shown event'); + assert.strictEqual(shownEvents[0].eventName, 'chatTip'); + assert.strictEqual(shownEvents[0].data.tipId, tip.id); + }); + + test('logs telemetry when tip is dismissed', () => { + const events: { eventName: string; data: Record }[] = []; + instantiationService.stub(ITelemetryService, { + ...NullTelemetryService, + publicLog2(eventName: string, data: Record) { + events.push({ eventName, data }); + }, + } as Partial as ITelemetryService); + + const service = createService(); + const tip = service.getWelcomeTip(contextKeyService); + assert.ok(tip); + + service.dismissTip(); + + const dismissEvents = events.filter(e => e.data.action === 'dismissed'); + assert.strictEqual(dismissEvents.length, 1, 'Should log exactly one dismissed event'); + assert.strictEqual(dismissEvents[0].data.tipId, tip.id); + }); + + test('logs telemetry when navigating tips', () => { + const events: { eventName: string; data: Record }[] = []; + instantiationService.stub(ITelemetryService, { + ...NullTelemetryService, + publicLog2(eventName: string, data: Record) { + events.push({ eventName, data }); + }, + } as Partial as ITelemetryService); + + const service = createService(); + const tip = service.getWelcomeTip(contextKeyService); + assert.ok(tip); + + const nextTip = service.navigateToNextTip(); + assert.ok(nextTip); + + const navigateEvents = events.filter(e => e.data.action === 'navigateNext'); + assert.strictEqual(navigateEvents.length, 1, 'Should log one navigateNext event'); + assert.strictEqual(navigateEvents[0].data.tipId, tip.id, 'navigateNext should log the tip being navigated away from'); + + const shownEvents = events.filter(e => e.data.action === 'shown'); + assert.strictEqual(shownEvents.length, 2, 'Should log shown for initial and navigated tip'); + assert.strictEqual(shownEvents[1].data.tipId, nextTip.id); + }); + + test('logs telemetry when tip command is clicked', () => { + const events: { eventName: string; data: Record }[] = []; + instantiationService.stub(ITelemetryService, { + ...NullTelemetryService, + publicLog2(eventName: string, data: Record) { + events.push({ eventName, data }); + }, + } as Partial as ITelemetryService); + + const service = createService(); + const tip = service.getWelcomeTip(contextKeyService); + assert.ok(tip); + + if (tip.enabledCommands?.length) { + commandExecutedEmitter.fire({ commandId: tip.enabledCommands[0], args: [] }); + + const clickEvents = events.filter(e => e.data.action === 'commandClicked'); + assert.strictEqual(clickEvents.length, 1, 'Should log one commandClicked event'); + assert.strictEqual(clickEvents[0].data.tipId, tip.id); + assert.strictEqual(clickEvents[0].data.commandId, tip.enabledCommands[0]); + } else { + assert.fail('Tip has no enabled commands; cannot test command click telemetry'); + } + }); + + test('logs telemetry when tip is hidden', () => { + const events: { eventName: string; data: Record }[] = []; + instantiationService.stub(ITelemetryService, { + ...NullTelemetryService, + publicLog2(eventName: string, data: Record) { + events.push({ eventName, data }); + }, + } as Partial as ITelemetryService); + + const service = createService(); + const tip = service.getWelcomeTip(contextKeyService); + assert.ok(tip); + + service.hideTip(); + + const hiddenEvents = events.filter(e => e.data.action === 'hidden'); + assert.strictEqual(hiddenEvents.length, 1, 'Should log one hidden event'); + assert.strictEqual(hiddenEvents[0].data.tipId, tip.id); + }); + + test('logs telemetry when tips are disabled', async () => { + const events: { eventName: string; data: Record }[] = []; + instantiationService.stub(ITelemetryService, { + ...NullTelemetryService, + publicLog2(eventName: string, data: Record) { + events.push({ eventName, data }); + }, + } as Partial as ITelemetryService); + + const service = createService(); + const tip = service.getWelcomeTip(contextKeyService); + assert.ok(tip); + + await service.disableTips(); + + const disabledEvents = events.filter(e => e.data.action === 'disabled'); + assert.strictEqual(disabledEvents.length, 1, 'Should log one disabled event'); + assert.strictEqual(disabledEvents[0].data.tipId, tip.id); + }); + test('excludeWhenSettingsChanged checks workspaceValue', () => { const workspaceConfigService = new TestConfigurationService(); const originalInspect = workspaceConfigService.inspect.bind(workspaceConfigService); From 9a3a7aaa1330e315606897b76b842ae78052827d Mon Sep 17 00:00:00 2001 From: David Dossett <25163139+daviddossett@users.noreply.github.com> Date: Fri, 20 Feb 2026 10:14:24 -0800 Subject: [PATCH 10/37] Move mode badge and timestamp to bottom row in session list items (#296560) - Move status container (provider icon + timestamp) from title row to details row - Move badge and separator into a right-aligned wrapper in the details row - Let session title span full width of the top row - Increase list item height from 48 to 54px - Add more padding between title and details rows - Only show title margin-right on hover when toolbar is visible - Remove mask fade from title and description --- .../agentSessions/agentSessionsViewer.ts | 21 +++++++------- .../media/agentsessionsviewer.css | 28 +++++++++---------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts index 3743ead31ab9c..9dbb758b4068e 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts @@ -112,10 +112,6 @@ export class AgentSessionRenderer extends Disposable implements ICompressibleTre h('div.agent-session-main-col', [ h('div.agent-session-title-row', [ h('div.agent-session-title@title'), - h('div.agent-session-status@statusContainer', [ - h('span.agent-session-status-provider-icon@statusProviderIcon'), - h('span.agent-session-status-time@statusTime') - ]), h('div.agent-session-title-toolbar@titleToolbar'), ]), h('div.agent-session-details-row', [ @@ -124,9 +120,15 @@ export class AgentSessionRenderer extends Disposable implements ICompressibleTre h('span.agent-session-diff-added@addedSpan'), h('span.agent-session-diff-removed@removedSpan') ]), - h('div.agent-session-badge@badge'), - h('span.agent-session-separator@separator'), h('div.agent-session-description@description'), + h('div.agent-session-details-right', [ + h('div.agent-session-badge@badge'), + h('span.agent-session-separator@separator'), + h('div.agent-session-status@statusContainer', [ + h('span.agent-session-status-provider-icon@statusProviderIcon'), + h('span.agent-session-status-time@statusTime') + ]), + ]), ]) ]) ] @@ -219,9 +221,8 @@ export class AgentSessionRenderer extends Disposable implements ICompressibleTre this.renderDescription(session, template, hasBadge); } - // Separator (dot between badge and description) - const hasDescription = template.description.textContent !== ''; - template.separator.classList.toggle('has-separator', hasBadge && hasDescription); + // Separator (dot between badge and timestamp) + template.separator.classList.toggle('has-separator', hasBadge); // Status this.renderStatus(session, template); @@ -508,7 +509,7 @@ export class AgentSessionSectionRenderer implements ICompressibleTreeRenderer { - static readonly ITEM_HEIGHT = 48; + static readonly ITEM_HEIGHT = 54; static readonly SECTION_HEIGHT = 26; getHeight(element: AgentSessionListItem): number { diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css b/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css index b9863aae7dcbc..0432fdba3eb15 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css @@ -44,10 +44,6 @@ color: unset; } - .monaco-list-row.selected .agent-session-status { - color: unset; - } - .monaco-list:not(:focus) .monaco-list-row.selected .agent-session-details-row { color: var(--vscode-descriptionForeground); } @@ -66,7 +62,7 @@ } } - /* On hover or keyboard focus: show toolbar, hide status */ + /* On hover or keyboard focus: show toolbar */ .monaco-list-row:hover, .monaco-list-row.focused { @@ -74,15 +70,15 @@ display: block; } - .agent-session-status { - display: none; + .agent-session-title { + margin-right: 8px; } } .agent-session-item { display: flex; flex-direction: row; - padding: 6px 6px; + padding: 8px 6px; &.archived { color: var(--vscode-descriptionForeground); @@ -143,7 +139,7 @@ .agent-session-title-row { line-height: 17px; - padding-bottom: 4px; + padding-bottom: 6px; } .agent-session-details-row { @@ -227,21 +223,25 @@ flex: 1; overflow: hidden; white-space: nowrap; - margin-right: 16px; - mask-image: linear-gradient(to right, black calc(100% - 32px), transparent); - -webkit-mask-image: linear-gradient(to right, black calc(100% - 32px), transparent); } .agent-session-title { font-size: 13px; } + .agent-session-details-right { + display: flex; + align-items: center; + gap: 4px; + margin-left: auto; + white-space: nowrap; + flex-shrink: 0; + } + .agent-session-status { display: flex; align-items: center; font-variant-numeric: tabular-nums; - font-size: 12px; - color: var(--vscode-descriptionForeground); white-space: nowrap; .agent-session-status-provider-icon { From 4eb8f169e584e5aa74e430b630484d7ee3215b8f Mon Sep 17 00:00:00 2001 From: David Dossett <25163139+daviddossett@users.noreply.github.com> Date: Fri, 20 Feb 2026 10:23:22 -0800 Subject: [PATCH 11/37] Update chat input: hide attachments bar, move/restyle context window hint (#296390) * Simplify chat input: hide attachments bar, move context usage widget - Hide attachments bar by default, only show with manual attachments - Remove Add Files button entirely - Stop rendering implicit context pill (data still collected/sent) - Move context usage pie widget from top-right to bottom toolbar - Make input editor 2 lines tall by default (non-compact mode) * fix: chat input toolbar icons use icon-foreground instead of foreground - Move Add Context action to ChatInput menu alongside tools button - Fix theme-2026 styles.css override that stomped toolbar codicon color with --vscode-foreground; now uses --vscode-icon-foreground - Add matching icon-foreground override in chat.css for specificity safety - Switch context usage indicator from pie chart to stroke-based ring - Account for context usage widget width in toolbar layout calculation - Set explicit ordering for toolbar sections (input, context usage, execute) * fix: remove unused isAttachmentAlreadyAttached method and dead imports * fix: derive input min height from editor options instead of hardcoded values * fix: remove dead ChatInputAttachmentToolbar menu registration * fix: show attach context in execute toolbar for quick chat, not input toolbar --- extensions/theme-2026/themes/styles.css | 4 +- .../browser/actions/chatContextActions.ts | 22 ++- .../browser/widget/input/chatInputPart.ts | 146 +++--------------- .../chat/browser/widget/media/chat.css | 73 ++++----- .../viewPane/chatContextUsageWidget.ts | 64 +++----- .../viewPane/media/chatContextUsageWidget.css | 31 ++-- 6 files changed, 107 insertions(+), 233 deletions(-) diff --git a/extensions/theme-2026/themes/styles.css b/extensions/theme-2026/themes/styles.css index af89d698f9c12..c1bc21f212125 100644 --- a/extensions/theme-2026/themes/styles.css +++ b/extensions/theme-2026/themes/styles.css @@ -492,10 +492,10 @@ color: var(--vscode-icon-foreground) !important; } -/* Chat input toolbar icons should use proper foreground color, not the muted icon.foreground */ +/* Chat input toolbar icons should follow icon foreground token */ .monaco-workbench .interactive-session .chat-input-toolbars .monaco-action-bar .action-item .codicon, .monaco-workbench .interactive-session .chat-input-toolbars .action-label .codicon { - color: var(--vscode-foreground) !important; + color: var(--vscode-icon-foreground) !important; } /* Buttons */ diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.ts index 5542c4cad88be..45fe30497775d 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.ts @@ -465,15 +465,16 @@ export class AttachContextAction extends Action2 { super({ id: 'workbench.action.chat.attachContext', title: localize2('workbench.action.chat.attachContext.label.2', "Add Context..."), - icon: Codicon.attach, + icon: Codicon.add, category: CHAT_CATEGORY, keybinding: { when: ContextKeyExpr.and(ChatContextKeys.inChatInput, ChatContextKeys.location.isEqualTo(ChatAgentLocation.Chat)), primary: KeyMod.CtrlCmd | KeyCode.Slash, weight: KeybindingWeight.EditorContrib }, - menu: { + menu: [{ when: ContextKeyExpr.and( + ChatContextKeys.inQuickChat.negate(), ContextKeyExpr.or( ChatContextKeys.location.isEqualTo(ChatAgentLocation.Chat), ContextKeyExpr.and(ChatContextKeys.location.isEqualTo(ChatAgentLocation.EditorInline), CTX_INLINE_CHAT_V2_ENABLED) @@ -483,10 +484,21 @@ export class AttachContextAction extends Action2 { ChatContextKeys.agentSupportsAttachments ) ), - id: MenuId.ChatInputAttachmentToolbar, + id: MenuId.ChatInput, group: 'navigation', - order: 3 - }, + order: 101 + }, { + when: ContextKeyExpr.and( + ChatContextKeys.inQuickChat, + ContextKeyExpr.or( + ChatContextKeys.lockedToCodingAgent.negate(), + ChatContextKeys.agentSupportsAttachments + ) + ), + id: MenuId.ChatExecute, + group: 'navigation', + order: -1 + }], }); } diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts index 388ec5fb65589..aa98e73062c3a 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts @@ -13,7 +13,6 @@ import * as aria from '../../../../../../base/browser/ui/aria/aria.js'; import { ButtonWithIcon } from '../../../../../../base/browser/ui/button/button.js'; import { createInstantHoverDelegate } from '../../../../../../base/browser/ui/hover/hoverDelegateFactory.js'; import { HoverPosition } from '../../../../../../base/browser/ui/hover/hoverWidget.js'; -import { renderLabelWithIcons } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js'; import { IAction } from '../../../../../../base/common/actions.js'; import { equals as arraysEqual } from '../../../../../../base/common/arrays.js'; import { DeferredPromise, RunOnceScheduler } from '../../../../../../base/common/async.js'; @@ -32,15 +31,13 @@ import { autorun, derived, derivedOpts, IObservable, ISettableObservable, observ import { isMacintosh } from '../../../../../../base/common/platform.js'; import { isEqual } from '../../../../../../base/common/resources.js'; import { ScrollbarVisibility } from '../../../../../../base/common/scrollable.js'; -import { assertType } from '../../../../../../base/common/types.js'; import { URI } from '../../../../../../base/common/uri.js'; import { IEditorConstructionOptions } from '../../../../../../editor/browser/config/editorConfiguration.js'; import { EditorExtensionsRegistry } from '../../../../../../editor/browser/editorExtensions.js'; import { CodeEditorWidget } from '../../../../../../editor/browser/widget/codeEditor/codeEditorWidget.js'; -import { EditorLayoutInfo, EditorOptions, IEditorOptions } from '../../../../../../editor/common/config/editorOptions.js'; +import { EditorLayoutInfo, EditorOption, EditorOptions, IEditorOptions } from '../../../../../../editor/common/config/editorOptions.js'; import { IDimension } from '../../../../../../editor/common/core/2d/dimension.js'; import { IPosition } from '../../../../../../editor/common/core/position.js'; -import { IRange, Range } from '../../../../../../editor/common/core/range.js'; import { isLocation } from '../../../../../../editor/common/languages.js'; import { ITextModel } from '../../../../../../editor/common/model.js'; import { IModelService } from '../../../../../../editor/common/services/model.js'; @@ -83,7 +80,7 @@ import { getSimpleCodeEditorWidgetOptions, getSimpleEditorOptions, setupSimpleEd import { InlineChatConfigKeys } from '../../../../inlineChat/common/inlineChat.js'; import { IChatViewTitleActionContext } from '../../../common/actions/chatActions.js'; import { ChatContextKeys } from '../../../common/actions/chatContextKeys.js'; -import { ChatRequestVariableSet, IChatRequestVariableEntry, isElementVariableEntry, isImageVariableEntry, isNotebookOutputVariableEntry, isPasteVariableEntry, isPromptFileVariableEntry, isPromptTextVariableEntry, isSCMHistoryItemChangeRangeVariableEntry, isSCMHistoryItemChangeVariableEntry, isSCMHistoryItemVariableEntry, isStringVariableEntry } from '../../../common/attachments/chatVariableEntries.js'; +import { ChatRequestVariableSet, IChatRequestVariableEntry, isElementVariableEntry, isImageVariableEntry, isNotebookOutputVariableEntry, isPasteVariableEntry, isPromptFileVariableEntry, isPromptTextVariableEntry, isSCMHistoryItemChangeRangeVariableEntry, isSCMHistoryItemChangeVariableEntry, isSCMHistoryItemVariableEntry } from '../../../common/attachments/chatVariableEntries.js'; import { ChatMode, IChatMode, IChatModeService } from '../../../common/chatModes.js'; import { IChatFollowup, IChatQuestionCarousel, IChatService, IChatSessionContext } from '../../../common/chatService/chatService.js'; import { agentOptionId, IChatSessionProviderOptionGroup, IChatSessionProviderOptionItem, IChatSessionsService, isIChatSessionFileChange2, localChatSessionType } from '../../../common/chatSessionsService.js'; @@ -104,7 +101,6 @@ import { ChatAttachmentModel } from '../../attachments/chatAttachmentModel.js'; import { IChatAttachmentWidgetRegistry } from '../../attachments/chatAttachmentWidgetRegistry.js'; import { DefaultChatAttachmentWidget, ElementChatAttachmentWidget, FileAttachmentWidget, ImageAttachmentWidget, NotebookCellOutputChatAttachmentWidget, PasteAttachmentWidget, PromptFileAttachmentWidget, PromptTextAttachmentWidget, SCMHistoryItemAttachmentWidget, SCMHistoryItemChangeAttachmentWidget, SCMHistoryItemChangeRangeAttachmentWidget, TerminalCommandAttachmentWidget, ToolSetOrToolItemAttachmentWidget } from '../../attachments/chatAttachmentWidgets.js'; import { ChatImplicitContexts } from '../../attachments/chatImplicitContext.js'; -import { ImplicitContextAttachmentWidget } from '../../attachments/implicitContextAttachment.js'; import { IChatWidget, IChatWidgetViewModelChangeEvent, ISessionTypePickerDelegate, isIChatResourceViewContext, isIChatViewViewContext, IWorkspacePickerDelegate } from '../../chat.js'; import { ChatEditingShowChangesAction, ViewAllSessionChangesAction, ViewPreviousEditsAction } from '../../chatEditing/chatEditingActions.js'; import { resizeImage } from '../../chatImageUtils.js'; @@ -133,6 +129,7 @@ import { EnhancedModelPickerActionItem } from './modelPickerActionItem2.js'; const $ = dom.$; const INPUT_EDITOR_MAX_HEIGHT = 250; +const INPUT_EDITOR_MIN_VISIBLE_LINES = 2; const CachedLanguageModelsKey = 'chat.cachedLanguageModels.v2'; export interface IChatInputStyles { @@ -235,8 +232,6 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge private _onDidClickOverlay = this._register(new Emitter()); readonly onDidClickOverlay: Event = this._onDidClickOverlay.event; - private readonly _implicitContextWidget: MutableDisposable = this._register(new MutableDisposable()); - private readonly _attachmentModel: ChatAttachmentModel; private _widget?: IChatWidget; public get attachmentModel(): ChatAttachmentModel { @@ -332,8 +327,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge private executeToolbar!: MenuWorkbenchToolBar; private inputActionsToolbar!: MenuWorkbenchToolBar; - private addFilesToolbar: MenuWorkbenchToolBar | undefined; - private addFilesButton: AddFilesButton | undefined; + get inputEditor() { return this._inputEditor; @@ -1944,13 +1938,13 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge dom.h('.chat-getting-started-tip-container@chatGettingStartedTipContainer'), dom.h('.interactive-input-and-side-toolbar@inputAndSideToolbar', [ dom.h('.chat-input-container@inputContainer', [ - dom.h('.chat-context-usage-container@contextUsageWidgetContainer'), dom.h('.chat-editor-container@editorContainer'), - dom.h('.chat-input-toolbars@inputToolbars'), + dom.h('.chat-input-toolbars@inputToolbars', [ + dom.h('.chat-context-usage-container@contextUsageWidgetContainer'), + ]), ]), ]), dom.h('.chat-attachments-container@attachmentsContainer', [ - dom.h('.chat-attachment-toolbar@attachmentToolbar'), dom.h('.chat-attached-context@attachedContextContainer'), ]), dom.h('.interactive-input-followups@followupsContainer'), @@ -1966,13 +1960,13 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge dom.h('.chat-getting-started-tip-container@chatGettingStartedTipContainer'), dom.h('.interactive-input-and-side-toolbar@inputAndSideToolbar', [ dom.h('.chat-input-container@inputContainer', [ - dom.h('.chat-context-usage-container@contextUsageWidgetContainer'), dom.h('.chat-attachments-container@attachmentsContainer', [ - dom.h('.chat-attachment-toolbar@attachmentToolbar'), dom.h('.chat-attached-context@attachedContextContainer'), ]), dom.h('.chat-editor-container@editorContainer'), - dom.h('.chat-input-toolbars@inputToolbars'), + dom.h('.chat-input-toolbars@inputToolbars', [ + dom.h('.chat-context-usage-container@contextUsageWidgetContainer'), + ]), ]), ]), ]); @@ -1995,7 +1989,6 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge this.attachmentsContainer = elements.attachmentsContainer; this.attachedContextContainer = elements.attachedContextContainer; const toolbarsContainer = elements.inputToolbars; - const attachmentToolbarContainer = elements.attachmentToolbar; this.chatEditingSessionWidgetContainer = elements.chatEditingSessionWidgetContainer; this.chatInputTodoListWidgetContainer = elements.chatInputTodoListWidgetContainer; this.chatGettingStartedTipContainer = elements.chatGettingStartedTipContainer; @@ -2004,7 +1997,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge this.chatInputWidgetsContainer = elements.chatInputWidgetsContainer; this.contextUsageWidgetContainer = elements.contextUsageWidgetContainer; - // Context usage widget + // Context usage widget — will be positioned in the toolbar after toolbars are created this.contextUsageWidget = this._register(this.instantiationService.createInstance(ChatContextUsageWidget)); this.contextUsageWidgetContainer.appendChild(this.contextUsageWidget.domNode); @@ -2337,23 +2330,6 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge this.renderAttachedContext(); })); - this.addFilesToolbar = this._register(this.instantiationService.createInstance(MenuWorkbenchToolBar, attachmentToolbarContainer, MenuId.ChatInputAttachmentToolbar, { - telemetrySource: this.options.menus.telemetrySource, - label: true, - menuOptions: { shouldForwardArgs: true, renderShortTitle: true }, - hiddenItemStrategy: HiddenItemStrategy.NoHide, - hoverDelegate, - actionViewItemProvider: (action, options) => { - if (action.id === 'workbench.action.chat.attachContext') { - const viewItem = this.instantiationService.createInstance(AddFilesButton, this._attachmentModel, action, options); - viewItem.setShowLabel(this._attachmentModel.size === 0 && !this._implicitContextWidget.value?.hasRenderedContexts); - this.addFilesButton = viewItem; - return this.addFilesButton; - } - return undefined; - } - })); - this.addFilesToolbar.context = { widget, placeholder: localize('chatAttachFiles', 'Search for files and context to add to your request') }; this.renderAttachedContext(); const inputResizeObserver = this._register(new dom.DisposableResizeObserver(() => { @@ -2400,15 +2376,14 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge })); const attachments = [...this.attachmentModel.attachments.entries()]; - const hasAttachments = Boolean(attachments.length) || Boolean(this.implicitContext?.hasValue); - dom.setVisibility(Boolean(this.options.renderInputToolbarBelowInput || hasAttachments || (this.addFilesToolbar && !this.addFilesToolbar.isEmpty())), this.attachmentsContainer); + const hasAttachments = Boolean(attachments.length); + dom.setVisibility(Boolean(this.options.renderInputToolbarBelowInput || hasAttachments), this.attachmentsContainer); dom.setVisibility(hasAttachments, this.attachedContextContainer); if (!attachments.length) { this._indexOfLastAttachedContextDeletedWithKeyboard = -1; this._indexOfLastOpenedContext = -1; } - const isSuggestedEnabled = this.configurationService.getValue('chat.implicitContext.suggestedContext'); for (const [index, attachment] of attachments) { const resource = URI.isUri(attachment.value) ? attachment.value : isLocation(attachment.value) ? attachment.value.uri : undefined; @@ -2465,54 +2440,9 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge })); } - if (isSuggestedEnabled && this.implicitContext?.hasValue) { - this._implicitContextWidget.value = this.instantiationService.createInstance(ImplicitContextAttachmentWidget, () => this._widget, (targetUri: URI | undefined, targetRange: IRange | undefined, targetHandle: number | undefined) => this.isAttachmentAlreadyAttached(targetUri, targetRange, targetHandle, attachments.map(([, a]) => a)), this.implicitContext, this._contextResourceLabels, this._attachmentModel, container); - } else { - this._implicitContextWidget.clear(); - } - - this.addFilesButton?.setShowLabel(this._attachmentModel.size === 0 && !this._implicitContextWidget.value?.hasRenderedContexts); - this._indexOfLastOpenedContext = -1; } - private isAttachmentAlreadyAttached(targetUri: URI | undefined, targetRange: IRange | undefined, targetHandle: number | undefined, attachments: IChatRequestVariableEntry[]): boolean { - return attachments.some((attachment) => { - let uri: URI | undefined; - let range: IRange | undefined; - let handle: number | undefined; - - if (URI.isUri(attachment.value)) { - uri = attachment.value; - } else if (isLocation(attachment.value)) { - uri = attachment.value.uri; - range = attachment.value.range; - } else if (isStringVariableEntry(attachment)) { - uri = attachment.uri; - handle = attachment.handle; - } - - if ((handle !== undefined && targetHandle === undefined) || (handle === undefined && targetHandle !== undefined)) { - return false; - } - - if (handle !== undefined && targetHandle !== undefined && handle !== targetHandle) { - return false; - } - - if (!uri || !isEqual(uri, targetUri)) { - return false; - } - - // check if the exact range is already attached - if (targetRange) { - return range && Range.equalsRange(range, targetRange); - } - - return true; - }); - } - private handleAttachmentDeletion(e: KeyboardEvent | unknown, index: number, attachment: IChatRequestVariableEntry) { // Set focus to the next attached context item if deletion was triggered by a keystroke (vs a mouse click) if (dom.isKeyboardEvent(e)) { @@ -2555,20 +2485,12 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge return; } - // eslint-disable-next-line no-restricted-syntax - const toolbar = this.addFilesToolbar?.getElement().querySelector('.action-label'); - if (!toolbar) { - return; - } - // eslint-disable-next-line no-restricted-syntax const attachments = Array.from(this.attachedContextContainer.querySelectorAll('.chat-attached-context-attachment')); if (!attachments.length) { return; } - attachments.unshift(toolbar); - const activeElement = dom.getWindow(this.attachmentsContainer).document.activeElement; const currentIndex = attachments.findIndex(attachment => attachment === activeElement); let newIndex = currentIndex; @@ -3029,7 +2951,10 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge const initialEditorScrollWidth = this._inputEditor.getScrollWidth(); const newEditorWidth = width - data.inputPartHorizontalPadding - data.editorBorder - data.inputPartHorizontalPaddingInside - data.toolbarsWidth - data.sideToolbarWidth; - const inputEditorHeight = Math.min(this._inputEditor.getContentHeight(), this.inputEditorMaxHeight); + const lineHeight = this._inputEditor.getOption(EditorOption.lineHeight); + const { top, bottom } = this._inputEditor.getOption(EditorOption.padding); + const inputEditorMinHeight = this.options.renderStyle === 'compact' ? 0 : (lineHeight * INPUT_EDITOR_MIN_VISIBLE_LINES) + top + bottom; + const inputEditorHeight = Math.max(inputEditorMinHeight, Math.min(this._inputEditor.getContentHeight(), this.inputEditorMaxHeight)); const newDimension = { width: newEditorWidth, height: inputEditorHeight }; if (!this.previousInputEditorDimension || (this.previousInputEditorDimension.width !== newDimension.width || this.previousInputEditorDimension.height !== newDimension.height)) { // This layout call has side-effects that are hard to understand. eg if we are calling this inside a onDidChangeContent handler, this can trigger the next onDidChangeContent handler @@ -3063,7 +2988,8 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge const inputToolbarWidth = this.cachedInputToolbarWidth = this.inputActionsToolbar.getItemsWidth(); const executeToolbarPadding = (this.executeToolbar.getItemsLength() - 1) * 4; const inputToolbarPadding = this.inputActionsToolbar.getItemsLength() ? (this.inputActionsToolbar.getItemsLength() - 1) * 4 : 0; - return executeToolbarWidth + executeToolbarPadding + (this.options.renderInputToolbarBelowInput ? 0 : inputToolbarWidth + inputToolbarPadding); + const contextUsageWidth = dom.getTotalWidth(this.contextUsageWidgetContainer); + return executeToolbarWidth + executeToolbarPadding + contextUsageWidth + (this.options.renderInputToolbarBelowInput ? 0 : inputToolbarWidth + inputToolbarPadding); }; return { @@ -3152,37 +3078,3 @@ class ChatSessionPickersContainerActionItem extends ActionViewItem { super.dispose(); } } - -class AddFilesButton extends ActionViewItem { - private showLabel: boolean | undefined; - - constructor(context: unknown, action: IAction, options: IActionViewItemOptions) { - super(context, action, { - ...options, - icon: false, - label: true, - keybindingNotRenderedWithLabel: true, - }); - } - - public setShowLabel(show: boolean): void { - this.showLabel = show; - this.updateLabel(); - } - - override render(container: HTMLElement): void { - container.classList.add('chat-attachment-button'); - super.render(container); - this.updateLabel(); - } - - protected override updateLabel(): void { - if (!this.label) { - return; - } - assertType(this.label); - this.label.classList.toggle('has-label', this.showLabel); - const message = this.showLabel ? `$(attach) ${this.action.label}` : `$(attach)`; - dom.reset(this.label, ...renderLabelWithIcons(message)); - } -} diff --git a/src/vs/workbench/contrib/chat/browser/widget/media/chat.css b/src/vs/workbench/contrib/chat/browser/widget/media/chat.css index 7b0efa3c09121..b10b74d14fff9 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +++ b/src/vs/workbench/contrib/chat/browser/widget/media/chat.css @@ -804,17 +804,16 @@ have to be updated for changes to the rules above, or to support more deeply nes position: relative; } -/* Context usage widget container - positioned at top right of chat input */ -.interactive-session .chat-input-container .chat-context-usage-container { - position: absolute; - top: 4px; - right: 6px; - z-index: 1; +/* Context usage widget container - positioned in the bottom toolbar */ +.interactive-session .chat-input-toolbars .chat-context-usage-container { + display: flex; + align-items: center; + flex-shrink: 0; + order: 1; } -/* Hide context usage widget in compact mode (quick chat) */ -.interactive-session .interactive-input-part.compact .chat-context-usage-container { - display: none; +.interactive-session .chat-input-toolbars > .chat-execute-toolbar { + order: 2; } .interactive-input-part:has(.chat-editing-session > .chat-editing-session-container) .chat-input-container, @@ -1007,7 +1006,6 @@ have to be updated for changes to the rules above, or to support more deeply nes flex-direction: row; gap: 4px; margin-top: 6px; - margin-right: 20px; flex-wrap: wrap; cursor: default; } @@ -1302,6 +1300,8 @@ have to be updated for changes to the rules above, or to support more deeply nes .interactive-session .chat-input-toolbars { display: flex; + align-items: center; + gap: 6px; } .interactive-session .chat-input-toolbars :not(.responsive.chat-input-toolbar) .actions-container:first-child { @@ -1321,9 +1321,15 @@ have to be updated for changes to the rules above, or to support more deeply nes } .interactive-session .chat-input-toolbars > .chat-input-toolbar { + order: 0; overflow: hidden; min-width: 0px; width: 100%; + color: var(--vscode-icon-foreground); + + .monaco-action-bar .action-item .codicon { + color: var(--vscode-icon-foreground); + } .chat-input-picker-item { min-width: 0px; @@ -1382,7 +1388,7 @@ have to be updated for changes to the rules above, or to support more deeply nes padding: 3px 0px 3px 6px; display: flex; align-items: center; - color: var(--vscode-foreground); + color: var(--vscode-icon-foreground); } .monaco-workbench .interactive-session .chat-input-toolbar .chat-input-picker-item .action-label .codicon-chevron-down, @@ -1401,6 +1407,16 @@ have to be updated for changes to the rules above, or to support more deeply nes max-width: 100%; } +.monaco-workbench .interactive-session .chat-input-toolbars .monaco-action-bar .action-item .codicon, +.monaco-workbench .interactive-session .chat-input-toolbars .action-label .codicon { + color: var(--vscode-icon-foreground) !important; +} + +.monaco-workbench .interactive-session .chat-input-toolbars .monaco-action-bar .action-item.disabled .codicon, +.monaco-workbench .interactive-session .chat-input-toolbars .action-label.disabled .codicon { + color: var(--vscode-disabledForeground) !important; +} + .action-widget .monaco-list-row.chat-model-picker-unavailable .description a, .action-widget .monaco-list-row.chat-model-picker-unavailable .description a:visited { color: var(--vscode-textLink-foreground); @@ -1593,7 +1609,6 @@ have to be updated for changes to the rules above, or to support more deeply nes padding: 8px 0 0 0 } -.action-item.chat-attachment-button .action-label, .interactive-session .chat-attached-context .chat-attached-context-attachment { display: flex; overflow: hidden; @@ -1606,40 +1621,11 @@ have to be updated for changes to the rules above, or to support more deeply nes width: fit-content; } -.action-item.chat-attachment-button .action-label { - padding: 0 4px; -} - .interactive-session .interactive-list .chat-attached-context .chat-attached-context-attachment { font-family: var(--vscode-chat-font-family, inherit); font-size: var(--vscode-chat-font-size-body-xs); } -.action-item.chat-attachment-button > .action-label > .codicon { - font-size: 14px; - height: auto; -} - -.interactive-session .action-item.chat-attachment-button .action-label:not(.has-label) { - display: flex; - align-items: center; - justify-content: center; - padding: 2px 4px 2px 4px; - height: fit-content; - gap: 0; - border: 1px solid var(--vscode-chat-requestBorder, var(--vscode-input-background, transparent)); - border-radius: 4px; - box-sizing: border-box; - - .codicon { - width: 14px; - } -} - -.action-item.chat-attachment-button .codicon { - font-size: 14px; -} - .action-item.chat-mcp { min-width: 22px !important; @@ -1742,11 +1728,6 @@ have to be updated for changes to the rules above, or to support more deeply nes gap: 4px; } -.interactive-session .chat-attachment-toolbar .actions-container { - gap: 4px; - flex-wrap: wrap; -} - .interactive-session .interactive-input-part.compact .chat-attached-context { padding-bottom: 0px; display: flex; diff --git a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.ts b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.ts index 36c6db7e50d6d..b20f39c7cf678 100644 --- a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.ts @@ -27,71 +27,55 @@ import { KeyCode } from '../../../../../../base/common/keyCodes.js'; const $ = dom.$; /** - * A reusable circular progress indicator that displays a pie chart. - * The pie fills clockwise from the top based on the percentage value. + * A reusable circular progress indicator that displays a ring. + * The ring fills clockwise from the top based on the percentage value. */ export class CircularProgressIndicator { readonly domNode: SVGSVGElement; - private readonly progressPie: SVGPathElement; + private readonly progressCircle: SVGCircleElement; + private readonly circumference: number; private static readonly CENTER_X = 18; private static readonly CENTER_Y = 18; - private static readonly RADIUS = 16; + private static readonly RADIUS = 14; constructor() { + const r = CircularProgressIndicator.RADIUS; + this.circumference = 2 * Math.PI * r; + this.domNode = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); this.domNode.setAttribute('viewBox', '0 0 36 36'); this.domNode.classList.add('circular-progress'); - // Background circle (outline only) + // Background circle const bgCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); bgCircle.setAttribute('cx', String(CircularProgressIndicator.CENTER_X)); bgCircle.setAttribute('cy', String(CircularProgressIndicator.CENTER_Y)); - bgCircle.setAttribute('r', String(CircularProgressIndicator.RADIUS)); + bgCircle.setAttribute('r', String(r)); bgCircle.classList.add('progress-bg'); this.domNode.appendChild(bgCircle); - // Progress pie (filled arc) - this.progressPie = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - this.progressPie.classList.add('progress-pie'); - this.domNode.appendChild(this.progressPie); + // Progress arc (stroke-based ring) + this.progressCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); + this.progressCircle.setAttribute('cx', String(CircularProgressIndicator.CENTER_X)); + this.progressCircle.setAttribute('cy', String(CircularProgressIndicator.CENTER_Y)); + this.progressCircle.setAttribute('r', String(r)); + this.progressCircle.classList.add('progress-arc'); + this.progressCircle.setAttribute('stroke-dasharray', String(this.circumference)); + this.progressCircle.setAttribute('stroke-dashoffset', String(this.circumference)); + this.domNode.appendChild(this.progressCircle); } /** - * Updates the pie chart to display the given percentage (0-100). - * @param percentage The percentage of the pie to fill (clamped to 0-100) + * Updates the ring to display the given percentage (0-100). + * @param percentage The percentage of the ring to fill (clamped to 0-100) */ setProgress(percentage: number): void { - const cx = CircularProgressIndicator.CENTER_X; - const cy = CircularProgressIndicator.CENTER_Y; - const r = CircularProgressIndicator.RADIUS; - - if (percentage >= 100) { - // Full circle - use a circle element's path equivalent - this.progressPie.setAttribute('d', `M ${cx} ${cy - r} A ${r} ${r} 0 1 1 ${cx - 0.001} ${cy - r} Z`); - } else if (percentage <= 0) { - // Empty - no path - this.progressPie.setAttribute('d', ''); - } else { - // Calculate the arc endpoint - const angle = (percentage / 100) * 360; - const radians = (angle - 90) * (Math.PI / 180); // Start from top (-90 degrees) - const x = cx + r * Math.cos(radians); - const y = cy + r * Math.sin(radians); - const largeArcFlag = angle > 180 ? 1 : 0; - - // Create pie slice path: move to center, line to top, arc to endpoint, close - const d = [ - `M ${cx} ${cy}`, // Move to center - `L ${cx} ${cy - r}`, // Line to top - `A ${r} ${r} 0 ${largeArcFlag} 1 ${x} ${y}`, // Arc to endpoint - 'Z' // Close path back to center - ].join(' '); - - this.progressPie.setAttribute('d', d); - } + const clamped = Math.max(0, Math.min(100, percentage)); + const offset = this.circumference - (clamped / 100) * this.circumference; + this.progressCircle.setAttribute('stroke-dashoffset', String(offset)); } } diff --git a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageWidget.css b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageWidget.css index 9906a0b8171b6..c3abb1332f0de 100644 --- a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageWidget.css +++ b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageWidget.css @@ -8,6 +8,7 @@ align-items: center; justify-content: center; height: 22px; + width: 22px; flex-shrink: 0; cursor: pointer; padding: 3px; @@ -19,8 +20,8 @@ display: flex; align-items: center; justify-content: center; - width: 16px; - height: 16px; + width: 14px; + height: 14px; flex-shrink: 0; } @@ -46,22 +47,26 @@ } .chat-context-usage-widget .progress-bg { - fill: transparent; - stroke: var(--vscode-icon-foreground); - stroke-width: 2; - opacity: 0.4; + fill: none; + stroke: var(--vscode-disabledForeground); + stroke-width: 4; + opacity: 0.5; } -.chat-context-usage-widget .progress-pie { - fill: var(--vscode-icon-foreground); - opacity: 0.8; +.chat-context-usage-widget .progress-arc { + fill: none; + stroke: var(--vscode-descriptionForeground); + stroke-width: 4; + stroke-linecap: round; + transform: rotate(-90deg); + transform-origin: center; pointer-events: none; } -.chat-context-usage-widget.warning .progress-pie { - fill: var(--vscode-editorWarning-foreground); +.chat-context-usage-widget.warning .progress-arc { + stroke: var(--vscode-editorWarning-foreground); } -.chat-context-usage-widget.error .progress-pie { - fill: var(--vscode-editorError-foreground); +.chat-context-usage-widget.error .progress-arc { + stroke: var(--vscode-editorError-foreground); } From f433494e5e8d82817ed7cc801fe9a7215fd86e9b Mon Sep 17 00:00:00 2001 From: dileepyavan <52841896+dileepyavan@users.noreply.github.com> Date: Fri, 20 Feb 2026 10:24:38 -0800 Subject: [PATCH 12/37] Refer to ripgrep thats already included in the node modules. (#296335) * testing * Use VS Code's bundled ripgrep for sandboxed execution Fixes #294982 This change makes the sandboxed terminal execution use VS Code's bundled ripgrep binary instead of requiring users to manually install it. Changes: - Compute the ripgrep bin directory path from @vscode/ripgrep package - Add the ripgrep directory to PATH when wrapping sandbox commands - Update setting descriptions to remove ripgrep installation requirement * adding unit test --- .../terminalChatAgentToolsConfiguration.ts | 4 ++-- .../common/terminalSandboxService.ts | 17 ++++++++++------- .../test/browser/terminalSandboxService.test.ts | 12 ++++++++++++ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts index 059b63a92c5e5..e765fb499e529 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts @@ -551,7 +551,7 @@ export const terminalChatAgentToolsConfiguration: IStringDictionary { diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/terminalSandboxService.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/terminalSandboxService.test.ts index 55901336b328d..e48d807dec883 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/terminalSandboxService.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/terminalSandboxService.test.ts @@ -254,4 +254,16 @@ suite('TerminalSandboxService - allowTrustedDomains', () => { const config = JSON.parse(configContent); strictEqual(config.network.allowedDomains.length, 0, 'Should have no domains (* filtered out)'); }); + + test('should add ripgrep bin directory to PATH when wrapping command', async () => { + const sandboxService = store.add(instantiationService.createInstance(TerminalSandboxService)); + await sandboxService.getSandboxConfigPath(); + + const wrappedCommand = sandboxService.wrapCommand('echo test'); + + ok( + wrappedCommand.includes('PATH') && wrappedCommand.includes('ripgrep'), + 'Wrapped command should include PATH modification with ripgrep' + ); + }); }); From 7c127d91a54c89dcaf84fe62e3173c3e8b737855 Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Fri, 20 Feb 2026 19:48:01 +0100 Subject: [PATCH 13/37] Git - wire-up git repository state (#296563) * Initial implementation * Get the initial state working * Pull request feedback --- .../browser/mainThreadGitExtensionService.ts | 92 ++++++++++++-- .../workbench/api/common/extHost.protocol.ts | 26 +++- .../api/common/extHostGitExtensionService.ts | 113 ++++++++++++++++-- .../contrib/git/browser/gitService.ts | 61 ++++------ .../contrib/git/common/gitService.ts | 31 ++++- 5 files changed, 264 insertions(+), 59 deletions(-) diff --git a/src/vs/workbench/api/browser/mainThreadGitExtensionService.ts b/src/vs/workbench/api/browser/mainThreadGitExtensionService.ts index 99d5b415b922e..658b056c5c161 100644 --- a/src/vs/workbench/api/browser/mainThreadGitExtensionService.ts +++ b/src/vs/workbench/api/browser/mainThreadGitExtensionService.ts @@ -3,12 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from '../../../base/common/cancellation.js'; +import { Sequencer } from '../../../base/common/async.js'; import { CancellationToken } from '../../../base/common/cancellation.js'; import { Disposable } from '../../../base/common/lifecycle.js'; +import { ResourceMap } from '../../../base/common/map.js'; import { URI } from '../../../base/common/uri.js'; -import { IGitExtensionDelegate, IGitService, GitRef, GitRefQuery, GitRefType } from '../../contrib/git/common/gitService.js'; +import { GitRepository } from '../../contrib/git/browser/gitService.js'; +import { IGitExtensionDelegate, IGitService, GitRef, GitRefQuery, GitRefType, GitRepositoryState, GitBranch, IGitRepository } from '../../contrib/git/common/gitService.js'; import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; -import { ExtHostContext, ExtHostGitExtensionShape, GitRefTypeDto, MainContext, MainThreadGitExtensionShape } from '../common/extHost.protocol.js'; +import { ExtHostContext, ExtHostGitExtensionShape, GitRefTypeDto, GitRepositoryStateDto, MainContext, MainThreadGitExtensionShape } from '../common/extHost.protocol.js'; function toGitRefType(type: GitRefTypeDto): GitRefType { switch (type) { @@ -19,13 +21,35 @@ function toGitRefType(type: GitRefTypeDto): GitRefType { } } +function toGitRepositoryState(dto: GitRepositoryStateDto | undefined): GitRepositoryState { + return { + HEAD: dto?.HEAD ? { + type: toGitRefType(dto.HEAD.type), + name: dto.HEAD.name, + commit: dto.HEAD.commit, + remote: dto.HEAD.remote, + upstream: dto.HEAD.upstream, + ahead: dto.HEAD.ahead, + behind: dto.HEAD.behind, + } satisfies GitBranch : undefined, + }; +} + @extHostNamedCustomer(MainContext.MainThreadGitExtension) export class MainThreadGitExtensionService extends Disposable implements MainThreadGitExtensionShape, IGitExtensionDelegate { private readonly _proxy: ExtHostGitExtensionShape; + private readonly _openRepositorySequencer = new Sequencer(); + + private _repositoryHandles = new ResourceMap(); + private _repositories = new Map(); + + get repositories(): Iterable { + return this._repositories.values(); + } constructor( extHostContext: IExtHostContext, - @IGitService private readonly gitService: IGitService, + @IGitService private readonly gitService: IGitService ) { super(); @@ -44,13 +68,51 @@ export class MainThreadGitExtensionService extends Disposable implements MainThr } } - async openRepository(uri: URI): Promise { - const result = await this._proxy.$openRepository(uri); - return result ? URI.revive(result) : undefined; + private _getRepositoryByUri(uri: URI): IGitRepository | undefined { + const handle = this._repositoryHandles.get(uri); + return handle !== undefined ? this._repositories.get(handle) : undefined; + } + + async openRepository(uri: URI): Promise { + return this._openRepositorySequencer.queue(async () => { + // Check if we already have a repository for the given URI + const existingRepository = this._getRepositoryByUri(uri); + if (existingRepository) { + return existingRepository; + } + + // Open the repository + const result = await this._proxy.$openRepository(uri); + if (!result) { + return undefined; + } + + const repositoryRootUri = URI.revive(result.rootUri); + + // Check if we already have a repository for the given root + const existingRepositoryForRoot = this._getRepositoryByUri(repositoryRootUri); + if (existingRepositoryForRoot) { + return existingRepositoryForRoot; + } + + // Create a new repository and store it in the maps + const state = toGitRepositoryState(result.state); + const repository = new GitRepository(this, repositoryRootUri, state); + + this._repositories.set(result.handle, repository); + this._repositoryHandles.set(repositoryRootUri, result.handle); + + return repository; + }); } async getRefs(root: URI, query: GitRefQuery, token?: CancellationToken): Promise { - const result = await this._proxy.$getRefs(root, query, token); + const handle = this._repositoryHandles.get(root); + if (handle === undefined) { + return []; + } + + const result = await this._proxy.$getRefs(handle, query, token); if (token?.isCancellationRequested) { return []; @@ -61,4 +123,18 @@ export class MainThreadGitExtensionService extends Disposable implements MainThr type: toGitRefType(ref.type) } satisfies GitRef)); } + + async $onDidChangeRepository(handle: number): Promise { + const repository = this._repositories.get(handle); + if (!repository) { + return; + } + + const state = await this._proxy.$getRepositoryState(handle); + if (!state) { + return; + } + + repository.setState(toGitRepositoryState(state)); + } } diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 116d0b9f1fade..5504fae3fa645 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -119,6 +119,7 @@ export interface IMainContext extends IRPCProtocol { // --- main thread export interface MainThreadGitExtensionShape extends IDisposable { + $onDidChangeRepository(handle: number): Promise; } export interface MainThreadClipboardShape extends IDisposable { @@ -3476,10 +3477,31 @@ export interface GitRefDto { readonly revision: string; } +export interface GitRepositoryStateDto { + readonly HEAD?: GitBranchDto; +} + +export interface GitBranchDto { + readonly name?: string; + readonly commit?: string; + readonly type: GitRefTypeDto; + readonly remote?: string; + readonly upstream?: GitUpstreamRefDto; + readonly ahead?: number; + readonly behind?: number; +} + +export interface GitUpstreamRefDto { + readonly remote: string; + readonly name: string; + readonly commit?: string; +} + export interface ExtHostGitExtensionShape { $isGitExtensionAvailable(): Promise; - $openRepository(root: UriComponents): Promise; - $getRefs(root: UriComponents, query: GitRefQueryDto, token?: CancellationToken): Promise; + $openRepository(root: UriComponents): Promise<{ handle: number; rootUri: UriComponents; state: GitRepositoryStateDto } | undefined>; + $getRefs(handle: number, query: GitRefQueryDto, token?: CancellationToken): Promise; + $getRepositoryState(handle: number): Promise; } // --- proxy identifiers diff --git a/src/vs/workbench/api/common/extHostGitExtensionService.ts b/src/vs/workbench/api/common/extHostGitExtensionService.ts index 91e267f62405f..13a5102368562 100644 --- a/src/vs/workbench/api/common/extHostGitExtensionService.ts +++ b/src/vs/workbench/api/common/extHostGitExtensionService.ts @@ -4,13 +4,15 @@ *--------------------------------------------------------------------------------------------*/ import type * as vscode from 'vscode'; +import { Event } from '../../../base/common/event.js'; import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; import { URI, UriComponents } from '../../../base/common/uri.js'; import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; import { IExtHostExtensionService } from './extHostExtensionService.js'; import { IExtHostRpcService } from './extHostRpcService.js'; -import { ExtHostGitExtensionShape, GitRefDto, GitRefQueryDto, GitRefTypeDto } from './extHost.protocol.js'; +import { ExtHostGitExtensionShape, GitBranchDto, GitRefDto, GitRefQueryDto, GitRefTypeDto, GitRepositoryStateDto, GitUpstreamRefDto, MainContext, MainThreadGitExtensionShape } from './extHost.protocol.js'; +import { ResourceMap } from '../../../base/common/map.js'; const GIT_EXTENSION_ID = 'vscode.git'; @@ -23,11 +25,50 @@ function toGitRefTypeDto(type: GitRefType): GitRefTypeDto { } } +function toGitBranchDto(branch: Branch): GitBranchDto { + return { + name: branch.name, + commit: branch.commit, + type: toGitRefTypeDto(branch.type), + remote: branch.remote, + upstream: branch.upstream ? toGitUpstreamRefDto(branch.upstream) : undefined, + ahead: branch.ahead, + behind: branch.behind, + }; +} + +function toGitUpstreamRefDto(upstream: UpstreamRef): GitUpstreamRefDto { + return { + remote: upstream.remote, + name: upstream.name, + commit: upstream.commit, + }; +} + interface Repository { readonly rootUri: vscode.Uri; + readonly state: RepositoryState; + getRefs(query: GitRefQuery, token?: vscode.CancellationToken): Promise; } +interface RepositoryState { + readonly HEAD: Branch | undefined; + readonly onDidChange: Event; +} + +interface Branch extends GitRef { + readonly upstream?: UpstreamRef; + readonly ahead?: number; + readonly behind?: number; +} + +interface UpstreamRef { + readonly remote: string; + readonly name: string; + readonly commit?: string; +} + interface GitRef { type: GitRefType; name?: string; @@ -65,14 +106,24 @@ export const IExtHostGitExtensionService = createDecorator(); + private readonly _repositoryByUri = new ResourceMap(); + private readonly _disposables = this._register(new DisposableStore()); constructor( - @IExtHostRpcService _extHostRpc: IExtHostRpcService, + @IExtHostRpcService extHostRpc: IExtHostRpcService, @IExtHostExtensionService private readonly _extHostExtensionService: IExtHostExtensionService, ) { super(); + + this._proxy = extHostRpc.getProxy(MainContext.MainThreadGitExtension); } async $isGitExtensionAvailable(): Promise { @@ -80,23 +131,55 @@ export class ExtHostGitExtensionService extends Disposable implements IExtHostGi return !!registry.getExtensionDescription(GIT_EXTENSION_ID); } - async $openRepository(uri: UriComponents): Promise { + async $openRepository(uri: UriComponents): Promise<{ handle: number; rootUri: UriComponents; state: GitRepositoryStateDto } | undefined> { const api = await this._ensureGitApi(); if (!api) { return undefined; } const repository = await api.openRepository(URI.revive(uri)); - return repository?.rootUri; - } + if (!repository) { + return undefined; + } - async $getRefs(uri: UriComponents, query: GitRefQueryDto, token?: vscode.CancellationToken): Promise { - const api = await this._ensureGitApi(); - if (!api) { - return []; + const existingHandle = this._repositoryByUri.get(repository.rootUri); + if (existingHandle !== undefined) { + return { + handle: existingHandle, + rootUri: repository.rootUri, + state: { + HEAD: repository.state.HEAD ? toGitBranchDto(repository.state.HEAD) : undefined + } + }; } - const repository = await api.openRepository(URI.revive(uri)); + let repositoryState = repository.state; + if (repository.state.HEAD === undefined) { + // If the repository is not initialized, wait for it + await Event.toPromise(repository.state.onDidChange, this._disposables); + repositoryState = repository.state; + } + + const handle = ExtHostGitExtensionService._handlePool++; + + this._repositories.set(handle, repository); + this._repositoryByUri.set(repository.rootUri, handle); + + this._disposables.add(repository.state.onDidChange(() => { + this._proxy.$onDidChangeRepository(handle); + })); + + return { + handle, + rootUri: repository.rootUri, + state: { + HEAD: repositoryState.HEAD ? toGitBranchDto(repositoryState.HEAD) : undefined + } + }; + } + + async $getRefs(handle: number, query: GitRefQueryDto, token?: vscode.CancellationToken): Promise { + const repository = this._repositories.get(handle); if (!repository) { return []; } @@ -128,6 +211,16 @@ export class ExtHostGitExtensionService extends Disposable implements IExtHostGi } } + async $getRepositoryState(handle: number): Promise { + const repository = this._repositories.get(handle); + if (!repository) { + return undefined; + } + + const state = repository.state; + return { HEAD: state.HEAD ? toGitBranchDto(state.HEAD) : undefined }; + } + private async _ensureGitApi(): Promise { if (this._gitApi) { return this._gitApi; diff --git a/src/vs/workbench/contrib/git/browser/gitService.ts b/src/vs/workbench/contrib/git/browser/gitService.ts index 8b6cab3183580..146533f1e76f2 100644 --- a/src/vs/workbench/contrib/git/browser/gitService.ts +++ b/src/vs/workbench/contrib/git/browser/gitService.ts @@ -3,23 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Sequencer } from '../../../../base/common/async.js'; import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; import { BugIndicatingError } from '../../../../base/common/errors.js'; import { Disposable, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; -import { ResourceMap } from '../../../../base/common/map.js'; import { URI } from '../../../../base/common/uri.js'; -import { IGitService, IGitExtensionDelegate, GitRef, GitRefQuery, IGitRepository } from '../common/gitService.js'; +import { IGitService, IGitExtensionDelegate, GitRef, GitRefQuery, IGitRepository, GitRepositoryState } from '../common/gitService.js'; export class GitService extends Disposable implements IGitService { declare readonly _serviceBrand: undefined; private _delegate: IGitExtensionDelegate | undefined; - private readonly _openRepositorySequencer = new Sequencer(); - private readonly _repositories = new ResourceMap(); get repositories(): Iterable { - return this._repositories.values(); + return this._delegate?.repositories ?? []; } setDelegate(delegate: IGitExtensionDelegate): IDisposable { @@ -33,48 +30,40 @@ export class GitService extends Disposable implements IGitService { this._delegate = delegate; return toDisposable(() => { - this._repositories.clear(); this._delegate = undefined; }); } async openRepository(uri: URI): Promise { - return this._openRepositorySequencer.queue(async () => { - if (!this._delegate) { - return undefined; - } + if (!this._delegate) { + return undefined; + } - // Check whether we have an opened repository for the uri - let repository = this._repositories.get(uri); - if (repository) { - return repository; - } + return this._delegate.openRepository(uri); + } +} - // Open the repository to get the repository root - const root = await this._delegate.openRepository(uri); - if (!root) { - return undefined; - } +export class GitRepository extends Disposable implements IGitRepository { + private readonly _onDidChangeState = this._register(new Emitter()); + readonly onDidChangeState: Event = this._onDidChangeState.event; - const rootUri = URI.revive(root); + private _state: GitRepositoryState; + get state(): GitRepositoryState { return this._state; } - // Check whether we have an opened repository for the root - repository = this._repositories.get(rootUri); - if (repository) { - return repository; - } + setState(state: GitRepositoryState): void { + this._state = state; + this._onDidChangeState.fire(); + } - // Create a new repository - repository = new GitRepository(this._delegate, rootUri); - this._repositories.set(rootUri, repository); + constructor( + private readonly delegate: IGitExtensionDelegate, + readonly rootUri: URI, + state: GitRepositoryState + ) { + super(); - return repository; - }); + this._state = state; } -} - -export class GitRepository implements IGitRepository { - constructor(private readonly delegate: IGitExtensionDelegate, readonly rootUri: URI) { } async getRefs(query: GitRefQuery, token?: CancellationToken): Promise { return this.delegate.getRefs(this.rootUri, query, token); diff --git a/src/vs/workbench/contrib/git/common/gitService.ts b/src/vs/workbench/contrib/git/common/gitService.ts index 89f76d083cf00..d5f04b75c3dbb 100644 --- a/src/vs/workbench/contrib/git/common/gitService.ts +++ b/src/vs/workbench/contrib/git/common/gitService.ts @@ -4,8 +4,9 @@ *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from '../../../../base/common/cancellation.js'; +import { Event } from '../../../../base/common/event.js'; import { IDisposable } from '../../../../base/common/lifecycle.js'; -import { URI, UriComponents } from '../../../../base/common/uri.js'; +import { URI } from '../../../../base/common/uri.js'; import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; export enum GitRefType { @@ -28,14 +29,38 @@ export interface GitRefQuery { readonly sort?: 'alphabetically' | 'committerdate' | 'creatordate'; } +export interface GitRepositoryState { + readonly HEAD?: GitBranch; +} + +export interface GitBranch extends GitRef { + readonly upstream?: GitUpstreamRef; + readonly ahead?: number; + readonly behind?: number; +} + +export interface GitUpstreamRef { + readonly remote: string; + readonly name: string; + readonly commit?: string; +} + export interface IGitRepository { readonly rootUri: URI; + + readonly state: GitRepositoryState; + setState(state: GitRepositoryState): void; + + readonly onDidChangeState: Event; + getRefs(query: GitRefQuery, token?: CancellationToken): Promise; } export interface IGitExtensionDelegate { - getRefs(uri: UriComponents, query?: GitRefQuery, token?: CancellationToken): Promise; - openRepository(uri: UriComponents): Promise; + readonly repositories: Iterable; + openRepository(uri: URI): Promise; + + getRefs(root: URI, query?: GitRefQuery, token?: CancellationToken): Promise; } export const IGitService = createDecorator('gitService'); From 2751fb4d2f801163fb44b2ebe14a1ee00e71f0c1 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 20 Feb 2026 16:03:42 +0100 Subject: [PATCH 14/37] adds component explorer --- .github/skills/update-screenshots/SKILL.md | 87 ++ .github/workflows/screenshot-test.yml | 80 ++ .gitignore | 2 + build/vite/package-lock.json | 182 +--- build/vite/package.json | 11 +- build/vite/vite.config.ts | 5 +- package-lock.json | 876 +++++++++++++++++- package.json | 6 +- .../viewModel/minimapTokensColorTracker.ts | 8 +- .../componentFixtures}/aiStats.fixture.ts | 10 +- .../componentFixtures}/baseUI.fixture.ts | 98 +- .../componentFixtures}/codeEditor.fixture.ts | 7 +- .../componentFixtures}/fixtureUtils.ts | 188 ++-- .../inlineCompletions.fixture.ts | 34 +- .../baseline/aiStats/AiStatsHover/Dark.png | Bin 0 -> 8827 bytes .../baseline/aiStats/AiStatsHover/Light.png | Bin 0 -> 8388 bytes .../aiStats/AiStatsHoverNoData/Dark.png | Bin 0 -> 7537 bytes .../aiStats/AiStatsHoverNoData/Light.png | Bin 0 -> 7262 bytes .../baseline/baseUI/ActionBar/Dark.png | Bin 0 -> 3888 bytes .../baseline/baseUI/ActionBar/Light.png | Bin 0 -> 3917 bytes .../baseline/baseUI/ButtonBar/Dark.png | Bin 0 -> 4161 bytes .../baseline/baseUI/ButtonBar/Light.png | Bin 0 -> 4209 bytes .../baseline/baseUI/Buttons/Dark.png | Bin 0 -> 5522 bytes .../baseline/baseUI/Buttons/Light.png | Bin 0 -> 5611 bytes .../baseline/baseUI/CountBadges/Dark.png | Bin 0 -> 1912 bytes .../baseline/baseUI/CountBadges/Light.png | Bin 0 -> 1806 bytes .../baseUI/HighlightedLabels/Dark.png | Bin 0 -> 7104 bytes .../baseUI/HighlightedLabels/Light.png | Bin 0 -> 6425 bytes .../baseline/baseUI/InputBoxes/Dark.png | Bin 0 -> 5238 bytes .../baseline/baseUI/InputBoxes/Light.png | Bin 0 -> 5116 bytes .../baseline/baseUI/ProgressBars/Dark.png | Bin 0 -> 5446 bytes .../baseline/baseUI/ProgressBars/Light.png | Bin 0 -> 5340 bytes .../baseline/baseUI/Toggles/Dark.png | Bin 0 -> 3709 bytes .../baseline/baseUI/Toggles/Light.png | Bin 0 -> 3658 bytes .../baseline/codeEditor/CodeEditor/Dark.png | Bin 0 -> 17804 bytes .../baseline/codeEditor/CodeEditor/Light.png | Bin 0 -> 17805 bytes .../inlineCompletions/InsertionView/Dark.png | Bin 0 -> 6017 bytes .../inlineCompletions/InsertionView/Light.png | Bin 0 -> 6038 bytes .../inlineCompletions/SideBySideView/Dark.png | Bin 0 -> 6697 bytes .../SideBySideView/Light.png | Bin 0 -> 6513 bytes .../WordReplacementView/Dark.png | Bin 0 -> 5570 bytes .../WordReplacementView/Light.png | Bin 0 -> 5618 bytes .../component-explorer-diff.json | 30 + .../componentFixtures/component-explorer.json | 16 + 44 files changed, 1323 insertions(+), 317 deletions(-) create mode 100644 .github/skills/update-screenshots/SKILL.md create mode 100644 .github/workflows/screenshot-test.yml rename {build/vite/fixtures => src/vs/workbench/test/browser/componentFixtures}/aiStats.fixture.ts (89%) rename {build/vite/fixtures => src/vs/workbench/test/browser/componentFixtures}/baseUI.fixture.ts (94%) rename {build/vite/fixtures/editor => src/vs/workbench/test/browser/componentFixtures}/codeEditor.fixture.ts (84%) rename {build/vite/fixtures => src/vs/workbench/test/browser/componentFixtures}/fixtureUtils.ts (66%) rename {build/vite/fixtures/editor => src/vs/workbench/test/browser/componentFixtures}/inlineCompletions.fixture.ts (74%) create mode 100644 test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/ActionBar/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/ActionBar/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/ButtonBar/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/ButtonBar/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/Buttons/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/Buttons/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/HighlightedLabels/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/HighlightedLabels/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/InputBoxes/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/InputBoxes/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/Toggles/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/baseUI/Toggles/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/codeEditor/CodeEditor/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/codeEditor/CodeEditor/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/inlineCompletions/InsertionView/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/inlineCompletions/InsertionView/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Light.png create mode 100644 test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Dark.png create mode 100644 test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Light.png create mode 100644 test/componentFixtures/component-explorer-diff.json create mode 100644 test/componentFixtures/component-explorer.json diff --git a/.github/skills/update-screenshots/SKILL.md b/.github/skills/update-screenshots/SKILL.md new file mode 100644 index 0000000000000..f4cac151d61d8 --- /dev/null +++ b/.github/skills/update-screenshots/SKILL.md @@ -0,0 +1,87 @@ +--- +name: update-screenshots +description: Download screenshot baselines from the latest CI run and commit them. Use when asked to update, accept, or refresh component screenshot baselines from CI, or after the screenshot-test GitHub Action reports differences. This skill should be run as a subagent. +--- + +# Update Component Screenshots from CI + +When asked to update, accept, or refresh screenshot baselines from CI — or when the `Screenshot Tests` GitHub Action has failed with screenshot differences — follow this procedure to download the CI-generated screenshots and commit them as the new baselines. + +## Why CI Screenshots? + +Screenshots captured locally may differ from CI due to platform differences (fonts, rendering, DPI). The CI (Linux, ubuntu-latest) is the source of truth. This skill downloads the CI-produced screenshots and commits them as baselines. + +## Prerequisites + +- The `gh` CLI must be authenticated (`gh auth status`). +- The `Screenshot Tests` GitHub Action must have run and produced a `screenshot-diff` artifact. + +## Procedure + +### 1. Find the latest screenshot artifact + +If the user provides a specific run ID or PR number, use that. Otherwise, find the latest run: + +```bash +# For a specific PR: +gh run list --workflow screenshot-test.yml --branch --limit 5 --json databaseId,status,conclusion,headBranch + +# For the current branch: +gh run list --workflow screenshot-test.yml --branch $(git branch --show-current) --limit 5 --json databaseId,status,conclusion +``` + +Pick the most recent run that has a `screenshot-diff` artifact (runs where screenshots matched won't have one). + +### 2. Download the artifact + +```bash +gh run download --name screenshot-diff --dir .tmp/screenshot-diff +``` + +This downloads: +- `test/componentFixtures/.screenshots/current/` — the CI-captured screenshots +- `test/componentFixtures/.screenshots/report.json` — structured diff report +- `test/componentFixtures/.screenshots/report.md` — human-readable diff report + +### 3. Review the changes + +Show the user what changed by reading the markdown report: + +```bash +cat .tmp/screenshot-diff/test/componentFixtures/.screenshots/report.md +``` + +### 4. Copy CI screenshots to baseline + +```bash +# Remove old baselines and replace with CI screenshots +rm -rf test/componentFixtures/.screenshots/baseline/ +cp -r .tmp/screenshot-diff/test/componentFixtures/.screenshots/current/ test/componentFixtures/.screenshots/baseline/ +``` + +### 5. Clean up + +```bash +rm -rf .tmp/screenshot-diff +``` + +### 6. Stage and commit + +```bash +git add test/componentFixtures/.screenshots/baseline/ +git commit -m "update screenshot baselines from CI" +``` + +### 7. Verify + +Confirm the baselines are updated by listing the files: + +```bash +git diff --stat HEAD~1 +``` + +## Notes + +- If no `screenshot-diff` artifact exists, the screenshots already match the baselines — no update needed. +- The `--filter` option on the CLI can be used to selectively accept only some fixtures if needed. +- After committing updated baselines, the next CI run should pass the screenshot comparison. diff --git a/.github/workflows/screenshot-test.yml b/.github/workflows/screenshot-test.yml new file mode 100644 index 0000000000000..05b22c79d041b --- /dev/null +++ b/.github/workflows/screenshot-test.yml @@ -0,0 +1,80 @@ +name: Screenshot Tests + +on: + push: + branches: [main] + pull_request: + branches: + - main + - 'release/*' + +permissions: + contents: read + +concurrency: + group: screenshots-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +jobs: + screenshots: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + + - name: Install dependencies + run: npm ci + env: + ELECTRON_SKIP_BINARY_DOWNLOAD: 1 + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Install build/vite dependencies + run: npm ci + working-directory: build/vite + + - name: Install Playwright Chromium + run: npx playwright install chromium + + - name: Capture screenshots + run: npx component-explorer screenshot --project ./test/componentFixtures/component-explorer.json + + - name: Compare screenshots + id: compare + run: | + npx component-explorer screenshot:compare \ + --project ./test/componentFixtures \ + --report ./test/componentFixtures/.screenshots/report.json \ + --report-markdown ./test/componentFixtures/.screenshots/report.md + continue-on-error: true + + - name: Upload screenshot report + if: steps.compare.outcome == 'failure' + uses: actions/upload-artifact@v4 + with: + name: screenshot-diff + path: | + test/componentFixtures/.screenshots/current/ + test/componentFixtures/.screenshots/report.json + test/componentFixtures/.screenshots/report.md + + - name: Post summary + if: always() + run: | + if [ -f test/componentFixtures/.screenshots/report.md ]; then + cat test/componentFixtures/.screenshots/report.md >> $GITHUB_STEP_SUMMARY + elif [ "${{ steps.compare.outcome }}" == "success" ]; then + echo "## Screenshots ✅" >> $GITHUB_STEP_SUMMARY + echo "No visual changes detected." >> $GITHUB_STEP_SUMMARY + fi + + - name: Fail if screenshots changed + if: steps.compare.outcome == 'failure' + run: | + echo "::error::Screenshot differences detected. Download the 'screenshot-diff' artifact to review changes." + exit 1 diff --git a/.gitignore b/.gitignore index 814f7eb1787e7..7359fbeaa220c 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,5 @@ product.overrides.json .vscode-test vscode-telemetry-docs/ test-output.json +test/componentFixtures/.screenshots/* +!test/componentFixtures/.screenshots/baseline/ diff --git a/build/vite/package-lock.json b/build/vite/package-lock.json index 4db5338149d1f..f33d634439992 100644 --- a/build/vite/package-lock.json +++ b/build/vite/package-lock.json @@ -8,9 +8,9 @@ "name": "@vscode/sample-source", "version": "0.0.0", "devDependencies": { - "@vscode/component-explorer": "next", - "@vscode/component-explorer-vite-plugin": "next", + "@vscode/component-explorer-vite-plugin": "^0.1.1-10", "@vscode/rollup-plugin-esm-url": "^1.0.1-1", + "rollup": "*", "vite": "npm:rolldown-vite@latest" } }, @@ -325,8 +325,7 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.57.1", @@ -340,8 +339,7 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.57.1", @@ -355,8 +353,7 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.57.1", @@ -370,8 +367,7 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.57.1", @@ -385,8 +381,7 @@ "optional": true, "os": [ "freebsd" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-freebsd-x64": { "version": "4.57.1", @@ -400,8 +395,7 @@ "optional": true, "os": [ "freebsd" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.57.1", @@ -415,8 +409,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.57.1", @@ -430,8 +423,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.57.1", @@ -445,8 +437,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.57.1", @@ -460,8 +451,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.57.1", @@ -475,8 +465,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { "version": "4.57.1", @@ -490,8 +479,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.57.1", @@ -505,8 +493,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { "version": "4.57.1", @@ -520,8 +507,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.57.1", @@ -535,8 +521,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.57.1", @@ -550,8 +535,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.57.1", @@ -565,8 +549,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.57.1", @@ -580,8 +563,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.57.1", @@ -595,8 +577,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-openbsd-x64": { "version": "4.57.1", @@ -610,8 +591,7 @@ "optional": true, "os": [ "openbsd" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-openharmony-arm64": { "version": "4.57.1", @@ -625,8 +605,7 @@ "optional": true, "os": [ "openharmony" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.57.1", @@ -640,8 +619,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.57.1", @@ -655,8 +633,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.57.1", @@ -670,8 +647,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.57.1", @@ -685,8 +661,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", @@ -704,23 +679,12 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@vscode/component-explorer": { - "version": "0.1.1-2", - "resolved": "https://registry.npmjs.org/@vscode/component-explorer/-/component-explorer-0.1.1-2.tgz", - "integrity": "sha512-2VMoXLnDBk+hKrhw+iGUsEjnCd1YiiZqe+1LdQIKdk16zqYRtJ5iO6yDxZ4cKy3Wphd+qLDUWmZSULNtKioMrQ==", - "dev": true, - "peerDependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" - } + "license": "MIT" }, "node_modules/@vscode/component-explorer-vite-plugin": { - "version": "0.1.1-2", - "resolved": "https://registry.npmjs.org/@vscode/component-explorer-vite-plugin/-/component-explorer-vite-plugin-0.1.1-2.tgz", - "integrity": "sha512-iYSp8shDZEJJrjMWGneWyjFbFyED5Og74c9h5XBmVPZBDN4INfOTmPlC+HYTv/CL5+NFxpl91CdtacCmqz2EXw==", + "version": "0.1.1-10", + "resolved": "https://registry.npmjs.org/@vscode/component-explorer-vite-plugin/-/component-explorer-vite-plugin-0.1.1-10.tgz", + "integrity": "sha512-1F2Ier7lpFPvYzWxyNCBy3qYzSwRyTw6k3pm+l6DBMMNT+OTnCZ3+awa7wtijZXMc4O1WooxswjrjBu++Oqftg==", "dev": true, "dependencies": { "tinyglobby": "^0.2.0" @@ -769,9 +733,9 @@ } }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -783,14 +747,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/lightningcss": { "version": "1.31.1", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz", @@ -1052,20 +1008,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -1134,35 +1076,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, "node_modules/rolldown": { "version": "1.0.0-beta.53", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.53.tgz", @@ -1201,7 +1114,6 @@ "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -1241,17 +1153,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -1363,6 +1264,21 @@ "optional": true } } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } } } } diff --git a/build/vite/package.json b/build/vite/package.json index 9800e54af40f1..e2f761ee794f8 100644 --- a/build/vite/package.json +++ b/build/vite/package.json @@ -9,14 +9,9 @@ "preview": "vite preview" }, "devDependencies": { + "@vscode/component-explorer-vite-plugin": "^0.1.1-10", "@vscode/rollup-plugin-esm-url": "^1.0.1-1", - "vite": "npm:rolldown-vite@latest", - "@vscode/component-explorer": "next", - "@vscode/component-explorer-vite-plugin": "next" - }, - "overrides": { - "@vscode/component-explorer-vite-plugin": { - "vite": "$vite" - } + "rollup": "*", + "vite": "npm:rolldown-vite@latest" } } diff --git a/build/vite/vite.config.ts b/build/vite/vite.config.ts index 6cdde88076a49..d6d8931fa315d 100644 --- a/build/vite/vite.config.ts +++ b/build/vite/vite.config.ts @@ -170,13 +170,13 @@ export default defineConfig({ createHotClassSupport(), componentExplorer({ logLevel: 'verbose', - include: 'build/vite/**/*.fixture.ts', + include: join(__dirname, '../../src/**/*.fixture.ts'), }), ], customLogger: logger, resolve: { alias: { - '~@vscode/codicons': '/node_modules/@vscode/codicons', + '~@vscode/codicons': join(__dirname, '../../node_modules/@vscode/codicons'), } }, esbuild: { @@ -198,7 +198,6 @@ export default defineConfig({ server: { cors: true, port: 5199, - origin: 'http://localhost:5199', fs: { allow: [ // To allow loading from sources, not needed when loading monaco-editor from npm package diff --git a/package-lock.json b/package-lock.json index 32c7949580296..85555984471bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,6 +84,8 @@ "@types/yazl": "^2.4.2", "@typescript-eslint/utils": "^8.45.0", "@typescript/native-preview": "^7.0.0-dev.20260130", + "@vscode/component-explorer": "^0.1.1-10", + "@vscode/component-explorer-cli": "^0.1.1-6", "@vscode/gulp-electron": "https://github.com/microsoft/vscode-gulp-electron.git#405e3df0e4e9c37fcf549cbe6f5cef8d5ba5ddff", "@vscode/l10n-dev": "0.0.35", "@vscode/telemetry-extractor": "^1.10.2", @@ -1144,6 +1146,19 @@ "xtend": "~4.0.1" } }, + "node_modules/@hono/node-server": { + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1491,6 +1506,89 @@ "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz", "integrity": "sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ==" }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", + "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/sdk/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/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2966,6 +3064,45 @@ "integrity": "sha512-5MfjQ+LBXnzLB/+nfpB8EpvHPdUkoW57cFcrIAHz52L/sBjwOxZER3+K2+nwb+/ejAiPmogTBDoJP/NM85uBtQ==", "license": "CC-BY-4.0" }, + "node_modules/@vscode/component-explorer": { + "version": "0.1.1-10", + "resolved": "https://registry.npmjs.org/@vscode/component-explorer/-/component-explorer-0.1.1-10.tgz", + "integrity": "sha512-Nokjk2DB1hgKeUL1FW5dHfXySgj17BgxcsiyzcG6etdFIbMpzv85nMQxrW/88aklgmJPrRVefMRHFYSds/F3/g==", + "dev": true, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@vscode/component-explorer-cli": { + "version": "0.1.1-6", + "resolved": "https://registry.npmjs.org/@vscode/component-explorer-cli/-/component-explorer-cli-0.1.1-6.tgz", + "integrity": "sha512-OnypYKeBH8ZZh6++2NvVo9lPXFvHpIik6Y/KAa/UVMp4hI58KlQ0zEOWszvwR1i6mESn+BRWERFbQbNlKLec5g==", + "dev": true, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.26.0", + "clipanion": "^4.0.0-rc.4", + "express": "^5.0.0", + "zod": "^4.3.6" + }, + "bin": { + "component-explorer": "dist/index.js" + }, + "peerDependencies": { + "playwright": ">=1.40.0", + "vite": ">=5.0.0" + } + }, + "node_modules/@vscode/component-explorer-cli/node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@vscode/deviceid": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@vscode/deviceid/-/deviceid-0.1.4.tgz", @@ -4833,6 +4970,31 @@ "readable-stream": "^3.4.0" } }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -5093,6 +5255,23 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -5394,6 +5573,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clipanion": { + "version": "4.0.0-rc.4", + "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-4.0.0-rc.4.tgz", + "integrity": "sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==", + "dev": true, + "license": "MIT", + "workspaces": [ + "website" + ], + "dependencies": { + "typanion": "^3.8.0" + }, + "peerDependencies": { + "typanion": "*" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -5765,6 +5960,16 @@ "node": ">= 0.6" } }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, "node_modules/cookies": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", @@ -5871,6 +6076,24 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -6067,9 +6290,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -7128,6 +7351,16 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", @@ -7162,6 +7395,29 @@ "node": ">=0.8.x" } }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -7312,6 +7568,154 @@ "node": ">=0.10.0" } }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.2.1.tgz", + "integrity": "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "10.0.1" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express-rate-limit/node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/express/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/ext": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", @@ -7500,6 +7904,23 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -7608,6 +8029,28 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/find-parent-dir": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz", @@ -7959,6 +8402,16 @@ "node": ">= 18" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -10191,6 +10644,16 @@ "node": ">=0.10.0" } }, + "node_modules/hono": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.0.tgz", + "integrity": "sha512-NekXntS5M94pUfiVZ8oXXK/kkri+5WpX2/Ik+LVsl+uvw+soj4roXIsPqO+XsWrAw20mOzaXOZf3Q7PfB9A/IA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -10405,6 +10868,23 @@ "node": ">=0.8.0" } }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -10556,6 +11036,16 @@ "node": ">= 12" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -11136,6 +11626,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-base64": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", @@ -11265,6 +11765,13 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -11815,6 +12322,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -12215,6 +12735,19 @@ "node": ">= 0.10.0" } }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-options": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", @@ -13183,6 +13716,19 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -13889,6 +14435,16 @@ "node": ">=0.10.0" } }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -14270,6 +14826,20 @@ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -14361,6 +14931,22 @@ "node": ">=6" } }, + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -14397,6 +14983,32 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -14425,6 +15037,33 @@ "integrity": "sha512-JkXJ0IrUcdupLoIx6gE4YcFaMVSGtu7kQf4NJoDJUnfBZGuATmJ2Yal2v55KTltp+WV8dGr7A0RtOzx6jmtM6Q==", "dev": true }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, "node_modules/read-package-json-fast": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", @@ -15027,6 +15666,30 @@ "node": ">=8.0" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -15073,12 +15736,29 @@ "ret": "~0.1.10" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/schema-utils": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", @@ -15164,6 +15844,70 @@ "node": ">= 0.10" } }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/send/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", @@ -15203,6 +15947,26 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -15340,6 +16104,82 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -17004,6 +17844,16 @@ "node": "*" } }, + "node_modules/typanion": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.14.0.tgz", + "integrity": "sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==", + "dev": true, + "license": "MIT", + "workspaces": [ + "website" + ] + }, "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -17255,6 +18105,16 @@ "node": ">= 10.0.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -18276,6 +19136,16 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } } } } diff --git a/package.json b/package.json index df095bf4486f3..3d3fc5c7f44cb 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,9 @@ "extensions-ci": "npm run gulp extensions-ci", "extensions-ci-pr": "npm run gulp extensions-ci-pr", "perf": "node scripts/code-perf.js", - "update-build-ts-version": "npm install -D typescript@next && npm install -D @typescript/native-preview && (cd build && npm run typecheck)" + "update-build-ts-version": "npm install -D typescript@next && npm install -D @typescript/native-preview && (cd build && npm run typecheck)", + "install-local-component-explorer": "npm install ../vscode-packages/js-component-explorer/dist/vscode-component-explorer-0.1.0.tgz ../vscode-packages/js-component-explorer/dist/vscode-component-explorer-cli-0.1.0.tgz --no-save && cd build/vite && npm install ../../../vscode-packages/js-component-explorer/dist/vscode-component-explorer-vite-plugin-0.1.0.tgz --no-save", + "install-latest-component-explorer": "npm install @vscode/component-explorer@next @vscode/component-explorer-cli@next && cd build/vite && npm install @vscode/component-explorer-vite-plugin@next" }, "dependencies": { "@anthropic-ai/sandbox-runtime": "0.0.23", @@ -150,6 +152,8 @@ "@types/yazl": "^2.4.2", "@typescript-eslint/utils": "^8.45.0", "@typescript/native-preview": "^7.0.0-dev.20260130", + "@vscode/component-explorer": "^0.1.1-10", + "@vscode/component-explorer-cli": "^0.1.1-6", "@vscode/gulp-electron": "https://github.com/microsoft/vscode-gulp-electron.git#405e3df0e4e9c37fcf549cbe6f5cef8d5ba5ddff", "@vscode/l10n-dev": "0.0.35", "@vscode/telemetry-extractor": "^1.10.2", diff --git a/src/vs/editor/common/viewModel/minimapTokensColorTracker.ts b/src/vs/editor/common/viewModel/minimapTokensColorTracker.ts index 0247519b550dc..45473f77c4dec 100644 --- a/src/vs/editor/common/viewModel/minimapTokensColorTracker.ts +++ b/src/vs/editor/common/viewModel/minimapTokensColorTracker.ts @@ -8,6 +8,7 @@ import { Disposable, markAsSingleton } from '../../../base/common/lifecycle.js'; import { RGBA8 } from '../core/misc/rgba.js'; import { TokenizationRegistry } from '../languages.js'; import { ColorId } from '../encodedTokenAttributes.js'; +import { BugIndicatingError, onUnexpectedError } from '../../../base/common/errors.js'; export class MinimapTokensColorTracker extends Disposable { private static _INSTANCE: MinimapTokensColorTracker | null = null; @@ -57,7 +58,12 @@ export class MinimapTokensColorTracker extends Disposable { // background color (basically invisible) colorId = ColorId.DefaultBackground; } - return this._colors[colorId]; + let color = this._colors[colorId]; + if (!color) { + onUnexpectedError(new BugIndicatingError(`Missing color for colorId ${colorId}`)); + color = RGBA8.Empty; + } + return color; } public backgroundIsLight(): boolean { diff --git a/build/vite/fixtures/aiStats.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/aiStats.fixture.ts similarity index 89% rename from build/vite/fixtures/aiStats.fixture.ts rename to src/vs/workbench/test/browser/componentFixtures/aiStats.fixture.ts index 5ebe414b52b62..7df2b70d7d598 100644 --- a/build/vite/fixtures/aiStats.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/aiStats.fixture.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { observableValue } from '../../../src/vs/base/common/observable'; -import { createAiStatsHover, IAiStatsHoverData } from '../../../src/vs/workbench/contrib/editTelemetry/browser/editStats/aiStatsStatusBar'; -import { ISessionData } from '../../../src/vs/workbench/contrib/editTelemetry/browser/editStats/aiStatsChart'; -import { Random } from '../../../src/vs/editor/test/common/core/random'; -import { ComponentFixtureContext, defineComponentFixture, defineThemedFixtureGroup } from './fixtureUtils'; +import { observableValue } from '../../../../base/common/observable.js'; +import { createAiStatsHover, IAiStatsHoverData } from '../../../contrib/editTelemetry/browser/editStats/aiStatsStatusBar.js'; +import { ISessionData } from '../../../contrib/editTelemetry/browser/editStats/aiStatsChart.js'; +import { Random } from '../../../../editor/test/common/core/random.js'; +import { ComponentFixtureContext, defineComponentFixture, defineThemedFixtureGroup } from './fixtureUtils.js'; export default defineThemedFixtureGroup({ AiStatsHover: defineComponentFixture({ diff --git a/build/vite/fixtures/baseUI.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts similarity index 94% rename from build/vite/fixtures/baseUI.fixture.ts rename to src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts index 4bcf0be523519..21501b6c2361d 100644 --- a/build/vite/fixtures/baseUI.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts @@ -3,21 +3,56 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { $ } from '../../../src/vs/base/browser/dom'; -import { Codicon } from '../../../src/vs/base/common/codicons'; -import { ThemeIcon } from '../../../src/vs/base/common/themables'; -import { Action, Separator } from '../../../src/vs/base/common/actions'; +import { $ } from '../../../../base/browser/dom.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { Action, Separator } from '../../../../base/common/actions.js'; // UI Components -import { Button, ButtonBar, ButtonWithDescription, unthemedButtonStyles } from '../../../src/vs/base/browser/ui/button/button'; -import { Toggle, Checkbox, unthemedToggleStyles } from '../../../src/vs/base/browser/ui/toggle/toggle'; -import { InputBox, MessageType, unthemedInboxStyles } from '../../../src/vs/base/browser/ui/inputbox/inputBox'; -import { CountBadge } from '../../../src/vs/base/browser/ui/countBadge/countBadge'; -import { ActionBar } from '../../../src/vs/base/browser/ui/actionbar/actionbar'; -import { ProgressBar } from '../../../src/vs/base/browser/ui/progressbar/progressbar'; -import { HighlightedLabel } from '../../../src/vs/base/browser/ui/highlightedlabel/highlightedLabel'; +import { Button, ButtonBar, ButtonWithDescription, unthemedButtonStyles } from '../../../../base/browser/ui/button/button.js'; +import { Toggle, Checkbox, unthemedToggleStyles } from '../../../../base/browser/ui/toggle/toggle.js'; +import { InputBox, MessageType, unthemedInboxStyles } from '../../../../base/browser/ui/inputbox/inputBox.js'; +import { CountBadge } from '../../../../base/browser/ui/countBadge/countBadge.js'; +import { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js'; +import { ProgressBar } from '../../../../base/browser/ui/progressbar/progressbar.js'; +import { HighlightedLabel } from '../../../../base/browser/ui/highlightedlabel/highlightedLabel.js'; -import { ComponentFixtureContext, defineComponentFixture, defineThemedFixtureGroup } from './fixtureUtils'; +import { ComponentFixtureContext, defineComponentFixture, defineThemedFixtureGroup } from './fixtureUtils.js'; + + +export default defineThemedFixtureGroup({ + Buttons: defineComponentFixture({ + render: renderButtons, + }), + + ButtonBar: defineComponentFixture({ + render: renderButtonBar, + }), + + Toggles: defineComponentFixture({ + render: renderToggles, + }), + + InputBoxes: defineComponentFixture({ + render: renderInputBoxes, + }), + + CountBadges: defineComponentFixture({ + render: renderCountBadges, + }), + + ActionBar: defineComponentFixture({ + render: renderActionBar, + }), + + ProgressBars: defineComponentFixture({ + render: renderProgressBars, + }), + + HighlightedLabels: defineComponentFixture({ + render: renderHighlightedLabels, + }), +}); // ============================================================================ @@ -490,42 +525,3 @@ function renderHighlightedLabels({ container }: ComponentFixtureContext): HTMLEl return container; } - - -// ============================================================================ -// Export Fixtures -// ============================================================================ - -export default defineThemedFixtureGroup({ - Buttons: defineComponentFixture({ - render: renderButtons, - }), - - ButtonBar: defineComponentFixture({ - render: renderButtonBar, - }), - - Toggles: defineComponentFixture({ - render: renderToggles, - }), - - InputBoxes: defineComponentFixture({ - render: renderInputBoxes, - }), - - CountBadges: defineComponentFixture({ - render: renderCountBadges, - }), - - ActionBar: defineComponentFixture({ - render: renderActionBar, - }), - - ProgressBars: defineComponentFixture({ - render: renderProgressBars, - }), - - HighlightedLabels: defineComponentFixture({ - render: renderHighlightedLabels, - }), -}); diff --git a/build/vite/fixtures/editor/codeEditor.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/codeEditor.fixture.ts similarity index 84% rename from build/vite/fixtures/editor/codeEditor.fixture.ts rename to src/vs/workbench/test/browser/componentFixtures/codeEditor.fixture.ts index bdaaf35bf0fcf..af7ff83463719 100644 --- a/build/vite/fixtures/editor/codeEditor.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/codeEditor.fixture.ts @@ -3,9 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { URI } from '../../../../src/vs/base/common/uri'; -import { CodeEditorWidget, ICodeEditorWidgetOptions } from '../../../../src/vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { ComponentFixtureContext, createEditorServices, createTextModel, defineComponentFixture, defineThemedFixtureGroup } from '../fixtureUtils'; +import { URI } from '../../../../base/common/uri.js'; +import { ComponentFixtureContext, createEditorServices, defineThemedFixtureGroup, defineComponentFixture, createTextModel } from './fixtureUtils.js'; +import { ICodeEditorWidgetOptions, CodeEditorWidget } from '../../../../editor/browser/widget/codeEditor/codeEditorWidget.js'; + const SAMPLE_CODE = `// Welcome to VS Code function greet(name: string): string { diff --git a/build/vite/fixtures/fixtureUtils.ts b/src/vs/workbench/test/browser/componentFixtures/fixtureUtils.ts similarity index 66% rename from build/vite/fixtures/fixtureUtils.ts rename to src/vs/workbench/test/browser/componentFixtures/fixtureUtils.ts index fd90169dae792..0aa4580051806 100644 --- a/build/vite/fixtures/fixtureUtils.ts +++ b/src/vs/workbench/test/browser/componentFixtures/fixtureUtils.ts @@ -3,98 +3,98 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// This should be the only place that is allowed to import from @vscode/component-explorer +// eslint-disable-next-line local/code-import-patterns import { defineFixture, defineFixtureGroup, defineFixtureVariants } from '@vscode/component-explorer'; -import { DisposableStore, toDisposable } from '../../../src/vs/base/common/lifecycle'; -import { URI } from '../../../src/vs/base/common/uri'; -import '../style.css'; +import { DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +// eslint-disable-next-line local/code-import-patterns +import '../../../../../../build/vite/style.css'; // Theme -import { COLOR_THEME_DARK_INITIAL_COLORS, COLOR_THEME_LIGHT_INITIAL_COLORS } from '../../../src/vs/workbench/services/themes/common/workbenchThemeService'; -import { ColorThemeData } from '../../../src/vs/workbench/services/themes/common/colorThemeData'; -import { ColorScheme } from '../../../src/vs/platform/theme/common/theme'; -import { generateColorThemeCSS } from '../../../src/vs/workbench/services/themes/browser/colorThemeCss'; -import { Registry } from '../../../src/vs/platform/registry/common/platform'; -import { Extensions as ThemingExtensions, IThemingRegistry } from '../../../src/vs/platform/theme/common/themeService'; -import { IEnvironmentService } from '../../../src/vs/platform/environment/common/environment'; -import { getIconsStyleSheet } from '../../../src/vs/platform/theme/browser/iconsStyleSheet'; +import { IEnvironmentService } from '../../../../platform/environment/common/environment.js'; +import { Registry } from '../../../../platform/registry/common/platform.js'; +import { getIconsStyleSheet } from '../../../../platform/theme/browser/iconsStyleSheet.js'; +import { ColorScheme } from '../../../../platform/theme/common/theme.js'; +import { IColorTheme, IThemeService, IThemingRegistry, Extensions as ThemingExtensions } from '../../../../platform/theme/common/themeService.js'; +import { generateColorThemeCSS } from '../../../services/themes/browser/colorThemeCss.js'; +import { ColorThemeData } from '../../../services/themes/common/colorThemeData.js'; +import { COLOR_THEME_DARK_INITIAL_COLORS, COLOR_THEME_LIGHT_INITIAL_COLORS } from '../../../services/themes/common/workbenchThemeService.js'; // Instantiation -import { ServiceCollection } from '../../../src/vs/platform/instantiation/common/serviceCollection'; -import { SyncDescriptor } from '../../../src/vs/platform/instantiation/common/descriptors'; -import { ServiceIdentifier } from '../../../src/vs/platform/instantiation/common/instantiation'; -import { TestInstantiationService } from '../../../src/vs/platform/instantiation/test/common/instantiationServiceMock'; +import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; +import { ServiceIdentifier } from '../../../../platform/instantiation/common/instantiation.js'; +import { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js'; +import { TestInstantiationService } from '../../../../platform/instantiation/test/common/instantiationServiceMock.js'; // Test service implementations -import { TestAccessibilityService } from '../../../src/vs/platform/accessibility/test/common/testAccessibilityService'; -import { MockKeybindingService, MockContextKeyService } from '../../../src/vs/platform/keybinding/test/common/mockKeybindingService'; -import { TestClipboardService } from '../../../src/vs/platform/clipboard/test/common/testClipboardService'; -import { TestEditorWorkerService } from '../../../src/vs/editor/test/common/services/testEditorWorkerService'; -import { NullOpenerService } from '../../../src/vs/platform/opener/test/common/nullOpenerService'; -import { TestNotificationService } from '../../../src/vs/platform/notification/test/common/testNotificationService'; -import { TestDialogService } from '../../../src/vs/platform/dialogs/test/common/testDialogService'; -import { TestConfigurationService } from '../../../src/vs/platform/configuration/test/common/testConfigurationService'; -import { TestTextResourcePropertiesService } from '../../../src/vs/editor/test/common/services/testTextResourcePropertiesService'; -import { TestThemeService } from '../../../src/vs/platform/theme/test/common/testThemeService'; -import { TestLanguageConfigurationService } from '../../../src/vs/editor/test/common/modes/testLanguageConfigurationService'; -import { TestCodeEditorService, TestCommandService } from '../../../src/vs/editor/test/browser/editorTestServices'; -import { TestTreeSitterLibraryService } from '../../../src/vs/editor/test/common/services/testTreeSitterLibraryService'; -import { TestMenuService } from '../../../src/vs/workbench/test/browser/workbenchTestServices'; - -// Service interfaces -import { IAccessibilityService } from '../../../src/vs/platform/accessibility/common/accessibility'; -import { IKeybindingService } from '../../../src/vs/platform/keybinding/common/keybinding'; -import { IClipboardService } from '../../../src/vs/platform/clipboard/common/clipboardService'; -import { IEditorWorkerService } from '../../../src/vs/editor/common/services/editorWorker'; -import { IOpenerService } from '../../../src/vs/platform/opener/common/opener'; -import { INotificationService } from '../../../src/vs/platform/notification/common/notification'; -import { IDialogService } from '../../../src/vs/platform/dialogs/common/dialogs'; -import { IUndoRedoService } from '../../../src/vs/platform/undoRedo/common/undoRedo'; -import { UndoRedoService } from '../../../src/vs/platform/undoRedo/common/undoRedoService'; -import { ILanguageService } from '../../../src/vs/editor/common/languages/language'; -import { LanguageService } from '../../../src/vs/editor/common/services/languageService'; -import { ILanguageConfigurationService } from '../../../src/vs/editor/common/languages/languageConfigurationRegistry'; -import { IConfigurationService } from '../../../src/vs/platform/configuration/common/configuration'; -import { ITextResourcePropertiesService } from '../../../src/vs/editor/common/services/textResourceConfiguration'; -import { IColorTheme, IThemeService } from '../../../src/vs/platform/theme/common/themeService'; -import { ILogService, NullLogService, ILoggerService, NullLoggerService } from '../../../src/vs/platform/log/common/log'; -import { IModelService } from '../../../src/vs/editor/common/services/model'; -import { ModelService } from '../../../src/vs/editor/common/services/modelService'; -import { ICodeEditorService } from '../../../src/vs/editor/browser/services/codeEditorService'; -import { IContextKeyService } from '../../../src/vs/platform/contextkey/common/contextkey'; -import { ICommandService } from '../../../src/vs/platform/commands/common/commands'; -import { ITelemetryService } from '../../../src/vs/platform/telemetry/common/telemetry'; -import { NullTelemetryServiceShape } from '../../../src/vs/platform/telemetry/common/telemetryUtils'; -import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from '../../../src/vs/editor/common/services/languageFeatureDebounce'; -import { ILanguageFeaturesService } from '../../../src/vs/editor/common/services/languageFeatures'; -import { LanguageFeaturesService } from '../../../src/vs/editor/common/services/languageFeaturesService'; -import { ITreeSitterLibraryService } from '../../../src/vs/editor/common/services/treeSitter/treeSitterLibraryService'; -import { IInlineCompletionsService, InlineCompletionsService } from '../../../src/vs/editor/browser/services/inlineCompletionsService'; -import { ICodeLensCache } from '../../../src/vs/editor/contrib/codelens/browser/codeLensCache'; -import { IHoverService } from '../../../src/vs/platform/hover/browser/hover'; -import { IDataChannelService, NullDataChannelService } from '../../../src/vs/platform/dataChannel/common/dataChannel'; -import { IContextMenuService, IContextViewService } from '../../../src/vs/platform/contextview/browser/contextView'; -import { ILabelService } from '../../../src/vs/platform/label/common/label'; -import { IMenuService } from '../../../src/vs/platform/actions/common/actions'; -import { IActionViewItemService, NullActionViewItemService } from '../../../src/vs/platform/actions/browser/actionViewItemService'; -import { IDefaultAccountService } from '../../../src/vs/platform/defaultAccount/common/defaultAccount'; -import { IStorageService, IStorageValueChangeEvent, IWillSaveStateEvent, StorageScope, StorageTarget, IStorageTargetChangeEvent, IStorageEntry, WillSaveStateReason, IWorkspaceStorageValueChangeEvent, IProfileStorageValueChangeEvent, IApplicationStorageValueChangeEvent } from '../../../src/vs/platform/storage/common/storage'; -import { Emitter, Event } from '../../../src/vs/base/common/event'; -import { mock } from '../../../src/vs/base/test/common/mock'; -import { IAnyWorkspaceIdentifier } from '../../../src/vs/platform/workspace/common/workspace'; -import { IUserDataProfile } from '../../../src/vs/platform/userDataProfile/common/userDataProfile'; -import { IUserInteractionService, MockUserInteractionService } from '../../../src/vs/platform/userInteraction/browser/userInteractionService'; +import { TestCodeEditorService, TestCommandService } from '../../../../editor/test/browser/editorTestServices.js'; +import { TestLanguageConfigurationService } from '../../../../editor/test/common/modes/testLanguageConfigurationService.js'; +import { TestEditorWorkerService } from '../../../../editor/test/common/services/testEditorWorkerService.js'; +import { TestTextResourcePropertiesService } from '../../../../editor/test/common/services/testTextResourcePropertiesService.js'; +import { TestTreeSitterLibraryService } from '../../../../editor/test/common/services/testTreeSitterLibraryService.js'; +import { TestAccessibilityService } from '../../../../platform/accessibility/test/common/testAccessibilityService.js'; +import { TestClipboardService } from '../../../../platform/clipboard/test/common/testClipboardService.js'; +import { TestConfigurationService } from '../../../../platform/configuration/test/common/testConfigurationService.js'; +import { TestDialogService } from '../../../../platform/dialogs/test/common/testDialogService.js'; +import { MockContextKeyService, MockKeybindingService } from '../../../../platform/keybinding/test/common/mockKeybindingService.js'; +import { TestNotificationService } from '../../../../platform/notification/test/common/testNotificationService.js'; +import { NullOpenerService } from '../../../../platform/opener/test/common/nullOpenerService.js'; +import { TestThemeService } from '../../../../platform/theme/test/common/testThemeService.js'; +import { TestMenuService } from '../workbenchTestServices.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { mock } from '../../../../base/test/common/mock.js'; +import { ICodeEditorService } from '../../../../editor/browser/services/codeEditorService.js'; +import { IInlineCompletionsService, InlineCompletionsService } from '../../../../editor/browser/services/inlineCompletionsService.js'; +import { ILanguageService } from '../../../../editor/common/languages/language.js'; +import { ILanguageConfigurationService } from '../../../../editor/common/languages/languageConfigurationRegistry.js'; +import { IEditorWorkerService } from '../../../../editor/common/services/editorWorker.js'; +import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from '../../../../editor/common/services/languageFeatureDebounce.js'; +import { ILanguageFeaturesService } from '../../../../editor/common/services/languageFeatures.js'; +import { LanguageFeaturesService } from '../../../../editor/common/services/languageFeaturesService.js'; +import { LanguageService } from '../../../../editor/common/services/languageService.js'; +import { IModelService } from '../../../../editor/common/services/model.js'; +import { ModelService } from '../../../../editor/common/services/modelService.js'; +import { ITextResourcePropertiesService } from '../../../../editor/common/services/textResourceConfiguration.js'; +import { ITreeSitterLibraryService } from '../../../../editor/common/services/treeSitter/treeSitterLibraryService.js'; +import { ICodeLensCache } from '../../../../editor/contrib/codelens/browser/codeLensCache.js'; +import { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js'; +import { IActionViewItemService, NullActionViewItemService } from '../../../../platform/actions/browser/actionViewItemService.js'; +import { IMenuService } from '../../../../platform/actions/common/actions.js'; +import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; +import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; +import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js'; +import { IContextMenuService, IContextViewService } from '../../../../platform/contextview/browser/contextView.js'; +import { IDataChannelService, NullDataChannelService } from '../../../../platform/dataChannel/common/dataChannel.js'; +import { IDefaultAccountService } from '../../../../platform/defaultAccount/common/defaultAccount.js'; +import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +import { IHoverService } from '../../../../platform/hover/browser/hover.js'; +import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; +import { ILabelService } from '../../../../platform/label/common/label.js'; +import { ILoggerService, ILogService, NullLoggerService, NullLogService } from '../../../../platform/log/common/log.js'; +import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; +import { IApplicationStorageValueChangeEvent, IProfileStorageValueChangeEvent, IStorageEntry, IStorageService, IStorageTargetChangeEvent, IStorageValueChangeEvent, IWillSaveStateEvent, IWorkspaceStorageValueChangeEvent, StorageScope, StorageTarget, WillSaveStateReason } from '../../../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; +import { NullTelemetryServiceShape } from '../../../../platform/telemetry/common/telemetryUtils.js'; +import { IUndoRedoService } from '../../../../platform/undoRedo/common/undoRedo.js'; +import { UndoRedoService } from '../../../../platform/undoRedo/common/undoRedoService.js'; +import { IUserDataProfile } from '../../../../platform/userDataProfile/common/userDataProfile.js'; +import { IUserInteractionService, MockUserInteractionService } from '../../../../platform/userInteraction/browser/userInteractionService.js'; +import { IAnyWorkspaceIdentifier } from '../../../../platform/workspace/common/workspace.js'; // Editor -import { ITextModel } from '../../../src/vs/editor/common/model'; +import { ITextModel } from '../../../../editor/common/model.js'; // Import color registrations to ensure colors are available -import '../../../src/vs/platform/theme/common/colors/baseColors'; -import '../../../src/vs/platform/theme/common/colors/editorColors'; -import '../../../src/vs/platform/theme/common/colors/listColors'; -import '../../../src/vs/platform/theme/common/colors/miscColors'; -import '../../../src/vs/workbench/common/theme'; +import '../../../../platform/theme/common/colors/baseColors.js'; +import '../../../../platform/theme/common/colors/editorColors.js'; +import '../../../../platform/theme/common/colors/listColors.js'; +import '../../../../platform/theme/common/colors/miscColors.js'; +import '../../../common/theme.js'; /** * A storage service that never stores anything and always returns the default/fallback value. @@ -363,7 +363,7 @@ export function createEditorServices(disposables: DisposableStore, options?: Cre put: () => { }, get: () => undefined, delete: () => { }, - } as ICodeLensCache); + }); defineInstance(IHoverService, { _serviceBrand: undefined, showDelayedHover: () => undefined, @@ -374,7 +374,7 @@ export function createEditorServices(disposables: DisposableStore, options?: Cre showAndFocusLastHover: () => { }, setupManagedHover: () => ({ dispose: () => { }, show: () => { }, hide: () => { }, update: () => { } }), showManagedHover: () => { }, - } as IHoverService); + }); defineInstance(IDefaultAccountService, { _serviceBrand: undefined, onDidChangeDefaultAccount: new Emitter().event, @@ -385,7 +385,8 @@ export function createEditorServices(disposables: DisposableStore, options?: Cre setDefaultAccountProvider: () => { }, refresh: async () => null, signIn: async () => null, - } as IDefaultAccountService); + signOut: async () => { }, + }); // User interaction service with focus simulation enabled (all elements appear focused in fixtures) defineInstance(IUserInteractionService, new MockUserInteractionService(true, false)); @@ -397,8 +398,7 @@ export function createEditorServices(disposables: DisposableStore, options?: Cre disposables.add(toDisposable(() => { for (const id of serviceIdentifiers) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const instanceOrDescriptor = services.get(id) as any; + const instanceOrDescriptor = services.get(id); if (typeof instanceOrDescriptor?.dispose === 'function') { instanceOrDescriptor.dispose(); } @@ -417,14 +417,17 @@ export function registerWorkbenchServices(registration: ServiceRegistration): vo showContextMenu: () => { }, onDidShowContextMenu: () => ({ dispose: () => { } }), onDidHideContextMenu: () => ({ dispose: () => { } }), - } as unknown as IContextMenuService); + _serviceBrand: undefined, + }); registration.defineInstance(IContextViewService, { - showContextView: () => ({ dispose: () => { } }), + showContextView: () => ({ close: () => { } }), hideContextView: () => { }, - getContextViewElement: () => null, + getContextViewElement: () => { throw new Error('Not implemented'); }, layout: () => { }, - } as unknown as IContextViewService); + anchorAlignment: 0, + _serviceBrand: undefined, + }); registration.defineInstance(ILabelService, { getUriLabel: (uri: URI) => uri.path, @@ -435,7 +438,9 @@ export function registerWorkbenchServices(registration: ServiceRegistration): vo registerFormatter: () => ({ dispose: () => { } }), onDidChangeFormatters: () => ({ dispose: () => { } }), registerCachedFormatter: () => ({ dispose: () => { } }), - } as unknown as ILabelService); + _serviceBrand: undefined, + getHostTooltip: () => '', + }); registration.define(IMenuService, TestMenuService); registration.define(IActionViewItemService, NullActionViewItemService); @@ -488,10 +493,11 @@ export function defineComponentFixture(options: ComponentFixtureOptions): Themed displayMode: { type: 'component' }, properties: [], background: theme === darkTheme ? 'dark' : 'light', - render: async (container: HTMLElement) => { + render: (container: HTMLElement) => { const disposableStore = new DisposableStore(); setupTheme(container, theme); - return options.render({ container, disposableStore, theme }); + options.render({ container, disposableStore, theme }); + return disposableStore; }, }); diff --git a/build/vite/fixtures/editor/inlineCompletions.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/inlineCompletions.fixture.ts similarity index 74% rename from build/vite/fixtures/editor/inlineCompletions.fixture.ts rename to src/vs/workbench/test/browser/componentFixtures/inlineCompletions.fixture.ts index 06abdece6b686..3f30440013af6 100644 --- a/build/vite/fixtures/editor/inlineCompletions.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/inlineCompletions.fixture.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { constObservable } from '../../../../src/vs/base/common/observable'; -import { URI } from '../../../../src/vs/base/common/uri'; -import { Range } from '../../../../src/vs/editor/common/core/range'; -import { IEditorOptions } from '../../../../src/vs/editor/common/config/editorOptions'; -import { CodeEditorWidget, ICodeEditorWidgetOptions } from '../../../../src/vs/editor/browser/widget/codeEditor/codeEditorWidget'; -import { EditorExtensionsRegistry } from '../../../../src/vs/editor/browser/editorExtensions'; -import { InlineCompletionsController } from '../../../../src/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController'; -import { InlineCompletionsSource, InlineCompletionsState } from '../../../../src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource'; -import { InlineEditItem } from '../../../../src/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem'; -import { TextModelValueReference } from '../../../../src/vs/editor/contrib/inlineCompletions/browser/model/textModelValueReference'; -import { ComponentFixtureContext, createEditorServices, createTextModel, defineComponentFixture, defineThemedFixtureGroup } from '../fixtureUtils'; // Import to register the inline completions contribution -import '../../../../src/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution'; +import { constObservable, IObservableWithChange } from '../../../../base/common/observable.js'; +import { URI } from '../../../../base/common/uri.js'; +import { ComponentFixtureContext, createEditorServices, defineThemedFixtureGroup, defineComponentFixture, createTextModel } from './fixtureUtils.js'; +import { EditorExtensionsRegistry } from '../../../../editor/browser/editorExtensions.js'; +import { ICodeEditorWidgetOptions, CodeEditorWidget } from '../../../../editor/browser/widget/codeEditor/codeEditorWidget.js'; +import { IEditorOptions } from '../../../../editor/common/config/editorOptions.js'; +import { Range } from '../../../../editor/common/core/range.js'; +import { InlineCompletionsController } from '../../../../editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js'; +import '../../../../editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js'; +import { InlineCompletionsSource, InlineCompletionsState } from '../../../../editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js'; +import { InlineEditItem } from '../../../../editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js'; +import { TextModelValueReference } from '../../../../editor/contrib/inlineCompletions/browser/model/textModelValueReference.js'; // ============================================================================ @@ -52,15 +52,13 @@ function renderInlineEdit(options: InlineEditOptions): HTMLElement { instantiationService.stubInstance(InlineCompletionsSource, { cancelUpdate: () => { }, clear: () => { }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - clearOperationOnTextModelChange: constObservable(undefined) as any, + clearOperationOnTextModelChange: constObservable(undefined) as IObservableWithChange, clearSuggestWidgetInlineCompletions: () => { }, dispose: () => { }, fetch: async () => true, inlineCompletions: constObservable(new InlineCompletionsState([ InlineEditItem.createForTest( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - TextModelValueReference.snapshot(textModel as any), + TextModelValueReference.snapshot(textModel), new Range( options.range.startLineNumber, options.range.startColumn, @@ -117,11 +115,11 @@ export default defineThemedFixtureGroup({ render: (context) => renderInlineEdit({ ...context, code: `function greet(name) { - console.log("Hello, " + name); + console.log("Hello, " + name); }`, cursorLine: 2, range: { startLineNumber: 2, startColumn: 1, endLineNumber: 2, endColumn: 100 }, - newText: ' console.log(`Hello, ${name}!`);', + newText: '\tconsole.log(`Hello, ${name}!`);', }), }), diff --git a/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Dark.png b/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d19007547abbce94328cd59fad93930f9f36cd GIT binary patch literal 8827 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 literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Light.png b/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..b632c504f804f224d0d804827f402417d3e98ce4 GIT binary patch literal 8388 zcmb_?WmFv9wr%4fKuCfH4Hh6lL*p7CXprFU?!morcY=k+J$M?2MuWS1<1URuqnGcz z_wJuJ#yR(m@&43UwRhECRW;U{Yt@`PTv1*U=OxKY004j^EhVl503eAx+wd32&qwUh zUycC4Yk;))7ZrE#VFs=Zse0y${$Ut`#te_6FCx9%SvL+E-Owi^@*Wv$zm8fZh~28Y zfsLiiqPY(1yM!reRc)~i0U?g86~x(B+i!sKEKqMy#+r0I)R- z^}0S@YCNAe&+>V?TLICMy#ifMt4rj?0|0aWJBa0GH+XI`2e}s}z>l%mro^4H;9O5* z1i*%o#7qFsLj|-my=DVoqadNQv;7AH68Zd0!C|uxR*=3@J9}|4gLA^~+=NItSVuDS^yM7C!QGo1;Z%f9u-9{MLw&ad4#l6A$kqGJ7E&Pj|jY;`v=3a(nyaG zdOTM>pu?I=N3l1JC6{DiVi$$3Sm2*ga0{{?{)IJn`q9mm%}c6QivIf)If4ZAyHawFoI@ETMKaHWy;8iZ zV2;EuYw8AN=G}VjEEu=juhqIvoAER{@s2;nA5E85B*N2IYVhyzOO#d|l-4$Cy z%OfSMBZ-TihBj_9wxecr$Ckp*RY-z!SPOg z0VlfQ5H>zZ*gi0{N8u2(RrOxc8op$JM^!ko*NACIXjpte*7!xi(QB+{g>2_$$f0`z zx(iM{2ELg9@^H^uCuJ}jRz2NbRW_F*q+AOCb0!y_86g@TdYdnXU<(>FlIfM*ptgfp z&V|~|^iB=!dh>_v_IDYjkZC)v-7xu4r!FFB&UD`bI+d#UE}b{2%X0Z8Fm8&UyfB?i zu+K|S_F6qT<}f3|TqT1&dR7}O#;v8cBe}feJCk#VP*v9|W@!>|H8Tj$H1P>ctx1u8 z!xybl$?rPxUCgUPLj99MlqYjPpikEM$Hh&W>0)0Pk1~Y9%PHr;{T!biI>SxPBB`w- zhNDYPem_Rn{YAqE^_4^GK+33o?D@8}s&A#fEw&!!2O@7#*}?n)i`Oy^hx?aV%~o9; zlDIAGgtQ&iF-};u^sM?mJKUXd45H^#2kQlq-Ad-gOV=|x2{lyg{uPC%7xRIt)>yKZ zt~NoWJnZkR-!*z~kpGYxmXp}~8Q#OCgoZEZZY6^*qIVMX za!~!=(J=Wjky!U)#EB>f!#rNf#KpI#SxwXW^V`7c2ysMM_LBxs^djUVl!frj@zW{r zj{~n|0bYbeUytXlkp^^F;@%i#$qGoQy|o=U-w$AT1v!r!KOanMKh&6APK<}ca$tNp@qPb4!$S^nd8F=&S$B#pcMSmJQ z`Fi+0T}oVX*3nz_va452+Rb}nEC)FwO{*u5+p`$d+ac~UlGpQv#XII0SFOHgB`^v~ z_TdWIo$L6tJg>dZ@ij)6B8_mGU96qQq5Gmg3PuceWh#HD&Lz;lOOv$G!-!Sa^)uhX zb^JV@mp-pRX{l^f`=1jNp|k>;rVt-ixMucN^ZNrf=V)`#kBL8gt|m_~Xs@8*^G$$= zzpJ|kiyLi(K#D_BUa21R{26I=O^I+Plj6x1&*8SB%27i_`G>wcc$>byzQRE0>TW50 zGOnD02!X-Qn})HW`E5_qes2(DHb=nrTXjQ&21TXP*;1+`TQ-_9V!a$Eu?zh&AR}zv zN}Gp%&UJ^-CfW=Kb6~?sRM*sb#>W86BBQP{O-^>$wTtEY0o`kb|4Q`j&n!$Fz!*Ab z&gmE7|5<_gR}sRk)VJsuKAO3$MKf3&|7g$w)vhD^?DHihte6*V;9JPRYyj2Ymr@MN z(5TyjV;QYY=IcA0n(X1AZ9!$B#Qx0^w!?-f z6yRU>!d{%EX6aob&m+z$VZ2-%jh9a$Uf#8_kKh-~qsDbx&l`0ViS+B{I;e`^jyt!u zsMVZF8k$N@v)5v-TAJ?`Q}P&y5@_^b?M~F(-7`;4DiO}MBl)P0Rr_*>O{0KTDb-m+ z$X}}7#*~UYQ{=YhYvxDIAf5B4_RR)G&jg5TZmSo$H~~qdlSu29KRQy;antm8&1a!B zeHS1_Jp3>9_Lw}J$5ta?i_RnM+igA*kpGJ~V-b04rr8M97SFPD&!XdSzmK5Z1W~Nn z*(Ggyy+JwsAka4L?NZwgZEtO#=GtGK_j()q7wZVm{Dep~OM}mILiDAQxqi~=>iL3m z9IXjWZ-G%xv;(kr$KT<22!~W4uhr(V|GgI4Z7^Oz>`2f4zBnh^;;$Lrq^$I1}Lzt+s@7ts06 z2#o3*%q&Z0ds44T3?9td@BMR&nL{}!Lko^`#m4`>%-KmS$Lc##wmWy4`1^ys188RrHUiYD({GdUZm^JHs4 z4t=>=ktL#cOE#Iap&GbFbA|yJ0Zo|9BV2grU5%Sls)I_&W7%k4@-`#y#K5)c;4mxg zH<9L&l2}yyU)ny>6fX5l%XqTiIB4){wOZ$>7=CU#qZv0E$vOetq+ws@L0#vad%MBD}Kr2Q_CQ~EzUxeuzAayWz$Ns%lbGje01Og zrq^z3&D;b=34xhZ+Kg;_mcz+{)S7aM*`I0^i>uySX&yJSiu|hC437IycSgrOPo2(l zejMNCIG%O#vZCcBGs_2BycZq?a$Tx%gWSf3gC-?Z2F;2bIl-5B%H}f;^dylN=zQmw zJpmrmG)(J#F$HEp!6ShMhdq0Jahb)IRf4Ht3@(EEGYoQ{LTO2D0Sv9;j>5XkLyKP( zUtNPIol-uQYhYW$4V0bk7gG5!_~it3KAYIZ(FRzc?fp_pcTCmrDN0`8;-;6)+ar`Z zm~=WzsuBMn$7?pS+R>h%J%2b0;aUr3#xZAPU5|~avO^s(H%FJl=V)V|h2Y2LGUB>2 z4ZYCtG&oprHXTP|K7u}EGV{t}qTWuzR;)-tDKdq70wf#$;@6d%t|Wi6kU@9T%EDWDlm0N*aWB{r1*_ zaDdHHkWR30M8N-?WSFI(Xi2O#kn-jw0izWV9_F5*jMsmYZ}HzhA_a)Aqj@7breqPP zz74Src>dv4CNt}^==+T(_yv{@Z0fcq%dNl`1?|Gmqu`jOmx>Ar%{F^zQh&qs*?#T) z{L1y#G?o0_<$io-N zF_YoIh!%@IbDM&BHXNTNkSti)G|euYlvPb#x+nof(Ix9T(CO944$W5JGfM8$d4l7b z*I&bt_rS?QczKp>Ryy<@*c>d}?gf|4>Zn#gy)NMabebsqq?}YVO`1ZO=v*jXy zd`GGcx6w)Z#!WsXYR7GyVfEmLc0LDIxaTc7V)&9wTE#lG@uSZ*pCY!^i;VgL*;{xU$5zW zR$6JNw5meB?>in(VNbjgPrjfLwn=|07;Xt2Ms~pLp-E`!Oi@op0&0y1skh?KO(Ly? zEAat2%gV{r8%H;-?E#I$*G>qwTU znzC4}o|RCZQ)50$4IqtMbL}c$p62|GS_76tEndlro(E^phmRgagIjU}p_4Y8mGh1N zgh9bg@W>iOV|?0?g0g2XW*pVNNGFwkW~e8LKPBLvzbNO~%?a&73sAN-)siWCF`dgaQs0%+ew|nG;+L*q+M?xE9YobP zCut6BKR$?vbY(Wh+eU-t`Y*S1C-vuKV5s;R>G~1H@ECIx3|(#qDR*|ZgzudEdZ^|q znqU0N=$qqoL#O5(q7#O@u>>KQ)&btS!9Kn`n_&9&!?Lh=N#DtHUiBbp(A-%lWojO+ zkAS^dE8u(KwB7hIvcQVd2J-Iz;R3=P_0anzRPYle?AJ?>8Qh0`zei3U9_7)tjU}Y7 z#r#w@9cQj?aMHJ$%xGZU1PeudRohIzXy`RHCur_)pf(%P0p7X6_@=CjT@_`1xr?W$ zxz>7?+(wOTC1^DQ=F3z1WZyUUYeA*0e;{T0Dm{O5-H;l>1XrA}T<%kFFc_hjki=62&F^? z-xVi!JoS93%K1f^cQ=0n@-_k#y*P1FKBqfgpXfY0`PMLd;tEZHZglhUEk+&uPCd>i2YXb3#J+&*Sw ztHPfd59u|<4q43W!+Ehf;upjK)7G2y$iu+uX#T8~Q9iBHO^zf!=6-JSe@#8!9@MN* zLb<(9)j^;(QTDTk2>5+^;klR@~5;D37R!;rXIR?miZ6fxgQ;@wko9pAzPAJIe zgU9^MZdWYVpBN##8@)>i+QE0(fM;Gqva-A%8iI8<9K>&Oe>!X{gOGX}aaoS?)4M1jNW6Ux5m>=}efx&D1H`CXV_kx{WSn}*-tLJv5Jc#4y zptn_7Q&+A|w7p|qQ%PHUD-!Nf5pi^Qndm~>7D*3SR3Nacso4BPES8<6Wh0<+T{r=Nu0(5t%YHK*5soVQS|=H*0wj{;!;8B zXX70jWLH6Ju8xe~Ejq(zr`C&6d;WIx>d@qJh%9C)Y?hpIetqbReS)*LO z!F1+}i+yc(C#pR&7tZzWMk||w8bb`0SZnp#rV?Z`J=2#Z(2=Ru*)SxQQI^hnd^%c% zIj79^UEqR}Bd}x0XH% za{cT1uZ$%7e3EuU!^6uIHK*LYyn1tqP0~yG*7B)~=#u;_5+Khci5nL;&RGtDERO&J zP_f}|&(VQ>-LBnZ6gt+H#<{1MC^6^ptPO@LhPtk)_qd|H&0g#6E5Xs4!Bxsk%-u59 z#juqFq7kCgk=s%&t!%yQ_`3*DG9bwo+>4ctz7tNK3azb{h~d(YeDa;8w5}<2=5#JN zsQIyd6JKJDRh|&wGQL&Kfg)QPUwesTq|^uU$pA0HBcHg+zfV%zTG=?(Y2jQ%UCM{< zeUJq%6x;9G{g_0iO@4vnwL2&pJy zmrE{EUT$8l6^EvAk!e@c#*r;4{dB!GGoqtVrtk2d^ew%5pHN>K@0^^RbQiapid%Z{ zO6;t?$*6hh!#n}p&85Z_p9$|UnChn1v-6KbXU|Q0wT)r6bRTh4BsRu6*69Rt-rSu0 zdx0^kO2&&=N@VSuE}c$&JfnQve|r3?vBp_G0D_(55xw-rFZ+xUg9f`yee%#$%M5Uce2ucviTmI21Hv(aNiInXQklkvLg24YVPl6_}vw;|J>~6T@;Bv1NOas zp?ZI!3|tBJ1fHsS2(3|PWE>TK5}22nTUzBO)V+Lkq$CjGos0Xgyw4tgi(^xE%~Zv2DNi4hzaXsj%5b zjAI3pA9!;r&fY~I#eAUG#?5=KRoe0h(Aa1pCQdtw{{S4xJ6@mqKM?5uhGbWso; z+)z1o#bqZT3S8mk-ACEk{lS8++Q>*~MKbdYol4 zerCAQadoi69lZ+_ovWeQ-Ld>UGM;WPNeB@6Zb4L4>t55o3e0kQ2xlELv+3ki1O)UgC*Xji@#p_Q}z5O27F z%=Miv^d*J0yB=Fbv;@s#&kAnG%A!=fZ@m?hV~3EsZaF?9+dF3-^}8))Q~!d30s}TF z0Dw+8Re`CAk5f~S>YF9X1G(XB&?Liy^|@@X^4j_W!QK%ag+g?qMB?KcjvVB|r^?b& z8i3zhh7S7V>8(^NYYHMavD_x-Iy}Ci2(M(hur>cj#>mLWemwcGWPw+JIq|xVPjnIn z04_B50@VLm^YPzZ$iFdMYy1!^AO!c5Lt8d2=;r9<#^mm$NMn`LqR~^91iC%w?2;Re zj=GtGO3*9o=wTKeS>#=n6WaY%7D%hulM#q1*Pw~~SQ=~e^zgKVNUudM_xl|IdScB& zbe!}3dG}K<#Id+L#&qZ9jawG}%<3OJ*v%@WRXYpcFsS)j@a|StVZ2S@VSnRV=pKyU z=SBJUce0y;Z;B0iK}yaAnNX~c(*bMVS7)R<-(rx`^^5rq13qwNw4ek+&_7a_}txQW{3JMyY zldMqef}Ims=vP;yuk_v)etz@YYZkZGS-#Q{xw}EQIIr0jv-jW*5lc%r}Qa{_A zxi_h}p*|bKLY8C|jLv~@MF#P=cj^7td|q*&lz^YOR0;`4D5h~K{>ybL)CI@#3`Z{x zSA(E_6Y~W*PM*sS{QOSo3t2hlSsc5<( zOf1!wtVA12>b?|t-*W#d(|>Yi?Cmxtz#x%vCaAD%%9WFiiKb4T>?t=1BWynJY>T`~#uJh+^3*I~f7nB1@1VYqd zkC5x*cfJ>bf%p`u2z&b{`!*{%pYGZ6(Lk0i_G8W-BQxD`{;U-bSN7 z^RE7VrjQH6-yd%v^CEt41xD>>N`ErFnVjZV$lx=@mB)m8N;I%P1AU2c(c!j9kVBvM z?#13DOEZk0jU+7Ik+z($#hl6JKycamEOwYaVo;n}NxUV`7}l*wyJ7MEHPw4={_pL4 zP(9)pqw0Z=C~MHj+XV{)q1O>+lEA6vtFMh;JDnaL5+R9p*G#JS`(=xQdl_4Gji%3v z<{uexjsXK5eZAo*jgeX@!>X)=%bdNFbK^t^te@jSC+JG`nByX}sLk5!ZUue8*L9bS zhXnlYYN1JCZ`Y}!_C+;NOTBj~(WEbFIsi33$PCJN&?=bJ6XEtydTX#-+p26@ZI|^M z&9YYSfR97plv>p@U3AE?A{aetM(xgsO@|;8H=a-F`;JBREKvORL4X}zHLp+j{66FD zbDI*@DO6d8sox8iuo7tlT z60G8obmw=o)RgSGlks!+yK_FXmi(t9kr*!6LpzlC&kKJUp`7{3iu$6&Ez^~U?7qFY zh>GyHy*q8BS z4x7b`k!blMduK^5TdU~L(kTbiVxu6VqRrO6zJpT1-||X{ko*%>Y8{befGQkRY(SSt zJAe)Q|EH02^r!53dw}6T`vU%1e5m4CdS8b@y`G~QU!_i^r5PK&D}&$d#s3!3-JT_R zpR0Lufl*^JbU(~ul@f!Jf3$VPcDnuXN?Ti99bvfmF%0^QeOoxS;JrE7Y3=XdPZgeh lJUxMIv9q2H^naY80C?K}?A(qf`#+BWq`%6GSBM$}{1;fZFu?!- literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Dark.png b/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..80295163f4526a98833310a5392c04b0f49b7c9a GIT binary patch literal 7537 zcmd^^RZtvEmxc!j79_zfKp+r;2MBHn7TkRXcXt~sA!rD0!G_=#oWWg!yTdR9cLpDv z<=eg4+N#}uul8ndy58!yPgVD+zBuPO5vt0c@t#vY2LJ$gawsxuUkI}AEOQ0nV|iDzcZ+EE63Qfv+>8mlTVHPW z!Unvq(rXX69}9dqL&L<+%g-0(;^+4|{`)Dc+XVq{MYP>U0|12Sg%Ggqa+3#V+tr#= z;O$c0cGgqCnE2yXx)Y6U-4L=FIm2vSZF zb=!TnIjQKWtc;6p{1xRYZi4vGY5s_6=N=Yk((k#vyBV#t;*vyFXEE#>C9EjqT6Pcn z^|{(UUb*o0>Eguub6Wh5R!Vx&w`co-XSB@VvQ3>{=IDndq(oyi3;yF=dtO+yiw|xN zcd4@e#DmeyV|7bjL&JRD+49wy4vq`4@@!JuO^nK8@9Lf7W+Ols#U{V~CT6(e0Xgc% zXwkcH#3{rH-yq&-6ulom9&D$qY0s<`;=kMHti2SES}{`pz|M|=15!;?+1hGpyrJh7 zkR=QWYK_{0rM68K9&&gj?`{qgOVl>wYwy1u3moTRH(>aj2r1^@IfGupCnmxbi-E|w z)QF2^H<+r08%m}8#!p=4%kuJleAiZfHj_oqtvn^~;-z_z#b6_hx3SjS9ffR%|K`=U zubfAj3Gmc7P{h&^Z(wjl)2GkAPOfP%D+|&1ULuCXBCoLM?dDKk#3WO5G;PvwVti(~ zR-V)NwCD#3fg4%3c5MrJi2tM0lcK-U>9ZqUdNkg2CwO5ym zuH|!La~%r_q6q}wnj`_b_>fLFgkUNDj5cwL!pQh6i`$L$?F5IqM?-mzaV!mUQPF6c zh<}cP`)Opv+rOxi9EC62C*ZElV|E8olu%l3P&<;G0^lz)pVNU1jz zZqV{zJVXJL{+b1;mhHsu}LozlxC?`8~xgJ2GhMuh;w% zCg^6-z=lDRmg^lrn_|V3O+J$TFa5eqQrdLg&OHL}&qe^y?|B;!*E+8w7yr@BrD5Ba zGeZ5E$&SwUIzZu{LGXeI;d75p}yAU)SUGCFx^zFdWA@w}-X@8LVhX1b6> z>wx0$x)RE12fS!I6^+t@tQ(k&fM=RYLQCuyu^f6Cg-01%6M{M3Xu8b_IV4Qy?;@ZU zal&xj?jwcw97Qa2vMsh2O;CJ&)uiceWH zoa0a9IkZyo+tK|CGi)Qu$lbrdXd>QAKy3ATU2m4L;Y{6cH&v(Gxt;5ozjYUY)_P`5 z%*|awMpE@$8a^=@eUd_O$ifA6CdAN%1w@rT3s9>mRwV%X|@hv+QW z>aIBKf6icj=zZwyHr3hMT&JD1x7@A0d#HzwlVLw@l^|I9#@)P!tHw&9jq9RXfu+3$ zdB9Zcv2_TIT58P9tx_nwX0(%GHrOqgA`?R@KG!tFexbnfw;%55x8(apguRTc5kip*=K$J~00GVXa=;-TmSM|wtj*&BCBU)_XDCel>S#t&6XJ12s>i4$t% zDW4LsmZW3Y=zq&6_v-oO0}?X4T9=@T?tM4k)ZQxqKF|H6?*2NSJX2R42VjNgfLBT<_o5NKA!ye>gL;-1(9H(G+X`PdNQtkO@vXZWRJ>6%{*}CE#h+nmS8gwGQv&UcYVFOcJn+MIHvJeV9=eQL#TZpP{m%61NvxG*@<5hpebfW>5cL%5fU+JRgE7qnqVXN6oy4a>Sy%yb|Qm z*EvPWu0;eZb8s5zt^_kReYqau3moMTRolcGBP%gU(3Z3;ydSLj&<751HZ&*_ z>cql0B;wWn3id8kt??<$3lf!dc;KEj(+OH$*QxC!c3l1KZV;D=lZxU7jR`aFh?0bf zj*a&vkH40jGPyrUHqs?9t|C;8}S zzv^}BQ<<6dOUfg=dzk~Aqpkg?(qB?#CjM=pm_8awDx-Hpb#AWtyEcC%una#&$(e9f zXYF6~uVe2J#G#uw5}eF*W;A#qjj=TEy*hJfP5uh+M|w5?VK$Bm6y

B$M?n9OVzyY$IA1PICm-SBP4*~wDi&(Fjk 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 literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Light.png b/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6fda930348a73ab00ec1d66d70d5de568b9448 GIT binary patch literal 7262 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 literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/ActionBar/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/ActionBar/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb6bf18aeb59edbabb22bf2a4abb3f980086bae GIT binary patch literal 3917 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 Ah5!Hn literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/ButtonBar/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/ButtonBar/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..48c31188e4a40030d2397bce4dcb59b709b69896 GIT binary patch literal 4209 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 AMF0Q* literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Dark.png b/test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2e82e8ae528cd1142ab896c19a50f4df355192d4 GIT binary patch literal 1912 zcmb`I`#%#31ICwnsaW-{H{{kKrE<23kS#6u;h-Fp%iNO6u)@Y#c++8d<+65M=9a1B9CAF>Vn)T{y z2ix_Uk6p)b;3Ubzq(lvj{iKtGJ7IWa4w_c{)Iilf%=bJKR*fc7r;JFnHvjF;n)~Bc zc+`hlRACCDZo?A4l?+v!!7qPlK&0**0|2yboB)8gPe6wNZ`1!_h=xF|EY{k>a7ped zL~Kk9qj2{EB$$&VowkXqO5rJ#ibR@nh+@$rXD?&t^9-GZRbtP$4v5A4r>jke|=!K!__AF>ReZr7F1*AAhf%dIwml+ zPqqmBR79a1I-rtZesTc_cGfye%s;hhwPXP|$8<@UTCA&b;`E~ko0K=CH75Ev&4blJ ztwOK_1mnx|&Idf!gW=``d6E7J8yzbqbxBPDi``rk~U8J#|Py>M>od8w1+3fELiE(~e&fK4$AD%uke2?uI>0Ol&pic^i`OY?5Qg>je z@e~E<{EI|u;V2s;?5i3-QWngEFMRcYybo7z)73~%#)H+Qi`yAb$uG1UF!3LP)c=Dc{?ONp@j4BSN%E}Dyn(&)X!*{xlcZ5YLei)6+ z{B~#BWTFo#N;feR&AqnF?{}RquP;Yl*@uCUc1eah7losMy7m7gujn{OftzDvasH$zBjJ(CUDIZDrhJF8Zy`^OKtC*XQ4`YRsQHb0{8=>n|FKwctBSjOYN?w z+3=ie;WCBN&)ry%9`Ha#mZ4df?Ct&QiapqD+r;%dP)elLND_9I8xGu^9M;7I$<`+?;H=BYg{V0R(3Pe^wsJ!&2SbimkD3p^rmDf|jV^27$ z*`J34iD1FeMs)^rs+-?5gtg9Ho?3bRd*_M|n-f<$>7t6li+ZMRcdR+nBIpXx_0M!W zboHn-z&J2^!*i_S-18~E_O`{3BU&GvQblCO@}k&(j4f+;9%4)JftyMD@#KFME=j@r(rn(){J)$gXQ%hAcgr4RrIp#6A zk{?#KgA(QZap||2!YUX~l7BiJj#{r*M0lSsE|z^yWUU=dA9t=^ZtP2T4ZMGYUX-O8 zV;mBcyK~*|8%L4K;{@a<&GUS$HG`Ge68#P*djJ!+Km4s{Pdmfgm7u`fH@Ib;=AMLL zuTah_!=EZMoK2<`Uz(EGSP@78%$NN2c&`S=h$^2E^g z_#(TtX>8rBZ*ReSqjEyX~rg|Eiw>{qtB# o-Mh`*-Ld#%g?mBu@8jGL2rt@r1oSgY*lPf;PM(fU_MvJ22LMU8&;S4c literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..671217dae1af5d0891b5d9eace4a7de98e14f018 GIT binary patch literal 1806 zcmb`IX*Ao38pi*$Q&mOB?bKB5OBrjWNUgC%shq)Jq|=mi>`TNhVr^}`Zi%g7)L^3a z6jMQv5UwIB_N|x(MN+LbsWhpmYrfuZ_niCTea?H{^L~2HbDm$etFwdT1-T0V07%|( zgt`HMNXO}Z>%8cxD%Lug1Hid~J5U>s_}{nRLL9G!$&2j|mlV%;v<={AwWt9R;x%?x zV(Ahhb>!96OKfXdO|P`cntuJvLJj9%G8krlmy$GXg0kKW5}sPWw3lc&47$*sDir%- zh3OilC8m_H^;2_7_5wjJyNW`qiA~Iemk%`(iyZ*~>y2|~06^499RS2NWPpbmGU9-> zZT49}nE(|9@?BL$07tC?08oGG2mmtw!`n!i28Yk*zkmOJp#@1xJz+`jF?$kE=jijE zw3HOc-~*e=X0!3UGH|$RqEY}kWIgC&{C4WX{w-v0lHkiBaet9OAgryeJ$fX<`i>5> z;eBPG=iUXyH$pi@jNv>b7Z;bXju#UsP=jQ!?{pIBv^T;c9BtLf`7A zi_7lc=$TMpp)PSd1Z7__5;1XbG9yJxt6(cX;cn|k*V{xQJxR6O;u*vLdTFuwK~@N9 zP)xV`AVv@T5v-W;kCDHotJ87gtmB5lJZe?FP zuyi~7w+X=xy!5$GERU$*>G)fwU`Pk$fc3}BBA!mVYTRV3iy}=r_605zGOoa?P1uyt zsqXgn`Z1h|&lg@TzjhsWKk41b+~ewI2j(i2zNLS5t!3jz1esN`l5p=$g=02)C;`Vem=!nHZFp7{Z*JE z@@)XhiI#P#V^PhdaQB~@5Hm9$=T4!=jximvbZ_P0$Ke;08?qU+!u7uL$`#vyOiS3{ z#1NL^(37AW(ByI1K)wBoW5ora@DB95unDigx zxUmnCuXbL`_1v>>zOK9HkiEpuUPoGezxCSOcVg^kvcQAd{lUci5=K4dh_^!^s7&4L z|Ly(j(D-=%d=r9UD4>2#t-$T**X6njGO(G0X2s;FWR=c&RG@dH?`Lj^HVGlwLQD>h zNol4eq2RlwaJPGii}2E(B&bEpZjsB=VZy+o&f~OA|5dcnz1~SC8~k1IC`3+&b;jn} z%$0?ah6t+gEb^gdT~#DWx_8&PHNpbb+sJn&LD@#Mm6PKmOsVv{(~^@p^hk^GKG`M; za_heh(e5&#DZRb%B?!(`f}{uq+{eZ_K}gebonC-D_Ri2|+Xrd?0d634Q2+n{ literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/HighlightedLabels/Dark.png b/test/componentFixtures/.screenshots/baseline/baseUI/HighlightedLabels/Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f1801ba1a87d1def3af66fffbe1300141b70b8e9 GIT binary patch literal 7104 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 DR=s;N literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/InputBoxes/Dark.png b/test/componentFixtures/.screenshots/baseline/baseUI/InputBoxes/Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..368dde03b45594adc8f87c90f01605798f8b306a GIT binary patch literal 5238 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 x)BdJ!{ke-6 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 U!b_f7NqhpRtLQ*Vl&qfr14MV7X8-^I literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Dark.png b/test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..90b44bae5125e0f0ab807dd85d9cf2a5c45a3f7d GIT binary patch literal 5446 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 literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..f751604be902cd64383355bfed5f6989acca0565 GIT binary patch literal 5340 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�L!NHwpPsaYu+f?Q4pEAZu`Pl>`kS8svNJG zJm)j%K1Jn(n)K6%XikfS2h=g{}fzacbln!`(+ze zeEJ%v?g$Oj!@g3&FmF7N4Zz*$Y7xHLK9|9HH!=sP(b{q|<4lhY7g6Fk>gd~O`k9cK z96AL!(h-5E!Gc-kyQWs&@+mymY~HzOq;P;4yWG_m8l&hrOe>V#B4ZzH376oRw#YQg zbV{>Pe`hA#eGO>VY1xkLe*v|B7_#JgdOEtZvr_$TADW3|{M$XAr?V3>Hyctx0caUI NQ$tIGI=x58e*wonE>{2m literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/Toggles/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/Toggles/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..292bea20ad6fec3b0ebffea232ea56ace0d44069 GIT binary patch literal 3658 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 literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/InsertionView/Light.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/InsertionView/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..33fc14473ddfbda38cc96f328cbe4c336c2b7d30 GIT binary patch literal 6038 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 literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Dark.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..be09882bf5af0c9295de28d100ea12c6ce0d687d GIT binary patch literal 6697 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 literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Light.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..76ad59e3288baf2203d49b90cceec11f6ad1af3f GIT binary patch literal 6513 zcmeI1#5u{6L7#K=mXr!AF>71c^1`wq? zhaoQSy8p#p_sdyl?Jwu-v)9_sbACJOou)GR1I7mc0DxTOt%42!fOm4YFD1Trw@xZ^ z?EwG}0V)czdcIjZOXQ|BHXTFxEt;B|XC5 z?0ZnyeHiW9$30^Te}j}1TF=5r9_Or};59Xgcz`d4mncXh8qAFk0C-6FpOufYQL;$R zM&JQtBIyOKBS+aD-CgvaToXQkxR?%KCqqo5I=4LAEBLa8psq%;n$K2^X-Yp+0hx{| z)5*5!JQM%oZ%cWuWzKDQ)EzAi>50|LNOP&B*6*JljrrI)k@9(lhJyvfa?N$D6Jr%~ zlw_FpcF-_Dc%h25`jW>-pAN4jC1Xesh`8*g^~S9|(w`cBcUrHU!S=%mbEthh{eIZ$ zo_2oi_Sy5@&V2j{_raoV$tOO2wPdKcVF~x!wR)IUDxZmP2E*P4UfPd{F5>z>OwF{v zxVc7Yvf_Wo3tD6+7@Lkb&uP*Cy|mYZ;c86kEVzlfODYT;532M;T%O7iDN@nI|F%S} zbm-{KoalSAtgZR9%Nl*^T?+Y+NSx|Klb{K@zeW;mZ<8(m$DGSn7;M*5_RbpbQ(xOk z&@rpp9?J+>VF4LiD)g6B*F-7|{8YXaLv2(#^&t;1DAnR?71mIbl&qD+MAs+e->F=2 z(J!6X*XpU{V#ONvzI2`@dO|;n$kH9n5x;3dCx7Pe%ym- zH@^s}O?w}}4!R8CqU3pFyGycD%c3^do2CMFu~c>{v`!4KIE<-)aZejma#c21bGRss z)bdRiq=NDbdCH_dO`33#Zq$dEE?LNzb>n)S$^dOQ@=;;=B{&5?4{~?WQ*p6gLITh0ccKfGn zfA(y*@B6lTL1|7E7L7h+Mx}R|m9coy0M+E7qsdm?YJ8uX9hJ^!sHU~^e7v7U*$MGK zD~6GA8`1*D6z`Pmru|%6m!AQ?kw?vP;sI5PJ(4sjr?x!GMbFw z!^bA%5>=u3Q~f{}bXqbuV$QYfRA*-&y7KUT>qVENR-Pg0@}a za>vhOEx0E0d0gOCd6GL+*CJKdlv##Iq`-p^#;y@`_UP$khR<5i$L;9#Mo1Ujg`Z}2 zRzI~c+~Q-s+8}?8`XBrcYT5~G{wXts4)#q6yl-KmagZ`*XGg{wWLjkhR|IMETJCVs zP`RSt#EuAY^ah|eT_-F6+K|6$wYc4+iTkqT;87R%mJYw6fQxd29m&AJ2a#?(Tz;O$m5L*C=+ciR!(PQIu8~b(rbD{&&Y(m)=8Jm7I!iBY56V z)+3%OY@4PO`y6MTk;@Q^|JNueDHhuO#RdhRe=eU?`!kn`YYeAj3IUV1oN#mw1w_BC@ z8ya4{*}p%1Fv2!Je&*dE`PXDvU}a?`d8Z;SjxL<6Suo%=zEM?I#L}o+ra*8;COn%c z%s~v{<{SK9Gj&jT~*!0S?P+@V(tOR zuLha^O5R}yzcf#N2`P4ah}1=X{XLwiwGQk17NMv>)<@rS|73De3nt#fp8QE#b}Bvl z`;NB-Or+ydVgJDkiBNGc`HxC^=zRn-@U4f7@3zsjhp@9|9r zcX=*b48?1gJA6TuBnbDQS*)WHfmdt45RR}hU;rH7pFAa+=@MxBWIHrh_+uknpyEX@ zRHA1=P=^EV=6Y~Yal=Ab|7SJ5Mxa)-4@W_Omm$0eyh4jew^>eVy}yObhPX(SLRnxU z@&7jbmeVJI<7uLpJc(V-VNNaY*t5t`ds?bjiE*)!mSZH3c=QyM6n<_vS<%Ndi$WC@ z6lzeiL?9>i0l{v6b!bNKx7L zNDMrIHXOERY*VTF0YN*)IA@2I(Bb*SL}-)xcDc)&@!J$4-#G(eFuw-(QqpSE<`Moq z2iYpGYQ2Eo94IyMzE*f@3vFi0eY6xmt`NpD>Q-xc@5J^h< zw{UPLd}PRU;b1({1llu01di4;Nz%=1Hg^b3Dd6-nE%_RYYU_XxM1!{b%DQ4mt5zG%zW8FTH)~wJjYTE&_~lxx`qG+`&j!Ou>HjjbUSaSniRouFv^7UI^voOi#OrNcg{>=3W{mEfcsb{G0 zIuX*8u@Ba&vPF++bVB+@pj^ltL7@zXOEdrCmweBZ>~Nmex_sfrld_`qBZ8#KUgNVu zxt>Qpc3zaH=^VRV^Wtbkf3hj=U}1&L5|b4_GG1Nvysx*Id_iMiii}=H!1nec7<2PF z_~!bX^b_}M?U9W)Cx68e$Q0Ys;VhPi{@`ErKSl|>#gslx)-)OI)$rPu1A7Qc%)$MM zRtcJo_3R5l!sG7@)L7-!{Q9z*?$ZJqRd{W}lT$e-Ux`Pe@EoIU>($Srg%@7J4xN); zZfv~M&9>#-G*q>C(;a5v-*(J6G?C^~GgBg3XycN9+cUyz2$M|2_LVIEb=eNwFH654 zDhqfUV~=!%I`&m zLW92mj3i2y`b^}>Y=fqQWTjLb)%g`a)v7TLFpfH>i`G5~2kWD)6rH-Qie~?(DMHd!qrjt%wr_!dXQHS>rH)f=Can#s$}cBzszcr3(y&e7_1{mrrW!C6eeHD<>a_`{ z`r@s3+XpJqV={~hLltkbx28P%Q65%JdVDBT;&*Dyb>4-mt{zf7jg&O_qCHD2CuuXV zp8Z&{Lzj@jHxZteKYF)Aq|Q@3^*p4$Cgk`pzTo6YieDt%i~07AezH+(c7MVxmmlhJ zaM9ci_W?un_`M4)H%8!uTF#W)H`aDXkqfF{U2r9WKuO&U8;~0OvPM#i(HYx9VCwNv zQ{y1NEkdbIZODt>XZu8?`xq7ZXL{EEw_6t~6<>VxQGp>Z=Th4z)nD>%aFD&*f;^>{ zOZy*|v{u89#Y2hH(S1s4l9B(AzbNV^}H)prU z)VwD?ZC1cCeOYNCP_8(RhP;Ch8}MPldXj6TH)j5XjXp?2Wc-5_5iZjRtecHijLV{GXE`Em$f|k zr`10%oJYm4bfb*`{poS`t`LNga<63P2v)~ci_n~s3kT5|ujvN@p^QeaXMQ0j@c^jZ z1EQL^8n;_b!g#(qpoawHgQ2jHm=?%q2sLt8#-4q#(3Sa8!{)=i3;a3TS3#0e{?nbC zwC8kQ;io|4@Q5yQNzl{dYAcF8==7jJfsybT@d^dt>C;dNz?Uy~^4AV`aCQd!22E#W zc&r!l6qlCn^(xhgrna9RRhh3$C{xT_p9Hu4UcCE4*;@u5P0B-y-U#OesSXL?XE|Pl zi)-DAk6>DHzwmu-SI181Od-^s0l;xO4S}>hZD6sGCTZ)^%1MD<(8VKs*=LJkg6?aP zBHQmfIxM}c*X(JFbA|KsFJ>?IF#n{l0Jq*(q1CrorJE@OO8-r)m*XNzaQ?OT<$DMv zyJjr^Lfe^GRhxkC!BbjiNwHcM@ZK`UX~V+h%lJ2Q$S$l<3wb-T#UAmkEt(;AzblsQ z7;V_tv;Jy)mtuXdZ9SsQpn`nxkV&1`hC$#VfpCv9xc6SP)$UcS^1j`(uvH1^b^W38 z0;hcCz>}3A_)U(ZxRCw9ufsz#Fp|>3OzpS_4*dfip#L8(NA3rcOd^TcjO3z3Kog&W9C1MDRsC4;H`NTKHk_mJDG zLp#PTtpl4nX)xxjvp|JJ1#?YD%i;28OX@HUfg7ah5xdU3*nJJ97n(i?22CA1qkSh{ zWS5>y1_ag|{s85mhMP;y+jQEDaiz;uz+LmxcnYB|Wip$~09>z%8v?tBkzT3_jK7eA zv-5pnCioXz6C1n%!@7^DmOgg&bE678Y!qwvF!$Y?`DSM~_JoUP2Lp*jF9i4vjR<|c^PEd_>cU-Jt*gtd^lN=`5{@pe!$UT$G!&XRU=0+!4{WSy4y<^Ie^GV z$a#v1ww00@2;3x6b%MWO4x{{xb9RM5hzLL<1xx*F>}mX_H#h6&0Z;&dgz-NX5YP6F zH#(BO{?AvlX$!vF)fi*r?06MVbeDznB*ZJie+(icUHVI4X#?ec%quqbIWqXu!#yPj z2Zy{@kHT^%>|+RPPgsf`Q6)L`d77(}^#4c=cV{sAhUyND`m87N9y5@vthw*VAJ?R~ zZ(c7d*yX-}J*JCimKeQ~WzG$4S?`dzz~Y#FM)N72RF>vpCqdcEV`EmUtG!cGoV;RU zViVCyu}>=DfsC2b7jB!LyvZGt9?V;7xw7~UW&uK+fAJ%q{g<`gWk2uLd8=-sbm=0( zaw*kE)NSS_Is6!(@a)HjsZmdy^JufjO9<#dukd7@l$~u!E@tfhu4VnO9DcyOb%*3> z&i<$Rz>XHyDcCivsM@Lz^~$7G{(_C1Y(buRQ1C9{X5ZCr74Uk~O{CK5rCOFS8cv+M zY!&ZCavg`lrJ~y%KMG=>IDr^!8a1JsUJ%G7r2qcFQm`xr%G zN%$jf4PlY&`FamzC5*B(M!P)(i>zYa>p8b$*N2$abTCE7+sd`vq%dt;IahSt2$;}?O*2WfF&r?Oey-kJP=zdvM>;r~M}W4xB`+;sy(5`I%=l7;9p2;RYl zOh@mCfJ)RnnNvi+Lx#lQKJWII*Xi2pr&w%(N~lK(Th8D;B%a4_xE!Mm<^~2@`PyY~ ziXDue@*~hH6|>j*yD|U=PN3OTW(52^OW6q6mo7Rj+lVz8wm^%1NX}I=H+Q=uUu?Yr zW;h5e#UH?Q)oICWlaYeB*)Q+A5&7cSIxjD-K0Y>c`c_N%bE(ZCRylrhS@)U7?<%b@ z1tUW7uu{JHvZAXO^6gRC7}#pb^T~F5lxhkQBOOlNdn&C@v!#6iHluXWeqa`kVgKV9 z6K`=*k?P6yL&H1Tzf`wmVDzbV9*-5ZxU+djz#B=^1H`&=byL~LM&s1a*W{eWU!qyI zr`s$WOtv|i%Mqq~NY+_1&c;@lmeo3N$!);wa$zii^{6~1JkBzFwQ(a$dZz7U6AKOk zO(h}Pt_{Rb#A(bou=!5xTa71-y#N7)yTg+CDInlxN~TvIt$km|=RTlHwedWf^k{4; z;+bF&_kTNpo}8pc5B6#_B?OZ!fAdQJo&K4`BIwX4(9FdNc`;N6_Pykm)3CI~C?muCLbJhygC%C8=9Y=zd&r=zg8PMfcPh>@aSd0 z*Jbxq3=QdT8x5+=uPnTt568A2=5>x#~!Z@clFI zr#<{|KEPmI0HCX5k>#5bE>0DJ>+n(&eWG8)K5BH>&pQnGU+S6S_aE$JqTTn+k?H^C zq)-2n;ym+TRa2A}Gwztw>8MfZ--zfIGM#Ot!P>15KT3P0^0x#LphfBJ)tQm!2?rqn za2cl11ZivCD&1G#8%Icy0UnO42g;syPtzdXZk3?W*LGv}wz+p8Zee=xs^A47;Asfz z!kK~duXG$_Yd|94b`JaH5NFGyNP~Ur3lLz%lQwzz(fulN*8&J9v5g&Ub0~W(_Fj)Z zNRbARs}|bZ=NEJ|iY|(Z5))$W>3uqfCqw^_x!H$$F(dfA`Hm+Kw5_nb@*jwvBfBHa zUl29VOBNktv|?=lfc#%}L;X3tT|A0dj%NHXufgD^V`M5G;31jR5gkBAhS=whraxQ6 z1Kbb&L30!;ilU}MrQC;*{{el!m5=}c literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Dark.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..67f5fa6685918e1615612986ec7ad3f64bf1fc00 GIT binary patch literal 5570 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 NbTkb$s?{Cd{}*IT-s1oO literal 0 HcmV?d00001 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Light.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Light.png new file mode 100644 index 0000000000000000000000000000000000000000..085a5afe7f18a3ae21ccf6d988cf0ea3c4924015 GIT binary patch literal 5618 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 Date: Fri, 20 Feb 2026 16:12:59 +0100 Subject: [PATCH 15/37] fixes ci --- .github/workflows/screenshot-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/screenshot-test.yml b/.github/workflows/screenshot-test.yml index 05b22c79d041b..b934ef4d20951 100644 --- a/.github/workflows/screenshot-test.yml +++ b/.github/workflows/screenshot-test.yml @@ -28,7 +28,7 @@ jobs: node-version-file: .nvmrc - name: Install dependencies - run: npm ci + run: npm ci --ignore-scripts env: ELECTRON_SKIP_BINARY_DOWNLOAD: 1 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 From 54abd997bc3e98f8a6f08e10eb363736933fee13 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 20 Feb 2026 16:33:19 +0100 Subject: [PATCH 16/37] fixes lockfile --- build/vite/package-lock.json | 950 ++++------------------------------- build/vite/package.json | 1 + 2 files changed, 92 insertions(+), 859 deletions(-) diff --git a/build/vite/package-lock.json b/build/vite/package-lock.json index f33d634439992..476a7ae626f58 100644 --- a/build/vite/package-lock.json +++ b/build/vite/package-lock.json @@ -8,632 +8,56 @@ "name": "@vscode/sample-source", "version": "0.0.0", "devDependencies": { + "@vscode/component-explorer": "^0.1.1-10", "@vscode/component-explorer-vite-plugin": "^0.1.1-10", "@vscode/rollup-plugin-esm-url": "^1.0.1-1", "rollup": "*", "vite": "npm:rolldown-vite@latest" } }, - "node_modules/@emnapi/core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", - "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", - "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", - "@tybys/wasm-util": "^0.10.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, "node_modules/@oxc-project/runtime": { "version": "0.101.0", "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.101.0.tgz", "integrity": "sha512-t3qpfVZIqSiLQ5Kqt/MC4Ge/WCOGrrcagAdzTcDaggupjiGxUx4nJF2v6wUCXWSzWHn5Ns7XLv13fCJEwCOERQ==", "dev": true, "license": "MIT", - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.101.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.101.0.tgz", - "integrity": "sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.53.tgz", - "integrity": "sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.53.tgz", - "integrity": "sha512-yIsKqMz0CtRnVa6x3Pa+mzTihr4Ty+Z6HfPbZ7RVbk1Uxnco4+CUn7Qbm/5SBol1JD/7nvY8rphAgyAi7Lj6Vg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.53.tgz", - "integrity": "sha512-GTXe+mxsCGUnJOFMhfGWmefP7Q9TpYUseHvhAhr21nCTgdS8jPsvirb0tJwM3lN0/u/cg7bpFNa16fQrjKrCjQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.53.tgz", - "integrity": "sha512-9Tmp7bBvKqyDkMcL4e089pH3RsjD3SUungjmqWtyhNOxoQMh0fSmINTyYV8KXtE+JkxYMPWvnEt+/mfpVCkk8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.53.tgz", - "integrity": "sha512-a1y5fiB0iovuzdbjUxa7+Zcvgv+mTmlGGC4XydVIsyl48eoxgaYkA3l9079hyTyhECsPq+mbr0gVQsFU11OJAQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.53.tgz", - "integrity": "sha512-bpIGX+ov9PhJYV+wHNXl9rzq4F0QvILiURn0y0oepbQx+7stmQsKA0DhPGwmhfvF856wq+gbM8L92SAa/CBcLg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.53.tgz", - "integrity": "sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.53.tgz", - "integrity": "sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.53.tgz", - "integrity": "sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.53.tgz", - "integrity": "sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.53.tgz", - "integrity": "sha512-BUjAEgpABEJXilGq/BPh7jeU3WAJ5o15c1ZEgHaDWSz3LB881LQZnbNJHmUiM4d1JQWMYYyR1Y490IBHi2FPJg==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.53.tgz", - "integrity": "sha512-s27uU7tpCWSjHBnxyVXHt3rMrQdJq5MHNv3BzsewCIroIw3DJFjMH1dzCPPMUFxnh1r52Nf9IJ/eWp6LDoyGcw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.53.tgz", - "integrity": "sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", - "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", - "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", - "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", - "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", - "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", - "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", - "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", - "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", - "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", - "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", - "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", - "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", - "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", - "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", - "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", - "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", - "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", - "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", - "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", - "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", - "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", - "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", - "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", - "cpu": [ - "arm64" - ], + "node_modules/@oxc-project/types": { + "version": "0.101.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.101.0.tgz", + "integrity": "sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "funding": { + "url": "https://github.com/sponsors/Boshen" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", - "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.53.tgz", + "integrity": "sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA==", "cpu": [ - "ia32" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.57.1", @@ -663,17 +87,6 @@ "win32" ] }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -681,6 +94,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@vscode/component-explorer": { + "version": "0.1.1-10", + "resolved": "https://registry.npmjs.org/@vscode/component-explorer/-/component-explorer-0.1.1-10.tgz", + "integrity": "sha512-Nokjk2DB1hgKeUL1FW5dHfXySgj17BgxcsiyzcG6etdFIbMpzv85nMQxrW/88aklgmJPrRVefMRHFYSds/F3/g==", + "dev": true, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "node_modules/@vscode/component-explorer-vite-plugin": { "version": "0.1.1-10", "resolved": "https://registry.npmjs.org/@vscode/component-explorer-vite-plugin/-/component-explorer-vite-plugin-0.1.1-10.tgz", @@ -732,20 +155,12 @@ } } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "license": "MIT" }, "node_modules/lightningcss": { "version": "1.31.1", @@ -777,205 +192,16 @@ "lightningcss-win32-x64-msvc": "1.31.1" } }, - "node_modules/lightningcss-android-arm64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz", - "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz", - "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz", - "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz", - "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz", - "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz", - "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz", - "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz", - "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { + "node_modules/lightningcss-win32-x64-msvc": { "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz", - "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz", + "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", "cpu": [ "x64" ], "dev": true, "license": "MPL-2.0", "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz", - "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, "os": [ "win32" ], @@ -987,25 +213,17 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.31.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz", - "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", - "cpu": [ - "x64" - ], + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "bin": { + "loose-envify": "cli.js" } }, "node_modules/nanoid": { @@ -1076,6 +294,33 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, "node_modules/rolldown": { "version": "1.0.0-beta.53", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.53.tgz", @@ -1153,6 +398,16 @@ "fsevents": "~2.3.2" } }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -1180,14 +435,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD", - "optional": true - }, "node_modules/vite": { "name": "rolldown-vite", "version": "7.3.1", @@ -1264,21 +511,6 @@ "optional": true } } - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } } } } diff --git a/build/vite/package.json b/build/vite/package.json index e2f761ee794f8..b4268fceca1c3 100644 --- a/build/vite/package.json +++ b/build/vite/package.json @@ -9,6 +9,7 @@ "preview": "vite preview" }, "devDependencies": { + "@vscode/component-explorer": "^0.1.1-10", "@vscode/component-explorer-vite-plugin": "^0.1.1-10", "@vscode/rollup-plugin-esm-url": "^1.0.1-1", "rollup": "*", From 669def0ecaf44161906ebd137eba3431af86c932 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 20 Feb 2026 16:47:08 +0100 Subject: [PATCH 17/37] update --- .github/workflows/screenshot-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/screenshot-test.yml b/.github/workflows/screenshot-test.yml index b934ef4d20951..216fde3720ff8 100644 --- a/.github/workflows/screenshot-test.yml +++ b/.github/workflows/screenshot-test.yml @@ -35,7 +35,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Install build/vite dependencies - run: npm ci + run: npm install working-directory: build/vite - name: Install Playwright Chromium From a74a86e1f99a2a4943d09be9c15a8dc7a99f8f68 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 20 Feb 2026 16:57:33 +0100 Subject: [PATCH 18/37] fix: rm stale lockfile for build/vite in CI (platform-specific bindings) --- .github/workflows/screenshot-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/screenshot-test.yml b/.github/workflows/screenshot-test.yml index 216fde3720ff8..5499ae556c1f8 100644 --- a/.github/workflows/screenshot-test.yml +++ b/.github/workflows/screenshot-test.yml @@ -35,7 +35,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Install build/vite dependencies - run: npm install + run: rm -f package-lock.json && npm install working-directory: build/vite - name: Install Playwright Chromium From 1cc58eb4127bc5b269068d38d9d76fe6582974ca Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 20 Feb 2026 17:02:00 +0100 Subject: [PATCH 19/37] update screenshot baselines from CI --- .../baseline/aiStats/AiStatsHover/Dark.png | Bin 8827 -> 15185 bytes .../baseline/aiStats/AiStatsHover/Light.png | Bin 8388 -> 14312 bytes .../aiStats/AiStatsHoverNoData/Dark.png | Bin 7537 -> 13527 bytes .../aiStats/AiStatsHoverNoData/Light.png | Bin 7262 -> 12674 bytes .../baseline/baseUI/ActionBar/Dark.png | Bin 3888 -> 7564 bytes .../baseline/baseUI/ActionBar/Light.png | Bin 3917 -> 7687 bytes .../baseline/baseUI/ButtonBar/Dark.png | Bin 4161 -> 6834 bytes .../baseline/baseUI/ButtonBar/Light.png | Bin 4209 -> 6827 bytes .../baseline/baseUI/Buttons/Dark.png | Bin 5522 -> 9641 bytes .../baseline/baseUI/Buttons/Light.png | Bin 5611 -> 9661 bytes .../baseline/baseUI/CountBadges/Dark.png | Bin 1912 -> 4424 bytes .../baseline/baseUI/CountBadges/Light.png | Bin 1806 -> 4258 bytes .../baseUI/HighlightedLabels/Dark.png | Bin 7104 -> 18284 bytes .../baseUI/HighlightedLabels/Light.png | Bin 6425 -> 17757 bytes .../baseline/baseUI/InputBoxes/Dark.png | Bin 5238 -> 9232 bytes .../baseline/baseUI/InputBoxes/Light.png | Bin 5116 -> 8957 bytes .../baseline/baseUI/ProgressBars/Dark.png | Bin 5446 -> 11332 bytes .../baseline/baseUI/ProgressBars/Light.png | Bin 5340 -> 11476 bytes .../baseline/baseUI/Toggles/Dark.png | Bin 3709 -> 7010 bytes .../baseline/baseUI/Toggles/Light.png | Bin 3658 -> 7030 bytes .../baseline/codeEditor/CodeEditor/Dark.png | Bin 17804 -> 38205 bytes .../baseline/codeEditor/CodeEditor/Light.png | Bin 17805 -> 36998 bytes .../inlineCompletions/InsertionView/Dark.png | Bin 6017 -> 11188 bytes .../inlineCompletions/InsertionView/Light.png | Bin 6038 -> 11067 bytes .../inlineCompletions/SideBySideView/Dark.png | Bin 6697 -> 11036 bytes .../SideBySideView/Light.png | Bin 6513 -> 10906 bytes .../WordReplacementView/Dark.png | Bin 5570 -> 10179 bytes .../WordReplacementView/Light.png | Bin 5618 -> 10049 bytes 28 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Dark.png b/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Dark.png index b9d19007547abbce94328cd59fad93930f9f36cd..2d42f424f6b8809bb3eb28284f83937918f6cc63 100644 GIT binary patch literal 15185 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 JDp8|={|8TGH^cw{ literal 8827 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 diff --git a/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Light.png b/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHover/Light.png index b632c504f804f224d0d804827f402417d3e98ce4..7fb858eae279f016798d70e896c22b7ca078fc80 100644 GIT binary patch literal 14312 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 XkPj7i+EXO|EC6Xq1&L}g!{Gk`v_19l literal 8388 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 diff --git a/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Dark.png b/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Dark.png index 80295163f4526a98833310a5392c04b0f49b7c9a..9ebb23a380665113e8441e496a2351b65355f460 100644 GIT binary patch literal 13527 zcmdtJRZyH!x2}r>f5*&hC;{5@TYte{3dAZ?ET7aNE%O>}rY$F* zI-wS`Aq8c@hA*_x4r*e^L%@&xEoixV!u;9=_}qU3`V8K%dDVHlTQtPP#LVM!+TM77 z-RODPMn!}9DV=qY>vKN!{xW69qib%yuO==ozVZGB?d<3{Uv0;UA7Y1rA+^Ir8EBjm zd9HTwJIQ-H$}`oezW>ku6r09W=Oxxv-Z4j5XBb0k0tPTyPe>d5x^8lQYL>Q4eDC15&Rb~^UYgV2yrm5 ztckY=?}KmN1r_gwI}a&=p*80Xn6SC>Tmsez9&Z*Hh@h&4ZM;mI{#F7$<4={E9?+P`jS|uK#rs8IIpsJjNonnk8gvMi2OM~>RL3$@UTOKEZ$OxPhPcP| z1#%a<;u4TpOrT!n(_TfMrc6yK{t6b(k^eq+XPUJxQB8I&07%=PS3lluk5h|l)c>79 zI~eBk%v}*Evn@gjCp0pw*=4D%8-wn;eo9+b_2=^J@WInKpH?m{8B89(i;HhcBf#2T zGr6urfX}9=iXd@qqRF0eW2Ge57cbI)ho^bc0dS3qL>iK0N7q(mU!QmKOCL(b+}L|7 zvyqi%I>6eD{MJ%9E?>JTD4v0==hmt1aDMBuHZM z>6vxA>y>qc(pmQrUI*Lv$vgLZi5oc-?oWe9d}|{nR*VK(76#&pK~85q%iC{7#o>AW zL78}7+GW4!Ybu$T(TS6adw%%c%!_S}H(EZE5=F1S6z`l8f(LX`sSM)i7NdK~ZQiRlPS{a-G00)Dub$(j+U6y z2UGk#<}aJKLJXL0Lo%g{SuN(`6sl~I9&Rk14#j&jwN;=7N?U2jS6sDXi|w*0gXm#o z^ufCgH1zmlGkn}%)TxVgkfAAe$+^6My=FI=rAP{Qq%qJhY=VSpPpdKF6X(5|w=7;h zFU742H(lh3aI%h4uaA-S^>n|S6f>3!k4=5Ny}du$qe4LN@{ozDC^0y6ao{sH`0AKp>(~9pX>6Hu1VBOODavP5WrU5iWK0PL`R{Wb z`aaNrP=HyY%9PQdjy!bt$8b}QaDe{H{s3?sAu{(yym7J@AIs6(0GZykg|wtmEw#18 zF$EEs=%TCJ_k^6lI%fU+>=dvW_7t83ZhGIo%4;7Qi1)m*anPX`1AZ-Xll;}}Vpkd$ zFqpV8=HWpbjZ{@Ym+oHLvY}US>TSL#hF^0V%p&Tn@_;9x#OEYZBVOnLu_|X%akgWT@ zQq3flnH89jljk~uYUMr9OB>gyHDJRE+;#Vx4el-{7f_n2Q}DH!MxrM z8>t@mQb0Uwl(MedlN$sOHZ+wvZ;4|8a!s#x$)I7ptV-#N)9$tIwX#@C$+!Sk|CN?i zoWUnmtTJMT94j?#V=9C69wY5=gCjZSq_>o>bN7V#_I4L3r+&nFw$Qd2_9FiMDQYzv z4}rC&02R4m+pJXX8c z>vl7Nyq{(gu#zZZGgaQNLrG#PiPT<4Ig9%uXcNYvB1}`Gx&>CmQU=CGamq5u1h?Uc z*>mr`*@lT(orOzn1wj%!sLK<|SqmzeAFhceJ*1pt@O7&2WO=Y7QFJCL)R!F9lQL>D z%YqI<(IeOK7cFpjc$t|$ZI|46X`7Q~ax{Yb;e}g2dOz=V@G=+aiI9xy&deb~;rTW=-xk$U zQnFIq&)i4h;^U`uFqrs-k%wpVTD5q0(fy9Q=v{ZS)>{Z#?O&Zju>gQo#IGobxo;Yg1@S8_Scnd7aY%vu6>A<@HsO}}= zRFj<8*_eD^NNlIZV;%Jg@!E+B67m`g&kZ*45Lvs`Hoa8pC(5dwTe$NHES z!j?MeG5mlv=M37O*N|8)VXmk#(k_W3bmaA(d$Ue;{z(h#g$gqQT0`Bq`yHoFUW-dCt37UxE;pIW#WIK?#LOizXn8nWIu6rN*bhZvoKd+- zn@S1k+gi)_JU!%sD+&Cw0}X0wv&vsSQcI~yB4(oT5-jWE&A7ktQnTNP^=*@7tUO=t z@01jAu7L}<=6L&(E9qGhp;$9wIX=FdQ8#?8gIy&>SfO#D8k99XE_?#7FO&t01iFKA zQPD1qA0(wz)Q{%A=SAIkaKSaLGD!tG{9>Tu1dU&%ez!xQLs78v)EMG8Ri3O!4olqb zl3zZ-O^hyC5~yl4sUQOR22k24Xd7Kq(uAeooX2flIW4b-=c{$NKRqlF-HcI(s>`xG z8Pg>b#?zQHeuU438C+^uTOVw8X z%NgOF*H)Nos}I|k`u1?~YkT)S6F_BUho1tHIdWE-++s_5Y<>dGD8s)-csIME1$qY# zMO+0|TD%`L+ud}q z8o(c5d+J4^xjNbKy!@D|wEXR{V@%g@`6<2w6&5bSM4X6O8*462DV@*YpjF?^ud%cG&?KC3I`^KL%zM%m?Wn1Gx83W`0OcJlXAMij$4<(Rc)+`@ii=AJs?t#lI<+Or*+DNn+Py?La%SR;&HWvud?u zAuYf;bsnB!PvUrP&u7)r+UZ%rt_Te{5nWd#(JNWjQ;6 zNLKq+LC)OlV?)>dnmzYPRoUET!d@zPMqi~l;6fOFYnr8T?*+9?6XPM((w zU32jH3WjD3AQ2w5s>TnA1=eXA$`LmiC=os!#5m#whF##^0dosT8y+^jb zE(MEE*J2POyP7=tQYr8t1VcBty*#nPCh+Ax3qbFUX7;Y1__wDOSFD|%r#|e2#OXw` z)9O_-g}3XWfn!H$_56(F73^wwE^~v=ho(rp4w=MyQS`0MK8b8QSlX6)*p+@jFhpYY zrH!~Idv)c-6Y4t1_Yk{4skT}S%=tpq(S4lasxe`nIXX3HLPf!|bZ+nLjX%E}YK*b$ z)*b8<_e5*UcD;9kspZs{W`X?uwZJ;GG;t==N-nJ+CiX*DtTdo}CLj~Fn&*_SX{whe zdn*Qi_hE}&WYF#fa($}hku(5I@c^G-?B>ke&z0+%NayYE}QTWg~YO=Js3#pl4NBry@F?=qs zYxKC#?&2@dnZ<&aK3A#hbxAk;wPTc_F_8iLKK?4$wzKoX}VQU6jHtn z^7znn6mV?l>5u05T!aTazvgkV@qt}7FuZHbEeNa33&92F4)6EXpa~%}NPV@CMxF8A z)7rCb<(0_Phza_+{c4v*p0HMcqL$KMLW3Y`V4j_26Gg9IAY#TN**PqO1wk+?Y@G;=wmFzEfle3ea zZjlCB3urB#s}0g0Qg05d4plFz;RKspOv>3UMeD5n`5~oSO&uTyLJkIZcMtw-v=kJ` z)F5hIyvXGvRM^~jf7rovC;Z!(ofD*0PQ@kyXcPQ-Gt3@M-~43j%12=QR7a`yC>Ls6 zJfmK8YSO{)I?Ii}dg1!?ts654fw?ZTi18+cYGR$7;DFGnO_HVXdHnY})(|-Ya5f2F zw}4r{dPv*=GqZys>Q*4g0)QTyt8Qp%H-L|69lDoE*P^Kavn4ADo1 ztYQoy^i7}|Is!%(=5=|p^t+egf!P;DJ28Y9Hv+`ba?sh7k&N!lm9}~$6QcW4rnI3k za*%f9)G`Z&mU8AN6aBa8!?NEeC+k|Fg&#wDQp8d2L&xz~@?9FYi|15R)CZAv%zit4 z;X5&x`^48?%HpN1BCO{J9%$A+YWVM3fLxvljXVv$$rQlNGi0Lh=zygQdLJ5TEo`4w ze*be#B099vZGS?ltFzob0AzV1WFX41MNAvUx~r<5LNn%@}?RT{SgWpV#yJFQe7Ss6?KI zat6_;3+A_f<8$#b^rI1p)5x9Jn<3I-j`I+?jwV2V7xj=}a;}pr9ij`&0Fij!E;~2; zZVrvnX{_gPxremlLFW_98?Wck^(q(7emT&*Tv(>!6CX3!?&7)U;bBLO46tORqkaL4 zKLCeMn85=-TMJ1-d5H4AI+ml#*}&EFT$5oFG-^aZht2Iy!0_7E8s1YFjj|Eef!Z%= zn$)alYnzdo`mUR&eXqM-+KveCI{%sio-Oj=jU%@pBD?ioDUG>i&y8PWW}I~KMN`9R z6zs9wD4#EUD;pf3kd8c+6XI%CV7GTY$46m7487?aqaPR&_h+?frYN`e8=gUW?D}TY z?0Ezil7IUxkB^DruQg!kayIAvVP^6O!F?y`Dc0pBxs4wMx^Ui*STJVL+A4^iXl^B;MjZnv0VCwL0d; z_cS*rslZ|pV$g@-Q2C`xdR+ieYA0yx&e{2nhRSmH`okXN_#E#jfnFg0Mo;QyRX75P3bfi|7 z=D|BD8e6HW_@GJp+ zhkhI=wmc(7Q=6Zk?@Gp0PV8UFY;Fo)QBt}@%&xKK-nO1$M1Pd)aEg^e ztPS6j_~#Q;v`N6y2OwBz-)m|jZhLPSrB1JO%{g{*P9DoL#DJ~WO8miJs zB!0_dA6iG*B|TvDGS9?FEbW}p)cEp5&P3#r3IC$l@2w_Ji@{G%mS>`ykvN~M_{sT+ zpk0wj`bW~vr%dr_++1g~9X&RzC~dmkPn;udwE{iaV*PBqPO9t5;}vtUh%8L6%ULt_ zc>&Y5VmltQ@Hk=E48fQJ76v-IRDaWxtEKgS8*l>1j3nT$)@k=Y)rn=74y1D`pyW+J;ifA&mW6MhFyc?4Hu+$|xsSKB41KZZ~x`FI&wlFnI;Scmi z3rU(Mp+mfgSy_7PRy#z|pXEDa%O6w;C1D>|=DCU4o2GZOvWp6}y5@jAeg}f#mJXbm zC(co}qcUpg(8De5yxl05z~21d#_N`s+z&efpm}@F?If3(nS|$H`ErHl ztqfmq2ajx*Z9914K&KQ_C@Q7Ix-r#CD7y>S(vBr$Su^dp%V=F$mcGA+922Embe#D| z=z>f3G#p2|w+58>o2-%2f|~!HO9kO91jYlLJo~?&b6s_#UYr99-F`F` zRpP?QvZPI!Qat)}=H(lb;0qjN9EBJD^g7wJPP&x&NDPov>AnB7V~tyO?_Ju4R+iiE z!&fCX)n4Th59aoy^T4=8{Y+lKsWm{P}efJsd!EeIAT?MmrKpUD!wUTomOKewc zEY8Xcuu6aX${1C#sD7knkrSWAC+yIVJZoP4K3(#4<_IyIn5GwsDqEU@m#TD98M)tD zDjZp@MK3fQ$WM!Jc1|_ya<#kElre|2-Hg2jraf%x5H*d{bpF-$b&mj8ZI26F({(li>EChPqz{EQ- zO_f9Nq%_f>CWR`xS*iO_nxaI6DS*)WMJ1txK_JUP)cK+8!LuWNV7+|9a#`=#%YolP z{$by%AQ7SpUXzPPj*=GpHs~>VB>&b;jJ#o8$rHI8{@4ez<06<--c{?ePpwF8EpoIS zYYq}2Ch-3Z+2vy>5z6(Qi}Et$=vO+_yG~(2v1^|Fp zb=9GFx@yt!CwWGVWoC5ZF1+f>bbC({(Du+Y?qWKn_*UaIeYF6=2`*0v>(t!vzGRlZ z_INnVRKIA_P+g8n{JF8??6SXNZG0WdapQn@y;aq^ToGf+!?LR0Gq#m3Bf#9HRlL$M zL%!xuytYl$vt4L5!W-Fcw!%wS$BJAcs7$uB~}a*^UV9>V6}ui?p31u_?(I zKt-ikVV`17e;ghQsB+SY-91A+FEZ`Ur_mhORP+5;O~uaYz0?XhP%fpL=QZ%;K#@le zYc^Z{MXa%=#)$*scAa|}>vq$vB>fFHkt+68%A$t_{ z%;x^17E^B;idTU!&a&c6nKWO(av#1a0ome;?oH zAv?bfQYm=arNr?cIU7f4$2!dSeFR`{v_<5wva#&p-jhq@;89C&7%#;@m#wYP~sFG zVAq(iU@m&Ok)UfT1lG&Syztq1j{TinvAU)PuZd9SujXHz$`h#O-i>@?W8_vNy1C25 zI=F2K82Suul^WvdB+i5bgwr>Bs}2j}=iV*IkM%^$t#!7_(XK{H;m^(CCsm8+)*slr z3sNg)R2rWTzG8$eYPVdJRWyhDJ7Z~=w=?AQ0oH<>PHS3Kgmy%hLuy)PY-?6DYGq!7 zgfgJItB1I}=Sz`c5f6V-ls5&01M5XfiQVk{%ImwFpIL;u59-njrb+5nj^x0M>2l(M zgM=U!Qoe1}PbK={?nFx_4rh6L!pbQ6-S|Uo%9af{u_!&712JD@>C%f2ke{Wz3h;D5 zZZ1~i9uh*dPEb^fy1z&28pOyYMpLFew{5BjER?M58|#j3DgYzh9BDuYe6yu7l_#NX z!rlYnCv(Uv&Z7ZR@VxbSI-zYS({T56w?{>_IZ*J}QKEdH=)f-=O1n|CdG!EyxSeVo zZC;Z+GbZ9lZDdMUgsG6 z{44rjugNiL$9`#fvk*gFLsiGYkW2(vJQq2&B0M^iGO!XqPa^LfOIjN+6zG?-Ajj*R ziVNL;eVYkftE9~mCK7VFJc|?+BG5ZvdS0(rG^N8eU{Th!FUgM#ewKEyExJ0uejEv6BeU4FX|Mz#y#at^cQa&O+ap}G#e#*Vi5 z^F%XeGSCle+RJ$xwruez*4^>1*3n4o$O|!hHsh%&PN4cJMHVa)EM2VNn#dO}rz>VZ z+O8_a`rJE^{q|*SA~*IR?bm}${;NHrG6huGRz(+2XEXv(;|^VW@z(1-Ilz@fR861$ zAeKI9Tf1gXPn(7BXwI?a+NN{4Y9nk5ey+2A8fuc^h9?UG=K*%{f<@=mQ6CD}{K!#JGvE2{b$6@!SeNjgA?#8YSKFe^yW;N9 zbhUP75Py>Gv!$15T+G>l(ox%$@CHom$gk%UZKPuSW7D!KmqZInpUF|?28lKN@V)Qa zP^!;*8+a4&T&j73KP5CeNGcE$o92J zVv{i%O_`JW;3}(jApEY$?jaZ-`#~|+QDMqCTu8k>Q19~hj4(l5;g6Wa8ZL*HGX~Ya zXZ(%5#8d-vr5<>pL0HC~BkDe==uu-8TwWZU&jsWJW_oR?PNC^gpW}!s^^J+=>Pc4K z{heB{IiXIgMOPWpeIKt?|-K>u#r2ItJj~^A9>eUaqpmt16+4&$Q4@f^Rc}I$`Vyo{G!42iZaE)DLC1f>P;nt9p@zm-%M= zbQ!<_h_b~-U)wUh73q`-SF*(VOrOeIcp}wAQ#y~5(^sZe687@gN*Vv={Im7QwLW1? zRO!5y&v{U9i%`2;7wrPE-N$}{>jN*Jd66Y}ff%1rY@NQNwqBX7=|jJZQZZ-C##|U* zMJlh_plWqzEh`>!sY>3ykPHi52@aa>D82BO;ypL+7p954@n;h0;4j8pB1ST<#e;>B zFAwE5dmfyt_DO!kseRAHe$iLR%Egw)%5oWHDI)BH`IFLptb6%Gi{Pqp`wceMrYWzm z^44YOS#QqzH?&2(&vI^hb6Yt6aaPVxqaKkP$~ulc{NyszvjAkx6GQO3rv2f zqg=7(JfWFlTwh$-U2B`N-RR@)_{?RJUybiRNpvvlSVNxAy(FvW8m4 zp~%54%c*~@o~T7JC+j)b?lQ;eUOmy<^m4C#}LFSc?-48T{tp_xr?>Z@8fTSF zi|6F4{!J)G%Vp7===SE?Pp>8aBAF_icO^c^q+QF({BIaOLJWk-$eOQ0r~Dn^m=L?v zl{JkZX=0T6iIF8pkXNL%uOcv}W*Pj6fb&b9@AF~CUu)fLJ9n-_TMZ3CcPgKx7-5&{ zIAOQb7VGGl4t>u)q$slH=hb!7mD`zo90cqcfy?te4Qfuhyj^BZl6x#|U!DEO1`C&U zoC~Xz`-&BDOAcXd$2_MNhi)GOz{<_ql46#2*8^3cdD_RuOewXws>fE8zD17!?3R_P zrsWoIPy(0Jc>Cza*BP}VxLbCX9OH4>|LBm+N|Dp1?m#wb;qB3ox!An2~B66SkPMa8O4_$dEwf(D_=TZ!sF@P7piKOS^j*M zN_UZtV|rdYh}Ti=+*QMZy~5ihbj*_hW3N5m>&9s#K0UU=-4w7?)YP{AA(OzqmV}W# zBh^J3HKyMV9iMhWs9|m<4@eQ_&-m)|R^4l?j9NY-OQpkk;CJCorZeb^b-5$UR6;&+ zUvauyq~J+Q9VuM@jtWo32P{|n>gxUzO| za8SyN)UTKHKc~}4^gt@*>PxfVf&%t4EONb%%LNU61BHKl?S)|z^w@wtuwfW}QN^!g znroZyrXVoUk5dDN{{ybt^2RT-&4?Pd_Zoa-nb^m=udigF4x%^piC66y0bl>Md#n($ zPIcu%pk+g!t|)R_kC)k z{h>3IIr7)^UafrE#Dlxg?8a;Ol*tmdwpK5nEMC#ybPf4E-<7$>B@EInK6!D=24|qz zURf9-sWxMVEp1{kMS}q|6U)oqm7#tQ`aK|hkn_)|ym9DNO3GmSeM042E=BI+n&SuE zh*C2bTThh!?!nZ-Ah^MsGPu|uG9c&JC_1_kg%j=UNcp)^W3FS4I6do)sdx=ZI?BIsJ*8IMQ)ukgHUc(qQqQ(B%5SJ zpGPl#G_Tc?oLz{5Q)x$k|-VSUkh52=-cg#oEJCinz=~7-88Zl9)K)n6^RPdY5_I>zyO{IRK7(;kr zgAO91I)A0JhNb%9AyMW~P29%$%WYCB+!vX`pQExTv4!p~ue{>@CRP~;p{9|0+^6?W zKxyfKfsX7Tg6qr4lbNcnASPFk*c>C}na`*kVA(<~r_*KCE}1z1}B{zNBA) zxGzjZ%yv#>zizIimr*T8rLEW1j*ZYy3-5I9gLUMqM=2>OHY9mDF8}d>t;)j=7f=Dw zF0P-&(fBD$jFZN`&`f16ZjZupFUodc9Jwg3Dx-ADE_vDpu?ilDg07F_<`@X0y&?lQ z_G@fzR^8-uU`Ny?K3aNnpcZUZjHC}s(X+JNS2IE(%fJe@A+IGoN;@&un!dmZKFwH7 z5!-KpN+{ogug&3ql@h^4>Hy|_o>Z*Y>XQn+2#fJ6;Ue$U@ z)C-w}#L*}eLvE}oyL&V}*pLtu(hCAydCF+L1c*jV37j5Kn)L%Xmwa&O!k7Q)^dEg_ zdpoA0Z7Tl&9a~y@=ts#Mr~UESnMT%#Lbvhwj_m#Qq})NnRMx=zfZLV=`*c99RDf-? z<8J7?iNXMN>}s!oH5qMlW`$QgD4-{_F3x6{c`Pr%>3l z^YS<;6E`E4G=lef1(AgUs_C%G777$g$ZnrMu#-OTT(D$c#7K4n$n5t`4c8x?eJ=w% zkah9FhtGc-H=aK07p;Qcmqcwnm2B>IvWCK-PYeGqX;VEmSGEkd=Le9X43e20SLD$qGN?m?cFxj%sjn6^*F{f9d#A33oAzQC;Z-SeM(#(o# zd_XBtNskGKm?)M;-HRHRf6oh$dv>^6)=;JQ*L(URDeP4HHS9vueEsRJ_G4~9D2>+Q z5P^eVdl7a5>gzM(`vG*x&)6PzEJTv3DdU9C@5L7AoEdH&EY`(GK%cJ9r^CXrKGn3E zZ>V2PUqd(YRJW(93mYY-Mr<%&k0zMh$WXj>MKL&*3|9QquC85!adLWi?CSThH7(#G z=_LC(a(BW>T$s0gIdxjav!eLS{Tl*`iL^IlGVhhEIZjYyb-qt(L<|q#OwfDZ<#7i4 z*8{5nV4x%Eq&Fu|zbnIr{tF`$|0{3D5}gyU-z3P#fQInI|KGLxAKK8^{SOu#YV|0j zo)CKg;Gpu4A8F>Jd5m`=2a-b;0$qS5Q`a%(uDc6lZ=Mz^X7bm6pYBeA`^fM4D8-Gc zc@3Fk)}dy(O+rrmR&j3ho9y4Ra{Qo}+WW1%=?ygjv*VNYj(HUC5JTZ9KX?C?V8B*i zpSHWkTj~3+JWvKT5((Jv1hb$RsqG(Z!|sQ#6LyfIu8c77C9{OX4$3aiH0Ik~SXK9P zRLtM&`vF!NRMyD%;mN{oqr7a@)KiK+eY-qsFf?HyC-8o%hV@vbSoBDsPJISfecDWW z=8gDZZ9Vt-aKA!R*>!+{f2bwLgY)v`&SU~;=*NBMwSR>KaZc2q-C7DhaB?qz-ORc? zb(vzmI0%s~oH-1B|yc!}qrK431uzx;!7L|Lgm%-iLe}a09yTxP{F_%zsyOXI@F|}5e zrv8=M?1P2#AO7P-%B#L+k*E-qM8m0ojdJ=HcoMTO*YC%SttGN4CTeO7*uk)5WG-F@ z8N8h@TL1IM<2P8{)7khT==1%lgVgB#Q_)%7Z;ux z|C-YnA6+RsHmQ@9;RlUbTsEDZ>-NBm5>Uf}p0a713$31;^8mAM&vE2^iwjgmkA(pd zAoIV6+C#a)XwEnl9(E9X5zkxsq}rw^LA}M{AXhTjuf3RLUvfDo_H|It+)BGCWaJ== ztD6T2QgHUXHhR^xxP3Fp#<ww7<)ee8U=cwb;>e z^cHSBbzDS@N6dV6diIusknm_8i%p;x@O>k`)ls#m<&B!hUg1lr{=v5S3GTxS9owk) zB!XpSD2jqVp0xLO{|Hb#6!0lp!8cOGDCj40uwA&umOH=&k?(g`=K`BcYR5DN$kv6k z6(T=pq%*LjOOY3lY9XLd*I;glHAUvtByDH#9uwa^v8QX zdAVu_9`?K@Y&*EmUfzNZo3hV3Cvg=2wo>_|Atl&9AV0pp0iDhi6GRJxh-FPdT-0rnR_22(M^iPjEu+sS7E-3e!^d;98qoey>_-s7yki8Q|N*LD@BEs~7VpYrkT5>T0YlNJ(|EL)T zyxv`2UiQ3<^*s1?vvxoHv$r{e=rw6(X6D{0%*lE44i5wK{@zj`NBM6&3GqKZ2Ob9N Y=LfOp%ikmazQD*zDoWId{RsMh0K;!Pt^fc4 literal 7537 zcmd^^RZtvEmxc!j79_zfKp+r;2MBHn7TkRXcXt~sA!rD0!G_=#oWWg!yTdR9cLpDv z<=eg4+N#}uul8ndy58!yPgVD+zBuPO5vt0c@t#vY2LJ$gawsxuUkI}AEOQ0nV|iDzcZ+EE63Qfv+>8mlTVHPW z!Unvq(rXX69}9dqL&L<+%g-0(;^+4|{`)Dc+XVq{MYP>U0|12Sg%Ggqa+3#V+tr#= z;O$c0cGgqCnE2yXx)Y6U-4L=FIm2vSZF zb=!TnIjQKWtc;6p{1xRYZi4vGY5s_6=N=Yk((k#vyBV#t;*vyFXEE#>C9EjqT6Pcn z^|{(UUb*o0>Eguub6Wh5R!Vx&w`co-XSB@VvQ3>{=IDndq(oyi3;yF=dtO+yiw|xN zcd4@e#DmeyV|7bjL&JRD+49wy4vq`4@@!JuO^nK8@9Lf7W+Ols#U{V~CT6(e0Xgc% zXwkcH#3{rH-yq&-6ulom9&D$qY0s<`;=kMHti2SES}{`pz|M|=15!;?+1hGpyrJh7 zkR=QWYK_{0rM68K9&&gj?`{qgOVl>wYwy1u3moTRH(>aj2r1^@IfGupCnmxbi-E|w z)QF2^H<+r08%m}8#!p=4%kuJleAiZfHj_oqtvn^~;-z_z#b6_hx3SjS9ffR%|K`=U zubfAj3Gmc7P{h&^Z(wjl)2GkAPOfP%D+|&1ULuCXBCoLM?dDKk#3WO5G;PvwVti(~ zR-V)NwCD#3fg4%3c5MrJi2tM0lcK-U>9ZqUdNkg2CwO5ym zuH|!La~%r_q6q}wnj`_b_>fLFgkUNDj5cwL!pQh6i`$L$?F5IqM?-mzaV!mUQPF6c zh<}cP`)Opv+rOxi9EC62C*ZElV|E8olu%l3P&<;G0^lz)pVNU1jz zZqV{zJVXJL{+b1;mhHsu}LozlxC?`8~xgJ2GhMuh;w% zCg^6-z=lDRmg^lrn_|V3O+J$TFa5eqQrdLg&OHL}&qe^y?|B;!*E+8w7yr@BrD5Ba zGeZ5E$&SwUIzZu{LGXeI;d75p}yAU)SUGCFx^zFdWA@w}-X@8LVhX1b6> z>wx0$x)RE12fS!I6^+t@tQ(k&fM=RYLQCuyu^f6Cg-01%6M{M3Xu8b_IV4Qy?;@ZU zal&xj?jwcw97Qa2vMsh2O;CJ&)uiceWH zoa0a9IkZyo+tK|CGi)Qu$lbrdXd>QAKy3ATU2m4L;Y{6cH&v(Gxt;5ozjYUY)_P`5 z%*|awMpE@$8a^=@eUd_O$ifA6CdAN%1w@rT3s9>mRwV%X|@hv+QW z>aIBKf6icj=zZwyHr3hMT&JD1x7@A0d#HzwlVLw@l^|I9#@)P!tHw&9jq9RXfu+3$ zdB9Zcv2_TIT58P9tx_nwX0(%GHrOqgA`?R@KG!tFexbnfw;%55x8(apguRTc5kip*=K$J~00GVXa=;-TmSM|wtj*&BCBU)_XDCel>S#t&6XJ12s>i4$t% zDW4LsmZW3Y=zq&6_v-oO0}?X4T9=@T?tM4k)ZQxqKF|H6?*2NSJX2R42VjNgfLBT<_o5NKA!ye>gL;-1(9H(G+X`PdNQtkO@vXZWRJ>6%{*}CE#h+nmS8gwGQv&UcYVFOcJn+MIHvJeV9=eQL#TZpP{m%61NvxG*@<5hpebfW>5cL%5fU+JRgE7qnqVXN6oy4a>Sy%yb|Qm z*EvPWu0;eZb8s5zt^_kReYqau3moMTRolcGBP%gU(3Z3;ydSLj&<751HZ&*_ z>cql0B;wWn3id8kt??<$3lf!dc;KEj(+OH$*QxC!c3l1KZV;D=lZxU7jR`aFh?0bf zj*a&vkH40jGPyrUHqs?9t|C;8}S zzv^}BQ<<6dOUfg=dzk~Aqpkg?(qB?#CjM=pm_8awDx-Hpb#AWtyEcC%una#&$(e9f zXYF6~uVe2J#G#uw5}eF*W;A#qjj=TEy*hJfP5uh+M|w5?VK$Bm6y

B$M?n9OVzyY$IA1PICm-SBP4*~wDi&(Fjk z=VKiUl-;MUk|@REs6cPF35CR9DMuV*Zc{dI{zO@ltgrULx2XWLg(f?Yimk)ri4 zqw>>?J*LGsO4iRyjk$Wo9DfIUedDoW?h!%^0IERDk?gu>GQlk~%< zAO-lx(hQ%NpX`Qh4h=3n&%dMMudtsIHO3}L#)9m29-gg^MsHT+7xkqTidSp4`y_Sx z(}7QWON|0PghYL%Y@o`b9QZM@En(V`Q6vo=QUMf7<5|6WBTUC;-wSliQQ`~Oq?XS` z2Zj`wLnPK&a6H27Lc?`d89;5TR6xpIMy#tiHP`IMm=T`Z9+=C6CS5&>9rUI2&ULSN z^)#ChsXhUC4TOm^L!zF=)iUmlByn)2CVxCrn=WR85#dST)oLuSDWC6=&_p1Ia8KF%MeImu=D%kr^`O4s4+5m~IhgJY;STAoytQQ=`aGG08N)t| zrQ2Xa)n*FJ1gk`l#TBy5IBrqodD0OP=ij0JyNv_JaXmEKvUY7UXQ_Pe{2_QuG@FvleR(;9r7w zG3{@)@TwE~2|{(Y?5q{J`#>=fMs$LMo>ljIao zL0#TQ2eeIn`lha4uVf0PgOi-z3qrN5jmUl^dkY%DNtR7MV|jR%Ab~%V9qIXlp$}kp$>vfVB--M+@c1&F-dQz&e<2!ycaMUUen+~WBshN^< zww^mAe>Y_@QUIM~cI(Pi@(s{eN!t`O!IwMz+r7N(g>U57)xT4)Q^gCx@nt`BWjV8EPq^`=|DHze8A<4A(>wDq^{%^ytF?NR=drU0eb z#uuk(9>$Gy9qR|FPAE@|fbt&}5M~7M4PMbcuXuH55YCk5{X?yWC@QHZBsoHXjRIE? zLjLEpl%!YR^ar9vyN4t{)oZ;AG-0f&N4VhC>oU;$BbqcGY=gPM%|T7No!ARD?V~{z z(U+{AdVLihKNm)x8-de9$SZuJs|KYex5- zEw7)xg5Zh}6(-Qr1MP%Y_D$>3u0O~Gvlci~Mi6%Ygrm45$;$k| zFJDOWc2cQJCSMn>V0_9mT=gA6uRazI^^Z=rz2>!l|3jg9$p;^uNAw$emZE-#lYVEG zamS_WctfdWEo(x#L%o#QNem8*aFmQpkBxrI5n(!g@Qe|~)Rb=A1@x}B?2je~;5{`ohSo+ujc#r!G7tsAbhRZ+d&D!hluG z=68ckZfx&tv#ZzJK#rZ?tVsOEuQlH=F;Ty!_oSzhSd3NZ} zBbBbvQrgmTQkD^kFeIk~{0`3B(IfTevUt;0@fox2ZK>3M1ssn-rj}V=0RfQVrO?8` z>KRw@@$}?4NKP7qUFg{Umaj|ezGNSas-1(CLy5XkLIbI$hp;)C}V1D z@F4!EF|4B-rc|v(Nd8=NRNMeNx z5d_-=y`1}atLEqctgNpBS@>sJ3QTOnuWT>s`Y~!7ZK7-1eYWo-`Tc>H2TRGr7m{T> zJ6EG5o27*q^KZdoWi0bNGvwD`MKjI3ROak$S=+Y3pNa=TDfEMrEga;r{QMJ=M%ri~GXdmY`N! z11(7{J}(83G$`)Sf!AKGIQ)8qwB{I|1W}fqpPaXN^c$D+%9gQ@u4WfXgE>LRC~!49 zqs{MSxGy8B6=F-2vOTT@7z-)vN-u3R8UkL{e`h;4qGDZ=B(bldI-A-)*q$3N#*D#z z;pl%E)*kPBgc*FhA8`ETu5*%B2X7;ltp48AO#Z4$dOKPp89tQO) zKau2$#dSkcsk>tP!JQ!cSv*6H(g>$N|3MSJ`YN8$a1Ko8jpH@Ok*9?G`!VgzAu?(hRJ6vh44|SzvX~V zDN0WtftTHIQ7lpBf0;XOGLh_dGGBrKWz-t0$+}^DGTb_TA*zmw)S{ z+17DWp)!)Ct2v6G3fziOgf-BO#-6G_G&N@H4p$+7DQ9*AL`M%^F5>;2J1_jsmd4Pk z8sYNCOJf|ccNl~s?Ix1*w|GmoEQb0_X66a~tyH2WG3x4V5Uqy&+UJ$mXe$H7f(4U) zGxLo5gVX7G1N{~6Et^7pe;K~+><)X;4Y7h8A}Y`O9xOs>|278)cUooFuuxL{V0P=y zG?>%bx+I->Sj^bZ+_5t%#q0vCi+CR!@6KV9A(|1rnrW=cvotaW)_~cJo<|AsbdC=I zaV*V%BVXiBAj8-HEt&Y=(2M``Gd}TOdOF-UH2aF*ygj*{1ruUkl&!6;^7iRyWL$is zCBPDJ`AMC%48w~0;{63DQ^5Z9C2LKRX4kCQY~?dsiS*~ZFxIj0leuo9Z#L`e>pdh8 z-zU;?U3XkwnJcNX5;q$?C=&5~4=8+onPwSz<E&<(OE;L?|YFE&K;`C?4SR(JW~!# zGko8aUYoXHqwGB`V%N3LYvFK=)r*!Yt%~k6Uax*1U`fKlf$LWN$rKfZi2%}}t;L%4*E>N9_t8~%Iq#w*k z2~#It+uzBzpw4kw2o+%boCU}NXIk-Ik0LYlUS$%$ z#y)rtQ2dxLkFH>$(0kj1TnR+D3k4#ZS1ypql~&)Br_mzSo}k8(!c2N{^5x^xy!7$0 jtmH?{lfd|=OF{#5(+^TIG6d8;?EvJYm8HrhjD!9S%=1Ef diff --git a/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Light.png b/test/componentFixtures/.screenshots/baseline/aiStats/AiStatsHoverNoData/Light.png index 9b6fda930348a73ab00ec1d66d70d5de568b9448..e631cc0c3c30bbd1435440976b5fcd8940f2948d 100644 GIT binary patch literal 12674 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 U$)KO1e|Iivsp+d$D!+dJKOMUO^8f$< literal 3888 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 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/ActionBar/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/ActionBar/Light.png index 9cb6bf18aeb59edbabb22bf2a4abb3f980086bae..6523771ae702a8fcf726e8285ee6b16e3a2018cd 100644 GIT binary patch literal 7687 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 WgfVJ0qB-&~f}x_IDG!mg2>&;ZlQl&E literal 4161 zcma)AXHXN|(hee^bWuR*prBM=TIjuZ1cA_d2SIuWO^_l2A|O2=RU#02Ndf`sy+bI{ zLvI=>(m%X&@7$R?^S$%_Idjg=nc3ah=REuDd8ezbLPktS3;+Pg)KnGq002DAn|U2C4uSp|=dOo_EB; zmMFad-&nDLaD^Vc+tG>mcgR_ZC>i9*Sw#Q83w+Q-6=er`{N&Mhkz0|AcL3EDwE+=d z@~0Pd_e&SlfnvKM&K;Q1jQh*E>kA!=O`RAm05&F~q@?wQ9=37z;>!oAV=wd@H)66T ztGl7`Z}G8|@99Yx-!qZ0%-BI1rEwR+rjPJshpLtZ|5zljf{heJpvOOJZ^eAs`QJGC zL_<+eK?W=>A!6bdQ-Yk$JT3DEa*N6`4-+j>bdJRg^E!7F?asZuKq>)k=D*$y5s`1{ zEYcV?*&4}ba5M59{1&C+`|GWl8QFe~!TaV78&+R=)02Sfsj)e-z17>ROw-{0+T@E2G>K@#WFS>GeAPIlAl_!Y1?O0yh84s>vJB zOmk<~<8wG=3@IxuMz+i&zp<`=&uF2a`ID9ga~ABCBxxKCU0+xjrPs$gUzs~`5)riI z9jCci=1-A<9B0nnlw!1Ld(Y#iL-@o`cT8`E)#;*POG;_ohSV4DMgCi8$MbJn&5-`Jp~rM(OADypm;+42dwI^8&Exki`A)*tk?T;MdGFtD6}HvjFt{iyo`^W$ZJ zYq-(}f<(7!Mx0TF#XUgTN1=4L;$NL#$~6}>F}%Ylv_$L zZk}puZMyvUmo==tf(fA%U1;4b5KoF9Y@c0WG|}HG9-Ua>YEZ;Jtdit2@2?O7=4$zJ zjEO4RZ^r2!l^-AflAJyo69WFCtWtAHU8DB|FAWnzoyl{V*+D0iIA3?4KzN8FFG-z! z!WBTSoLs@ODHzy|c@|ZF`Ib=v$z~!W0`gUWyRWpTvz*OX` z-xq7pykswft#771mcGR*j1?OCccx_KEa^t4r$wctv;dVf>KYp7=jVG9vO44};{V|c zHyQKACa@r0E1lZouzCfw<8V%!{NXjgHS9m-wCzq1gKA?LSh}$lb`E$?vc^scK1ulR zo1y%8qyE5)`m~!mfmz1FGWYW47ADj+HXx$QZ|pL<=1i+i(OjDOGioz?JLSvAaHm4%DTGv$F89C*EDtD`J7 ze0b8Ufd3rSW_bhE(pZAn&e+KJN^t_oTb{w#Q`dUV+W_NM!X6%*lnhM;>44;KRMb^0xB$RJHMHE;T5LVhNp8*w!? zdmnnl?5Lx5#Et^^wO!f}Y2)4S3x=86@)JcEVhPU7w~LZ5l{ZcC%~)$dkyoM!PlqW~ zI3=b7r5fn(Oc4j-vb||UwGK%9#YG05^XZ*|47oSwHi_`<7U!-iQsL>nZT30~TS4-b zej~{nX3ND(i}Sh2Ld;yB$MxVEW9XDmZ~~wjUkVIwzW6y~JbTa0f4rqQxZ7;uTFP}7 ze3hHhIRk32`@vMl#N*(Rf5Oz{t&js+U-mYZk(6Ub(uv$-6r&9F=o^&^MQH@~YgRS@ zQ6q#W6Cc~qL(%SvM&jf`gI5CBvk2>Doy|>jV=epPPH8Iw!BX=ueS;;ug(UuCikOT;H9fg=H$z%}yIF0(`VcWEW=F8l!_ zNA06(u({e1h(;{ZN$efevBWVS)=ynwvRU_C^}L@Lmd_KCrwNu>uB`)?1s+<|YJ~_= z?m!M?86guQLqr6QMTB>QWkQeJ<3omP)2kTucG$Yl@j6!$Zs=RQCG>jr=XKE{`L6(-5|py z&t4M%db|UWf2XEG(T_N24n^Z6zdckkVc@-|&k2kiu2d`SG-PY3M+k4Ecfm*3LLdi^&_FNw7;goRx}7?fhfXKL9BO|sf?h792tHc);xT? zDj6ldwkCP)%Wq?NQ6D*Hg=TGd3K%8al~VaL#@M2c)tV`0zg063NJpPZ_WJWx)z=zy z!9&^G!x(yN60=tBZ87F+;Kg>Ven2|^<&w@Q7Q8i4AX?yaDxd?^`|6SCg6%vq#}VQe zGIpUgaHsdSv?Q-51fPoc43Xqk4`~GR|3U^~Jb)Mi)7G%$FC$fmA1QVxXyFEAOcGH0&NdaSujWC3d#Y5Fxd&EC-J1pqHfj3u^1i(IWpU zmPjVDNshB?Hz<(<_QLLUDutrJ$MJ}AxdUAx4&g(k+>kA!=(}psVcX9AVleRR>&2ZYt&ml9`gD!PaUC5zfD;C{pVnLqH0@N;mLZR=1|-s9rFI?0%v^;khnbgEQw8tX)2>f2}*Db9<(+sI~-Fm5IM5dqT(Q(zjf|V-R;&Xju5$A7)H9y%bo0&f;RnQC- zd_>;9mJz$y@6jPDFji#?^$~p-w=t>`@Lpx>|Y0D$XjR}$snn~wm(KR*EY07K&_i4D~6t{V$LO-Wl3E^ih7e_>Pe Ah5!Hn diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/ButtonBar/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/ButtonBar/Light.png index 48c31188e4a40030d2397bce4dcb59b709b69896..9afb35e184937e915b51e25091b2a58d91177741 100644 GIT binary patch literal 6827 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 D{87=t literal 4209 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 literal 5522 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 literal 5611 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 AMF0Q* diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Dark.png b/test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Dark.png index 2e82e8ae528cd1142ab896c19a50f4df355192d4..e6cc74cdfc2c5820631108932f0269a3e661c5aa 100644 GIT binary patch literal 4424 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 literal 1912 zcmb`I`#%#31ICwnsaW-{H{{kKrE<23kS#6u;h-Fp%iNO6u)@Y#c++8d<+65M=9a1B9CAF>Vn)T{y z2ix_Uk6p)b;3Ubzq(lvj{iKtGJ7IWa4w_c{)Iilf%=bJKR*fc7r;JFnHvjF;n)~Bc zc+`hlRACCDZo?A4l?+v!!7qPlK&0**0|2yboB)8gPe6wNZ`1!_h=xF|EY{k>a7ped zL~Kk9qj2{EB$$&VowkXqO5rJ#ibR@nh+@$rXD?&t^9-GZRbtP$4v5A4r>jke|=!K!__AF>ReZr7F1*AAhf%dIwml+ zPqqmBR79a1I-rtZesTc_cGfye%s;hhwPXP|$8<@UTCA&b;`E~ko0K=CH75Ev&4blJ ztwOK_1mnx|&Idf!gW=``d6E7J8yzbqbxBPDi``rk~U8J#|Py>M>od8w1+3fELiE(~e&fK4$AD%uke2?uI>0Ol&pic^i`OY?5Qg>je z@e~E<{EI|u;V2s;?5i3-QWngEFMRcYybo7z)73~%#)H+Qi`yAb$uG1UF!3LP)c=Dc{?ONp@j4BSN%E}Dyn(&)X!*{xlcZ5YLei)6+ z{B~#BWTFo#N;feR&AqnF?{}RquP;Yl*@uCUc1eah7losMy7m7gujn{OftzDvasH$zBjJ(CUDIZDrhJF8Zy`^OKtC*XQ4`YRsQHb0{8=>n|FKwctBSjOYN?w z+3=ie;WCBN&)ry%9`Ha#mZ4df?Ct&QiapqD+r;%dP)elLND_9I8xGu^9M;7I$<`+?;H=BYg{V0R(3Pe^wsJ!&2SbimkD3p^rmDf|jV^27$ z*`J34iD1FeMs)^rs+-?5gtg9Ho?3bRd*_M|n-f<$>7t6li+ZMRcdR+nBIpXx_0M!W zboHn-z&J2^!*i_S-18~E_O`{3BU&GvQblCO@}k&(j4f+;9%4)JftyMD@#KFME=j@r(rn(){J)$gXQ%hAcgr4RrIp#6A zk{?#KgA(QZap||2!YUX~l7BiJj#{r*M0lSsE|z^yWUU=dA9t=^ZtP2T4ZMGYUX-O8 zV;mBcyK~*|8%L4K;{@a<&GUS$HG`Ge68#P*djJ!+Km4s{Pdmfgm7u`fH@Ib;=AMLL zuTah_!=EZMoK2<`Uz(EGSP@78%$NN2c&`S=h$^2E^g z_#(TtX>8rBZ*ReSqjEyX~rg|Eiw>{qtB# o-Mh`*-Ld#%g?mBu@8jGL2rt@r1oSgY*lPf;PM(fU_MvJ22LMU8&;S4c diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/CountBadges/Light.png index 671217dae1af5d0891b5d9eace4a7de98e14f018..8e9cd825d1fd1218c2e4482a46f8903778a7e1ba 100644 GIT binary patch literal 4258 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 literal 1806 zcmb`IX*Ao38pi*$Q&mOB?bKB5OBrjWNUgC%shq)Jq|=mi>`TNhVr^}`Zi%g7)L^3a z6jMQv5UwIB_N|x(MN+LbsWhpmYrfuZ_niCTea?H{^L~2HbDm$etFwdT1-T0V07%|( zgt`HMNXO}Z>%8cxD%Lug1Hid~J5U>s_}{nRLL9G!$&2j|mlV%;v<={AwWt9R;x%?x zV(Ahhb>!96OKfXdO|P`cntuJvLJj9%G8krlmy$GXg0kKW5}sPWw3lc&47$*sDir%- zh3OilC8m_H^;2_7_5wjJyNW`qiA~Iemk%`(iyZ*~>y2|~06^499RS2NWPpbmGU9-> zZT49}nE(|9@?BL$07tC?08oGG2mmtw!`n!i28Yk*zkmOJp#@1xJz+`jF?$kE=jijE zw3HOc-~*e=X0!3UGH|$RqEY}kWIgC&{C4WX{w-v0lHkiBaet9OAgryeJ$fX<`i>5> z;eBPG=iUXyH$pi@jNv>b7Z;bXju#UsP=jQ!?{pIBv^T;c9BtLf`7A zi_7lc=$TMpp)PSd1Z7__5;1XbG9yJxt6(cX;cn|k*V{xQJxR6O;u*vLdTFuwK~@N9 zP)xV`AVv@T5v-W;kCDHotJ87gtmB5lJZe?FP zuyi~7w+X=xy!5$GERU$*>G)fwU`Pk$fc3}BBA!mVYTRV3iy}=r_605zGOoa?P1uyt zsqXgn`Z1h|&lg@TzjhsWKk41b+~ewI2j(i2zNLS5t!3jz1esN`l5p=$g=02)C;`Vem=!nHZFp7{Z*JE z@@)XhiI#P#V^PhdaQB~@5Hm9$=T4!=jximvbZ_P0$Ke;08?qU+!u7uL$`#vyOiS3{ z#1NL^(37AW(ByI1K)wBoW5ora@DB95unDigx zxUmnCuXbL`_1v>>zOK9HkiEpuUPoGezxCSOcVg^kvcQAd{lUci5=K4dh_^!^s7&4L z|Ly(j(D-=%d=r9UD4>2#t-$T**X6njGO(G0X2s;FWR=c&RG@dH?`Lj^HVGlwLQD>h zNol4eq2RlwaJPGii}2E(B&bEpZjsB=VZy+o&f~OA|5dcnz1~SC8~k1IC`3+&b;jn} z%$0?ah6t+gEb^gdT~#DWx_8&PHNpbb+sJn&LD@#Mm6PKmOsVv{(~^@p^hk^GKG`M; za_heh(e5&#DZRb%B?!(`f}{uq+{eZ_K}gebonC-D_Ri2|+Xrd?0d634Q2+n{ diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/HighlightedLabels/Dark.png b/test/componentFixtures/.screenshots/baseline/baseUI/HighlightedLabels/Dark.png index f1801ba1a87d1def3af66fffbe1300141b70b8e9..36ed40b5266b741e98c677fd2aae3d812231b7ef 100644 GIT binary patch literal 18284 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 literal 7104 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 M@S*Hs@`(Ix{i^{{zgo_15H}6DCod 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 DR=s;N diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/InputBoxes/Dark.png b/test/componentFixtures/.screenshots/baseline/baseUI/InputBoxes/Dark.png index 368dde03b45594adc8f87c90f01605798f8b306a..721a618d708cd2afabaac79f0b07018a180e6ef7 100644 GIT binary patch literal 9232 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 literal 5238 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 x)BdJ!{ke-`N&Y;2FogujM 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 literal 5116 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 U!b_f7NqhpRtLQ*Vl&qfr14MV7X8-^I diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Dark.png b/test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Dark.png index 90b44bae5125e0f0ab807dd85d9cf2a5c45a3f7d..bb25647846e3e7ad6ff33c96e5adace9bb2c61ca 100644 GIT binary patch literal 11332 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 diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/ProgressBars/Light.png index f751604be902cd64383355bfed5f6989acca0565..a542ed0e11db37134ba4af20b8f280a305bac244 100644 GIT binary patch literal 11476 zcmc(lXHZn@zNgWxf}o=0Bq%vFU=t;8GEJ16bI#D@yahpWZgP+u8zj?21qlr_NQQ<6 z6dD91HW?Z&d+(V&bMCoSbIzG_XFjZ2Rjb}wAJ(e+zt8*peo=2!&Y&+)V0BS2FMGx1MBX1>@QUk^>^_+lK_J0g58o@1Uv7G=*25KfUFGc8 zyOrRSTAEW0u*|CDu#q)kb%7xTj}4&&8pL{Krd)<<0>4J2>w?-xTBE zNZoyVAE)5$r@Oy>{nhNwuXZm!;=JH{s)zHG3J-vT_xK(e&btS932>x-`6regkZ+xu zRdnvK5bmPdyO%`vY9x>}RHjQ_9j8CiYu42zxGXzPhnMDFNH>m#V9X>;xaEZc57*wf zmy2waqY%gGTYF!5KDlC!-=fR8^RKRI=_3~l6kBWur$4WC8{XF+CFP;V^aW7@jR%LF z-W7@-qq!4KMme|AVh;r1U&1dXB<6R!fL+5=9#im7PkBM&QYcR0H1;)3U{;&QxD0#W zi2vjsCbTD{ez~aUFmR#dK4>k}kdGa@uG{y6+$SE7j9~ z^%i#7%yAR(0Dpf;bwwAA&cy`P-5gqL%476J9=(FPG)uswhI>^qOA9dbd-drTtWLj! zQ+`)dMegFe!tahOEZju9e(mEl2<3d^A*Y`%)%d2Zf($vSoTR0brIia8)y+ayjH45e z(}!mrDMKbioz#|)o}!rx<*8(Xt+qKWj)=DwJW-woJf${WUa4qMU-Qxd)8}!obk!YN zQdY2?t-s_G71FSRBrUH-^D)75dXFjA}J z3-oNmPqq|Md=3v+5>`hdSpiZD8l%Ffh6*Al6|x~}$Mm;WY^Z*7AK|j^70MH*wOKk( zW)mvNp`7!N{Z-+iRY~faft4MaCi=0Obb^FgMJ-$nsiSzvDek5dU6<3PPl`Otd8{_7 zB*6(X_s#^mn|kWGwb)xi4!7;AMq*7*v{>lHCH%D0RyVg+_<=&GM9V#&lO2LwFqx;z%;ub8>8IvALgk1HkOXu6QJwi#V&yT0^Zgsqo(!wW(< zfhkDu*|FV@t3jTsFXRd^?2TWVymz(so z_GK!)5sfYiz?h7$`Z|gLh1E^L%YqPuTOX3qMS;LmZ;rW_pQH(ElxtPwKzvp8Mj^?m zJY8piy2Y4l|A=byl38yXqi=q4#oX;$twzB5sVJ$kVYGJA26|CWePYbkV?e94Es?vF zoYOXX^B(4`GGFoX<$JlQ)Su@9XPd|$lA~qKftyU(P65E= z@)!8|sT$(27knxq8YRBXJnEL2V0+mYL97r0pfd@dnvLK275*j#OAUzgK*w_tj8#UeV(H*&t9XtRHy42t0k<|Q1Y(&;>wx^5kB zAUC$4Pmh}u=mTA$+31~Ot&LFiDG}2CJx0e_-wLPt-ai3fSyP>*xnwu=uX?UZPad=? zxx+Pt=6~#pxgf2)b(Shgti+AEDiBNFHRdT_S@(1f1<8KeF)N;nv*na;XQJC9q&>cC z^OHsOy&eLFR(-?83^!!@yX(u=*$Q^UBsd#YtXvPFJ&S>V@#vnQ7 zJ4%(@ea&L*qFiyBCI1 zKB>zg!c;vN1@Y<9gXpWD+S2S)640sj?5isRQNuJ07`d2eW=f>G$bhlt(raYWcL27z zGkE1ekr~AhOaOnld-{icd;yjqJBNWPc9Lgj;kggo!z-ma;s6hDR&ynu-+Ljj#&zO6 zX`;*yCs92aLk6J_HJ`*6R9@(Ya7Cs}@Ra0m(vBIrjztJ}XT{1}f(<^t@BLssmXWKn zalPRKW=ujHI<$y&8QEX}D${_3wTQ|Gak8zgFA{%^oH&~1u!^8a7@)|yUi*b+ycM8< z%sxkS$?FMmB3Bz^>8j`F=g4^BbMzA#XZ3(Xqc7SKx?&7PiC6P(%@pBafxv+FwWu#T zI{HC;51A+O1eg*iYMwA8(DAdKaX06Dy~DtzbU%o>)L&ZN0Bzt10|Jl}l8h_J_ zQcV0o6}6$w>e;+Oij76#N0N4w{B+?2(q;bj+-Re-aMCFJVVFtdMs|bAnAL16$z&tCbBS^NbUGZzx<8T9gJd=g9O zbeO(>NC>3tnr|jM454Y>;$Foj0Am#yxL&=8LAzcB(tO%mlQ?XD7hjMR9V5Exab)kK z2r`UX=7g5Z@@wBXrd<%fZnJ6l9Hu1y{CL`~(rq}Jja|$Y3%PrCeI@@Ot;#!3yUb-@ zD5k{IuZr;|&+mBS;HN&uUh^SsU;mmBESVVC8GODA??tgrm~ZQu?%O1M{R@Okr+XVL z3n)Rk$h%YO0SknCrpG~;6=g5+t_f7|(Tln3;cw^Di8MP-d+^@(2{Q@Ht_9VY-s8@K z_|r#cFM~A0WgFnR*K5byYS;= zHCpgs|LW)(bVt((yjpG$xzIVZo|yDnNzjPPw6=6da`mG~cDpCN@e*`RR?*p2(1w}c zP)U$gVA8j#eS~6TN6v$fH^`f;{1|4${R85@{jyw4kSdo## zp*xiB>|2aBNO7_z+HAB^Mg(rNDs>C#xn>k9Y_`dQsO8%W{bodeDswvt=drtJNAr-= z%-MU(H4yOd2vTR*#WiqG0UP7ike-{hT=>b{Z7TN zHc{Vs=t}0m?u|k@qr5^&9aRxz`oU_eW>>vqy-;pe+rk;|Xe(W7sXI`Fq-PBp|b@;lP;ov_v%OO+n07gc;wgnmGS+JWxpSJu2;74zXbRa|mm z57{a28!!4nh>S`+eCN!zr&CeRY86sgKF)*25=2l$y$!0SCoTQ~TN36mqKoRMv#-A^ z)*b_;yUNoGpe3n}hfH}2!S@HjXMe@(7T)Jt?K++w>j;~NMrC6Ih$n|2s(l_)#f=j$+B;-8la zNKIs0X9*zgGXSCNrZwd8AxKu+u!ZC?h|R|PRRZ~I#y=>jwEGMK8NQ@UYKBm=WWm4{ zIqAO9L$0Z*w$CT}iK>*nUUo}Lu}B?cTKJb6chH#vU};YtNcv$m-;l@1!_a0Vq7};m zEYX>a{7KtXI&OF97cH!AZ$=A`1!VmW9C;Y&Nv5ZdOD!0L=;{9hH!^f1p1$OI|VSK%^6@+j5J}#nH0+m`2 z`m4aq{4Vl@cI8sNQ9cnwS(%7cG)!lnjT7@1CTWRk-(u35qf)@_9$^bf0tGWPEKZ`( zV;Dfs!(qyyMIk%hV-%@yPa@TLr@#Du5K$as7rmC&$lgsG>o0K!l5wNj_nLw}lzMX% zPKZ8=H^O3OiSO)weSR;^mOUD-r~!})s;(P^HZBZl#uvn9;pVO@)PMjxT}%X=Q|U`5 zlo8g%Fn`Bw8`#?B>~-W<0J$MMZk5%tiRf3F&1idLue7ydB?D`_EG?aAXH)O5Esuw9 zSl-L&3*>RNoJgpILN<;e8+j!v?e7tC^2|!ke_~X_6zETknkB1iMWedAmrAamFMBCF ztNN4JhL_jcm9|hFA*MG3h&M74L=0Tpei1YV)wv8z+m5XNPZtoE9P&_HPN#{v6pM~| z{8X`f$3t)J$#b8ofajWAWN9@6u_YB*==%)?zM^vVzZLxW;-K?t)W4w*<1_Y^tk#qq zQqSgpQtxpLyvJ=9Ci*hw6+oY80x^8Hg3kGw-*g$>bT$dp()KB@C040sru2IC(7>k= z{;PFzRg@hgbJ_iX*N+TNV&~^QcSG{@l4Jyit57F;H*@mCm>U0Q-z*A0aaQul>rR`| zJmccRV|-lHV)zBzcrgD)-v~#Z+RLB3nx^BK%sUdw6Q^;(iPfZ+HVt&OEk#FzMW2cM z_!M~WuG+P2&$Vs#SpX*RgI_IcnV+9jH+$ETT`3NvC0FDYO|XYx*Y^X1d_Rh}>Q$Tf zO+bWUneE?CuHyQ@Q6pXL zq2LxI7<0B6ba)jPH&CJlqklN18(PYl5Z=q;)48x;wS08i19YCZ8<9I-E!c#0&p0VN~qv6V6Ozw}$i{ zmvN;7c8Xuoy`w{@?Jac{t?+&(9=5zWPpA9!?kBoEm+mZLaD2gLOjKo&TDzvA0q6x3 zr;Fw65W`=C^wY_0`z(K+K7oc3RdW2cM^O6i*3gvy6RxI9_+zmDAtC;5PkT3({63E9 zpET2@gm-Iy@c&7{^WVTUf5@k+@HV9x-@S2eV?@y{do9i4rWJJsdhQKjaS7?L^+BRj zIm5FQe`=pL>Ac|Pb2rRLs~0}i>JIMSW%{&YDYd@+Sl{d?O&AdT=c)$ zFnuysD~^S`oFwSm3_e1*FQ(sxpEcKeK`D*G!_=(GC_!$iO10hK9e0T-u}N4NWq)Cv2Gg8 zS{bU@l`h*2$T(uACe1LrCGseO&LX-0`2Gv9a+R4p6AI0kt=>^WnVA-QZ34?H@3b z&OU8^o6e~GCDh>X=cUEy{a}oO`9yo4wYXv(`n#RS>s(uK+PYivCmDSpZDv-@Mn>4K zs6KmCB*&Q~>T_WLBNxm3s2;G>`otl{R$16stj=9S1wW_OQ6Q7a-@w(jeY-?Zb&D;j zu1QFR`=p7RuWd?L{~JSb>)ii$q+!z_DPhWMZiJ1!nWS=oD8Fe56sWC8&Qgjwq-(W}1k)wKhZtWA zbu?<_SnpFt82XuYPvdP)hnejF9B*jV9P*`dugIGc7-Er>hD&X95? zX9Fv1AEpyl9Q~3w?*?p8<}qOv%~Pf3MIe|N9#uR;Rr%aoW*Jxb&LJh+cXeGG!}FDb zZt91T?3)E#2Zt7Vc0{j$=Cbi$d_%^jLXrY0)_ZrMXPIPZ-vTM4k*4G)6h+Wg}#)erZaceqWRetUD_ ztSJS4AKyOR8P7&epfqdQKcU5$kt}omUm#7RS{Xo{ExXW`TSS*mdOuWP(283s`pMA$ zhBUe!vIB3lQ3YM9e05n?Q=b{_P~*(MKtMIjg-IDXWIw;XvYY3%v7Ln7_*uvj%>yz6 zng%Wg#0~O%repBP8B)4sA?rUXsbU#=`tH9iHb3%?(R=n%wqH<;pyqaX&uGV7}7Io#2A-Z9}kgT!+( zX^O~~XkT9-zMWs}n+3Vm>GejJaCm`vWy__!@?B`fhktg2D6;YhX2mIvZC|bleQ!|i zE1lCbQiiZ6Q=p3jvzCm;j%xG%mr6RP{!1kh-JU$q-j*V>9f7yD$ArY|KbfRcOkxz? zxkIjtprD8Lq_xFEbuKM-VEt9ssS}yR|VzO6cVVMOIfvx$s4!NJ%l|-UR+iKq$9_ z>1t)J?Q{h-0L)!7Y{;agi?d9w{P4~TzBlIocmNgXWrjUkqa*p`vyNK6jtRZN`Gbb` zjiqjNjn@BNe)Vs|n^o>9qzGpwucUBA5jk@|H zH>FH$7^a>d9yK7|XWRBeHNR50O872!=jS{5EK``{zZrWS0>iFtT%PWV`8J{gLd+{x z+I(8*#PIr${&`(fL$zq|%$zA7@_K8mpK->ZXf{Q%3ZRd2aDJL~IXfxe)IVtY`<#Z_ zV3$lViv}HLxq_$uE|ti={8X5JkpR8);SnfcFjdWDdeWwam%!UI)n!?gbh0P6%N8e) zyDR8%%p%b0Z3bp*S)Z(tT!28%Q`fcC9=l=Z8gjDZQ^NS_Kn};q;+!_u6?Lgj&d4o2|y3GD6 zly(1WSHY~J%*_U+%s5osG&d^und(p){-nL;v~!S7yL(~rjC~_+G^p=Z4Qg~bg=q=y z{5yrsvZNM?WL}A9HAVqCDSlN{M__~|$*ct%wjqz<% zy@eW ziP9~;pULh;L@=i(T!7^0__J}HcYlOmg#-2<5#jtlkv6l3&MMQn0GQE(zOvOAb2&ZW z=ef$=nkb7YdI`-gfm6Mxtc11(-#YJXvwL`DBKn?Xo2+PJL4k`J=l0Ls>XMAdp*}#` zEh+bw4tDS}jqIq;2{;X@+>BuWFjv2(Ar}Nw|LFi+nz1nzWf25sS9;E-RjDE zdEk6@(aEZ^X{AFsoOWJv^GY6Z*BZ${c7wpFfEXgmDK}K%-VNEW#~U-ZDOj5>?6=zxEqFT&ZATb@T;Rv z-$iSlK5*&0y|@_arRGS}kg9#ATG|j?&S%ekvh;h!p-#yQQ$u9K5{+n8tnwjsCOU7I zE98fr%%HY+tj(o<+xmpNemw63;u5xh(B3%Rnx1Ki5V2<~Pf(I(NfR+Hf z4B~C*Hv~*o$9$Nif%8X|pjxa7!Y?%HKEDEF4^A5z3bOd-1@9!_A;5Jd;E#$YJKKDG z@@*Cdy17h3o5?zqSn!4P^?;t8QL!h4YReM+%<0)Pl9V? ze{7pJKpg_SCdBP%Pm5=oWC1RIr+c+NH})HY9x>$d9NeL%@Si@Na7MUHqRoF+Ik@_N zshq#lH_nO*yImEb&afKFItjOOXb6xVdf}xDWn4CBs(13N6d6;@)2fkAHDUR>w{G;3c2^ zNQ)Vk6)9)&w;@>+Dafk9YImA;o9@!iZ%Lb*-Y8c2noK*ZsLJ70JRUjuz2u1T1uhHy zHaT{&vGL`jECgHnW>mPz zER%Hh!_G_bhg)o$ngW_ubcLH!m3L?$I_KMh?>Dx4!;U}qSv=-QtC@l$NDA<$gWCMg z01cRHwt~S$I{|jF+P##G$T1$$Yzs?wpmwE#MQX~Sy}yUpWVgR!t9tEG_JG>$3Rfpl zu96{A(1$KXEv~)vg}5Cf%pu#iU_bS#hnYhWCXUr8UaX#jiirhkOq!W~t;(wnwK$@! zk{-n*1A9~PW$^HFsX_l$9|MQA<8(C5@p9}!lWp{KCyNxc|85#-fu$;8UQ-y1l~@gO zQg#1;C%tt#R~ThqD^Y%7k>xZNY&WKki;9t{Xq{76fYc9tyU-4U%)MXeNF zDQzC=Je(%|bb4R&pG6eY=Xw%i=eYNAB+7k4F1fcvBK{CI%S`ufOFQBJ_WI7hhCkO* zK`k`seRzsxU%_s4nOBHkqmN6_b@cJNZ%}(#z!Y7dpU2s-joRg^D&D^IS@WmEBTRaB zLU32etqi-Z>=;PA*5uqG+^FF0PLwcRNECn0>Lko0Ge{Tj@BQ)m#~sS~FTP@zRGFT&iDMQZJfG;>TxC4r0xr0v7nt;G6Pa z}^8CWyGAsN59C)_&_cA*8Rw%oREt~XW>);FR#NWN4N z%Y~y!-zv{X2p$gQ#2@Ju8u;F) z++!Y!J{X+x6dR!N+<xSRO!|yuVMW_ii z+q~%@NqCUWP@Q4sr0rvG5^JzlX6fLO5T}k&_aWn6FaCiLU~q~pdxYp}=NJBsZb=t6 zZLdunQ9rWbXU##(pT?H1b5B)|>-RECafamX*J>kH8zvLI(KV|GGLLZ5B=Y3*juq1% zx(|B*Xbk+r)Jk%=cEr0vY@PL=1jDS7nC4N!SQ5)E4jU7*6wsJIl8fR)#8mYS)O(2Y zKF0()DV4;<-in!KEybmb4P)9Lm*TSWn<2b*3ndaiW#lQ4Eyn4G&kyMyVS;%P^2vC7Wg9Ym*Pz0>ZMyQ%1)3U%L%+62yi=$p<0ZZ7!RZ;*pYKF1y#mocqr{$ZfEPBE{cmwv(#c(>7;b?6SAC znpydrnCf`rxb^Dd>S!s0Je_&6ZQoHl@~o9I69`39-c$MLX_ZYzs*+3}%1D6S%Rc5r zoK%>N!|S|azK15lh8UC0jGQVumf4p?3v8D~Md*~s;vM|HAyxBAzh28e4IWo;izoaB ze#{UVTT98sB-=G75)lL3U4ZRyrg)16)U^L(k2208E$k}HTyl82^oREF;e1;yh@prD#yguKQLH1^QDp8T&*Ti62m5-c;^#m5LQ!4m5W3M+G)I#=lJ=ke|$OTdAFz_ ztBz{S3A)ICEGsw88JH3)>oQ*%0Ceyf^OBa>qfKxEGBwbduKt8a&gr1&}H+kGKp>Y^iSX8z4*_yGrerT%*^y=+VBm6f2GQ``a{(^J7tq@zKMj=Bq z-(eT`-W4P=y6|lda>!O6N&ZZu*tWs^D^NZ=_IA@ZzIgg;`~*Y71Esa`7YMxAq9koj zL%~ixC-ry!rIoE6fWn@;t(~rC#Q|FEe5w{}1*p+U?|ngPQ$@1o3fOnt1_?RRx_9j>BEp00t8W|RRLF$RdJO(KTN z-c^bGzKcbe;_0SY=jhn z0ZFW+eJ?(}(_*Wlsgdx4S=qCYj^K8ld)nchFR%#XyqWqVpt-jCJV4b98BrIzv=v)v z86|AS{q6#NaV2^FtwU&06m2>cO=R;9r{(<~(Sue9s=MY*$cGw!c-wg_1R7=?I6YYP$Uuvn91NnShD zgPaTm=lt*xNGL7)`fxP8_(yU*k}Pr3m-|7LG1#VaIhawnqs$6YddNW0#IA=jGD~04 zONx-C3mYAzDb(1SGv&l&^Mz2YCRv*Y4m6J0a}SN4{!_ z9Nw$cj=4j3tgL$dy0n@E#W?I~ko%{*WC zuOg&u#|ne__UgiZ#RZ`oUrA(_^C6Kr2B8kKDBHW&scG(nAAQlz zspnnSxJ&RUf{>NB;-qy36Q{O!HE9|pA2YTtUNH8xleI-wBI3V^nnYFNd)HE8x|d-N zSbJ#tdVB`^4g|9Z35wk1^`X*zp3@yJj@^607e_CcnD2ezd%WENm7A;q4=!2MPQG6a za?M<5cTw`iDF$9sL54O4ja6zyyH&XFPzS!&x1~9N`HpV%;4Yiep`;QEiNdUy+1Rj< z7#Hk7*9pv3e7s6nW3I}=^_B5Md=E5)Hkt8B?kIpt2q#x0errn=gPwnp zm%ERhc2eDhRJW_+%vy;<(3`2|``|KNr@a(9rlC_ypE1Sy>1WhS+(|-SWSWfg zON4Pik&gJ#4p*$7W?bitiGZA07A~&98SkYz(AlDxeqyFm0I0x~*`KddFM7upR;4}TFoa2^Z3SnZ*iZ^dSP*jv z(;vcM)>1|x`cBFaJfaU%%0roGp=b(AUdMbgP+jnfTE}1N(Q6Ok+c54I84Y1J8))0X z^GsYH;k=M-^TbhINx93o$U+ela~%sANvmtck1ICcZ-VlY(ylMp_LdE$yb+s=uJYc= zcyIb*S=m3$E5C5v*Z;EMgW;~yRL>Npic>mXw%-E-NqZBtDMA63e zLfPZu@gJ5eSWyUZhR5(o_i^=M8pk5HK&q6tMD>`X?4 zj!OwGUhfy!abwoy1Rm9Ipd&vl;RRCN{Z2Q!6nxgK<*!RAPD7hDx4-?E;)EqLykz-p znM-!LdF!Q975Qs@@-p6^p9NF5Cyo2%l?{qM)Dm1j`-GpY&C(Mpm*$tMg7M%3xd!WS z9~CYPD1}i9aL~Mpp$tDPMKzmwi{^-yt-4$wS{&_F;Xd1v#}yxx$_z#o_)5<<5CDG8 z5uRZc`ccik@{Vmgn06o*Ep@#iU5;}-0J2BaT7wcx*MzI0U!Rp@dY7f&E!RgI$Qfqa zfED4ZOOB14tBdU3Wm(T>fVu@Qwj>JDU>a_p0b?~{yM!mOwp#LYj_MF_{gtB^zdN)% z@&}D9#4}v_1oMYuCU*X({viKSVFs+kv~ah+CSAf&4@Zd=i752G z_jZct+ZFK-s{FC>bo_PUrphSO{!4jcgjIqNM~_n}x}J`ZIvqRE>MYkCAa{H^1R1Zm zs!=rUGuE10rftoUN8(Pcuy`XVS9j0Bq{<_x&v+BG4PbdIDYgw>@V@uUJQBDx>$;M| z6a~gnBpZ==@TQMIVi>0fu~G#FH&$Q-pV`u?J8& zaY(JZK^xH^>KuL2b;IrTrsrue?LC33gY;BQ@yd#Fmw_(AZDomP&d;($W#095tkTY! zVL&DjvN8m@8Fb2r%Y-Ib=2`NBEL>}C&ebxk*(pe6YKj$m`PVai$jR%-A%p>bse2e= zdSd8RoF&(isZT~vEirb)#BqD9=iRXvF2nBgo08BNMwB3@hEZwX$@E&j2L;!z(k*q5R=?X=g_WZO%Nu(BPe z2X_Z*w7^x++N%G92k{EO;{n_}pZo59MxNlt9E4$1fs=$bwJbofpCjMh7C#nl2oE_hLs4RqTE#|+XIJ?Pn{HHFI(Y>ZnGq*}fTJpAY{0PTB5 zvHVG6*C2xa>qwT%c;NEME#X>u#Az&`TU|KdwO7zr9s z3%sVo*bP?WRc+%y&Z-yb0;Hm=r?W*V2B>w{i(^9-mr38ZN zmTw+>Psu9sd(~ZwXltI5vys4^BZsMF4D%gJc|gEQEa3^@r!RJJz(4lz$*)a&%KLXX z0%m0QtiJHP{{O22IbZwM^y0nPA~62ICxQNOCxAN?Bg1(gzPI7;LATo6XzMEg)fi%%fHR`U)0iI^1pcmTDgcj7Orz<$A;eDz5oe=v0cXiv zP~F&+@Uf5Mwnx>Hi7xBGguJ^I6lA?ppf$-XJ}qmMcr|5(5*om5>sqOqL=8Ms^-SjV zCZ)+pMTWs|E~o=5N)@`!WW5Mi%|JUXoFK2T4H-E~BH%xde^Lbe&g=be5qMt=?9@4#lEdfYa*qyA z&v{AjrBip%dx+YEHr&B6KUk${B0o><*^T!s zCz3XrN1^nK=$lS;3j{1>+Xar5j?L(I7WiQH*jvRBR;Q11@Tn7m~AFgY`P3Kw;|^vtq;XVzA#k!T=BV_T%LP>iXXHF#OKdow*HR zn$Pe*QiT6TLga5qpe_|ZMvYIPA2BvFhy}3xFO}m5%9heh9SBT+GS>+@_WaaV)lwVw zos&oQwRAF(^*Zn!Sk9OOD*o20%M`nq8e7KJgj(E3X<>P*_}e^(^CXdTbps3$(nh#s z$+JS9MSG0r=(mUN&5qgA4Rq&)%#Ir67*Y_^X;$Bfl2wqjqKXQDC>jTcwgazk^hk+- znb0t;HFU}qiY-P>4s<)qtpmU4>cZDx!!QGc6N$uv92uJdEQQm#x|t+A_3vtsvv1x9 z0340^Z5Qw_XhM_N0virA`QN64RjfMT)88oZPfz#%njZY;hGF-EQE7*YNoRi2|a#xh+pKy zjB{>^RbgV{4mBTEj93&x{KtPb5MFNjDe`Dtns&>5iNz%UxrDk9X37ezdD0(x zKg)dW(NKHxPH1JIddFKD!+r9VSj@&q5spJGZl9ibrEsBb1w}=4eZuPldstzsxKjLNR%|O0 zH8;V2q8ZMpb#4zZ?o1q4Xi2;fZ72IHFG@T=S0TAHDe++LlI+K-0mFIGjy@)HDG6ln zd4kV18-716G$0saEj8BV(1}y0pV(zj6RowU6scV|Tu{L(t}cmh>4iWw<9+S<*{!g^G~C(s@U2EzRZ)0IM)JUDfe!41OZB`_*d=_%)_EzL zetm*V@X)n$O=;Epu6!EaP;v8yFY}&z8*^QIBMv&BFeSl;X7}o}rbj#TD${eNDWQfI z8I?%6e*avH6tZu^omzeWysI-DH*Ff8!qVPFuM;@xD0dr&W609KroG%82=&NX>{YQ_ zQ`cxqc{H#(W%gKH^<={@zI9oSsB^fPGbmjN@B5`7Sei_}(K*A2f!D#w5Fb)(yjhL$ z1;t2_>Y3QwJ&~#!+shrJ^2XfrJd|^!Fk*>~C)1p3*wZt6bjgdR?(P4nIJ5uM={c3Y zRNFr10UX3}qI$AjfjYR!N*ZO@E$;8V{Py4`vc^%G{oq?0d%A5yZ?SbZd?U%n<5`ee z+;~WS4`)N`-}=7p-SOGJ9c3fCux3Q#r3u%X?X+cud87)HW6rGi6JY? zkbt+__KN!UIhu3TKOBDl7$9xpPkTUv zaEHft@2mIoRo(kzW_qTkrfR09PoLBMSyMxi@afB^XlQ7J%1UpvAIJH}mWGS**rOd0 zm!P2$qba|U(e=sP%W`q1z6j`hxbR=6?OzjQi6XtDH;QY1)%&G)camW`Vpv{l!YKmP z9U=s1VsxrtIZSDNabCtzL3tESp+LK5cS-(npK0Et;R-~Tz;T$ zO9J34xkz>a(#`{L&-_pmgReh)w1mN-mq!QC_J_j@%0tzvxqS?*F7+>HAK$-FO2VD` z_~!F_+W*c_R8CsDk-uA7awzHlDLn;#QrLbO^H5Glh|!a<`YZAn3My|u4_v#5gUXp% z<-jI%ch4@U|ALfK74d0kNbdLFUe)U`v6EsL1Tt^jO?kfy25Qr!tEHz7Cy>wJxN3h< z|M!BgH*UmrsNf7d7Gbe0cE?| zN|gqEl)AkY#-soFi|P%Y@Rb7OzL7E~2iaDso}7`?7$^nBr5vJL$?@-bfWt3A&^MQZ z)=Bm4Nz8%PB7a452=7r2tnNxy&qvzct2f`}+R+i7nqdP1&K2vMr_6y|XgySoL0ad+ zzW4LiTO)8$J&v~l_s)Lz^Wpe*TU)%QZPJTavxP$K50EvGTkXAs9jT1p4>p;^9x=I_ zcyDUAxgk1@XG!9&HG5oOkoW!yW!n{7`xV=g|H_IJQtD1+)7rdR(*D3C2~)iw{In4t z)~F4rd*SGlk9Bjgx0c_!gaX(3SCKEPV6v;khp6%4OBf8vRb#K+>Cy)6iihgKF?F zGIS_;YXlVZoO!GyW!OGGRxn+29nLh}++OyOgMk}&H9n($_Q5X*206@;%i2@PgdW9u zqPYX-xAHxY^L!3Ak|9&yTaS;$M*EY;Y6r{hk>N%pOihdVlU6y2XZP0g=#f+=F;gV_lU?bKX`W{Uq!r`gZ47-a=O@->g2-)v_bV0ZMY&lrCJ#8Yg9P~mQ_&9EyEIT zz_#j@f8c|OB~^+VYtUskT}VQu9{-8u_f}7S5+LN-CKCPPBZnQRg~gK%ApUA^^T0}J zkdC_^gG~cYw|*jJTg|Al@LF;Q+F|BVX1)HENO3>Gi@>04YIpgYMer$$4nLB@+9C5e zkfuDtrLH(R@kv-k{B_zT7hRIvAePN)HCWQ!b_JCh1j$*{#~QrCl%Dt!5CY7M-WP)$ z>{8MtEZvUqz99>~dFgPG2f~6DkS6ICiGILmqI&2VQuDX|TP@*X#I34QjN)&ml7Zfh z+Hh6|*a)Epj1jszv#cYRWP;m0W|;6&)TI6ti=6=)fHg5An}F}Kj7x>3l2I7u*tcWF z-2G&=AHlu^8Z4+vF)9%lhubkx!}HA9a3613xFgHD6vCu=wAn0wNfx6zf@Em{@+Ga# zX0X?0F?|IDS&2X2x}afqmP1fXMpu!s%RqtV?BXP37I_NQ++CtYHFK4M+Vt&`l92E^^acpo(f}(s%AsM_2F*>p%6HfEFrS-Ab_C*#RD|4dTjM z1Gj5;W4rIIu&dph_rQ6Zah|V9JRAKXvFS^NWIV0;-s!I;*BSO9a*26ei64iDf3{-s zr)x_Wd&mlj5zd}zH&!%YZECPyN{mF7QczMJt1sjIEVxyxH{zji<1uCf4`UsWe{ykD z$MgyNj2jK(F-k0IWFdor0G0>RjB6!)!lmy#lgs#$pH@?qXc)1QP-atkp3ID_SV7aW*j!jy~>{;~$&M_-jL+y3(8l zTUCz2fAXhES4W(opj^eoZNh|=C#*4>aRUXb=M>+6#`c70d}qVMwX>o=yYEQQRx5Eu zG5hjoDwC+${rN6FAs=?rHyvZ2@|t&eKh>p#DD6Zw@L1G_nf*8k)R|3=txA7T$>O&C zY#m*z9_>^}urH~~?ALQLo{*4)0aG)jMpIRlmQw_|dbOE`KGmrXA1LiwjRTlpH5Ai> zUvVe7POY|ClEV&jz?qo~9>0Cu`8}Iwf6Hl|1Bz@~T2j0Cqa%8s#=FrpvFgw2{_R2B z2T***Z8PB;I8%5(rGOmEcxlnqk3h)OGKFD7pA8R1M7Z~^d5Bc&me-NB#OGap%PE`O zjn!b^$;3BFb>fM}I~Q^gi4J%CM37B2ztc*V%#)m?DgNF*`3_xvTRBrqgJ;QbZt^8m zyFKWr90b1GYhDU;$|wBUofS*8=lN&l39I3vAW#%Itlf~m8$p<<(fMLvvezRwe|z#9 zKhuW=3`{L6z(=|oa$q-}nXId@u3$~;TAguiit=S*=l3Edw_nHEDsSf3aK{Fo zlnqE9%`7V)C&6c0sY*j0#5X3~K$%5o&s6nrs4!UmK|B#IX@_ zfrpcUc>0|6QTD- zx}85m+%FO8j2GXCoCrYEfy!<>)nNaP!71~$(@<(^yiq~#gY@Vey`a-9w+G~`ArZ8^c{{R zZ4U=Kan>f@BQj|N*JIkF%OT&DlFkIkT{*4VY`k3Fqh-oZcex8Vwzh1w;`cys|Ohq+pP2BQ@OXXUqI=XKXX4I$ZSd&Izm$t>U6a@yDWSRP~d z2x~RhN#jre)}kYyO3a2KJcGe#vHsIOo5s<1U}$|l3*Lxo2lcc2rr#|~#1 z8W%InnXn;Of=8B$VJu>Cb*dXya!Ob3>c+^8cTQW)`*l4i48X;Bhdnty;q*`sB;Ca_ ztiQiwc;0a{)Q=eQlKaV%SC1~DMz=Kcu`47xR~4mgbgq8Ar(auPZ0|Z8rbfTVreAb5 zH}4e^I(&L<+*pku1nS6P%D+kupoo@1_cU_@l9X{9Ojh~MrEd$oWQ-XjgH7KZRMZ|H zdpv(1LLB^|E??Pdm>Eb%&bJY6-C#=Tl;9O9M7_G>sE0FmpgDbqBgSve;f2=OhuM9% z<_~;c%9BFjTG&~!{0Y8bFOsM5Ndu7M{x(;z!+HL)6ZF6Ylx+G-9G<-IcfkxEX1i>5 z!W(f-V(ogTsNvWWak18uXKp$b z!2ni+m$djm5w3)r9O3CY)!dozA)e7Uj8HfL#)=uqbkK>P=%(dG`xl0*z<5 zE13S?ySOp8&4xQ zWD7Yi)Czvvg`$eM>Y{8zBaRFZ^icObT9pU-o^8V14o>9S%x_mI+s|vu(Xp(S=*M** z866#-+IKTv%(T(G>Vo4G@PPw#wh>J71<_bjvq| zha7l;jR;v$h#G*AQc@R%6DHsXJx3mNM65;>VcM#mMN(L$y9QlqW4_7 zSAyP62{mbmGkQxN#k)aWO!fzg*i}^e7#n`CpH38bTOswTG~Lc30weIjBh1kFBZ<(- z#39nWNuBGtY47e}2{3BinLlE<=qzKjEW4VI<2Ts_l2ipgvqV&FmN-!J_~fJgHc@$~B{E+F(1H9CP$(y> z=UDJ9&>cc&9KE_ugrH#SxIxq2aM8lU4|``Y#RFee9wpsTc21($T$NZnXUdpPP#vLb zXw+Xe&ne_Cosb#zenCMRmKrmRqRr9J%I)so=3qC=uV`QvxuCA&D37LnCFZ@UV`t0e z+r|HDNcpXFW`>yisv#%Cmx6#`#SYUw@aO84)5;N#I`&lk4edA^e{=?#&u-TjXWv4% z32(+Kaw?^Vlxru$cwc9fj`?-Z?r?IfQ&Ol{HE!pua+JsSQfvCx#n%{DVN+#S&z7b* zoHU^K;{Cx@1gt~ebt4dgq*2W9m&eESX_yU?2bEkEyuaRG+qB=|S1mkq(_?Y+VZ^F~ z86`UL$Wfh(K(D+G*qpmk)!5{y5x)!f-+d8#i8GXx-IFfJfgA}(EInLTn-jI%Ex3yn ztm<0qOr(Q{hnbnsd0j<{dXr)8*YsR2%CJ09zKV@Lj`&YMxrdLmt3McxHgg{?t#Wc) z{wbTZ-x29>h|B%>N=`4sF?S(9-2O|iki4)3|F^(!5kUSH<6auT&3l#yx!r z_PurILL3(epfZRch*mM^Kj`LZO(Qn@?s1oDEeDapZSkV zFM-Ba!+N_19Gv%bipk7IC?maECG+5ugrR+p+)^@+K}N}YOkY21tjYx*;-CBkwnC|W zt&rMwppxUb51F?!laiw z0$ZRZJ3bP|5u3n5BL6E3qJ42jh}l=OoKJ;yEJl+bFgE3*uxU63s?=%-GSy?I+8jz= z#Y^SN6s8TcoCioZw5Ni%q`DUG#1CD+^vAQRir(nVYHF`fn$3ySuu8roSM$A?CWkNo zF(?^K6zRO!`Z@$rA4PwDeu|Xt6g%)yXn2<_VN=g$@#<-wtzlsO}#U2V}aoA&fU{|Nj0e-eYY93*9!S2~QQILGiu zp??}f)b)X0>v2lT@}C<2cPRfc8`3gv9?mF(#33#t5JhLQcG`d)-X6DZ@RW(xaR&Y! z;q^8--__e_qdTY-=06#c5RIPg%%UY;v$WBYW)D)yJb%w^TQu;Su}8!>YVm_)7vvR_ z)TbjX#?{=eRzMAqdYS#3M4isv6Md7>V75PS^}Ye*zCJNWZ~%!c#4f&&bK%Hj=?5jgGLPr+ZY0U09f_Yq<_lB>qiKx(*&& z+nXP?{l7AqOW%Mp_5eXPO8D@x48{FfpWSygCO(WZhtKg*2#7Ct9VusT3l$Y}agqzR zo6wt-V!F?{JB8v4Z`G#uW>I%{NCm=!-%FA;`RzkyQq!_QKW8bvDbJ1R4gc^z(u}F8 zEnrse-C*Gp6&3bbrNh?eHcZ(5x{ZdIIv%{*kbl3b%gNUyv)T7VG@6vH)$FB^C7uJ0 zkDQ)(N9EmjJYGvKl|CX(id(JJzv6xss3JpD`t+XZQYt?wg=BPk3p;1$X$OkrgmrA3 zI)bnugOX*CEJtF7QjwV|Sgbhj(3t09L5Nc`hM#vottb%y$}g^Rd}CDPR`v4C)iIJ( zd%LHg;Meb=z261=r166@L)xvg8h_=--6rw(LNr0?eU`+DC(A9>l7(Z`!y5gHi98$74)}~%#4MZB zGZ6Z&R@N9tdU{$4yLUddo6Op(auRH-fayV+Vret3_PU@mVik9Mf@*|IrX3OY- zfL2cYcz@KG{cehN6{j=5(SmC_9{$2pZnBIw^i=6KMi~r88ZM>uGcfExJ`G!wX>#;W zUW0WD^AP~f0}7S{T~EVYlx7BPw?mckZ|}W)Ze<4%VIcMT1^@f+ge*^r#l~knSa`-O zI?Ys=XnS97>cbR^@x!Z932@yyIJj6|2=NGXjFPLZYUWoti?J5BwYn@5JJUcZ;PtO&_9(fg)9gturjX*)Op1alm%Ehh0n81gF8(38ysjTa!^U`S+6V>}_57 zz>U-+-hwlY&X)U|H)4I40x2=<;X8|MZ<#ZP*tnX6FGa`{^SSNovdH}?(Z!bB6Aspo zuc!}8yFwE1dJ3#!yCx%^GWh_(Gp6QE@5Bpk{P%psukf;;Vf@NDW-0*rj^r)t-n02N z`AhtZ!hZohVmwXH)4%ztX0rE5k=_3e1lLrI|0(qU{{f@#0TT`F;X!ocN91Fn4ErBi bjEOdDJZ|qjzbW@m?Mzu-<4u{YMacgEKOT&f literal 3709 zcmbW4S5y^B+P!#FC*8m3*kVudsB#4M$LMMj+B81)pNDaLU0TeI- zB27?A=)DL8lSl+aLb*A2t#7UK@IBmnA7*B+J+uE0v(}#Z{bQ{yjW4tCvCz@cT{bl_ zu%WGkw2{qpjy3~ySI*PXvE4B>(6tTB`=0mI8-%~sXGKuiO^8iX>o$-ny9|=Twya3K zz?2m86Ol59v<4c#P*CU9jRlcGWF%els4mq^af#+gtLMmlyWlP6?@M5@cONk^k zz*fX}1PB&G8Z)K>s+KuzD|!A)uS19-T-uF-+Bo+6q2#xl0tG*R1?7i?e8GjoU>PDz zm-ZQSKj;LB{#Dq)p<@kZ5|O&az>&^-j%kpUo?#=J4oT6Y)BXRqF*)n|v&IVLXPJp# zwLK8a9U>T?EuT^uBSwTUZ-S z&0l)iBGvo@j2IWzLfezf|Y2!lnIFx)QVrnnOLRMa%41HLJ{05J}ELa2CyPi6GTKIL3trZ)K7 zod7aLfK6$DrFt%idQd{`#I>Egt1~*+)3t)fquKM{1CLDX>(O}pN+eB=fhI@T(Vm_a zCaCk;-ANhknskcPzo8%5+S0;qWG34<^b>L92L&`ydJ*+Eoi@LxB>Gf4KR6od`+4S2 ziSxJOny6CZXCtEa!hd|CyLR}~v#9^Qbzr85hxbG9LnqOkh_)9;YAPD)s-ewiv71Ku ztfxvEW@h~@b>u*yw$kV2?cr0GEn9;%lzBjhe$d}~-j8+h4=bUU4ek2CThQ{QDcH_# zBi^JUgQlp0^(0*19ASpVV9wt_6(yrWwYcZ~Ll1Ni?AK5aMLLa5nV(;9?B6hN+MIc# zTVR~NG3rGALCD0Rr0MycIuB=IYVCkjO}Sd<6yETe@L;&#T>+sJ4GkT$A#BDIOe2&Z zT0@?#1ri07NiUqN1X{^8zhrCTxiH7x)?hPt?v>r=*@P$d)RBP!(*tjaci`c5X*m?{ zSpe}U7nDTW-@BWZ7koS$SH0~?1s$~4g;B_#xuxaO^t;}@TmCAh>)p`R?{}MXn>89Q zsa^M#>wFBPj7Lptey+(l@MSXp5eX_u#N1UOFA_VBd%Nwk#&PfS0s#I5&9!a@X<-=N z^~1#PRb1lyb~$?TOq~TTngjG*}|7ky1R}-F;5Z!d&b4M-M}#rZ?^q za7qp}Tm03vS-vw$L^1Yh&}cSf=YqXspohoH^w)=hch!WHwX$-qq7s4JN&ByyKG=ka zsvLe^Tgul8`i@7W?(3CnW=@h8d;`^xufa%LR(T5N`?KjLcDUTbKRiSMALB z_LgvAItpcef4zx)Aup6#y15kp2c}FK+o2Zj``x5M^R%6-z9Uz{`l|*&H&k#0BcOJ{ zIp9ORW^Tsm*{ z_`Z`>lTwLq+q-|=33B7|d7Rf2D*#L$Ow{;TY_;FYVcWV7M*-L;?Pw4;8aU7YBV=ygehlp%rv*>H3G}Gk zJC6JD(QG||PrMUSQMh-_U-(#F#^0BQjk+~9URql_p z;wjZ$9uG}WbkFq1bZuk|nK{{>7CL$PtM}u3)A!0}iMDsr{M+U_I!uc%ffn1k8bs;A(#IRjWieraal+r@CE-c67PFNreh7yejXkIJPH2;+Rhvz&P&;!N&bkfzS4Iay0Wjhrn6H2W>&2s`$B&hoPB}8j{{!2({)4xCuo4H94`US@2MaBnRm5&}oDN%6+``BWul zYW!4-zNNGC(!@miel>wWfPbIfodiAm19Q+IC_trB`T6)NAT``&y?p%q@e65;?5X{7*pQpU+bvj>aBGAv7ML1tzeg zkf)iVS)aJ$6`@`nc2Mp+3UjuA*(KCEIob$O4=5=<>6||B>}`pBHe{aa=hFO~PufVF z8q&KtV-y0zQs9ifFRM{3zkUruL!%~LJtiM7)9JmCu=hhV-gB!{gb>p(xVcQXm&3fj zF3MO(p!Ks|3)cNTIajmRmMorn6W>3&r=ZXy6esuF1eu?jc%|8_NslH!pq`%qtoPfV z?r@*%HCh=o7_7b;=bq8HEMez{@@~kkHby>>^~EK*zqI_*?zEpMm_w{dh|al1Vz(AXgXST)D2e_W`26Q*p$sCq_mcYbl@JdS_M4^2{>s?2 zuc;lhYA54UAL@au$t1`8jJ~z@9c7G12o5;@t@bbyZD)O{cQU@+eVnL-XUAOi{0q?r2^Mj( zF0&o?5%Oy+-Zmes`#yfI@ny&IqSfMN3LTF-EBdpwp?=ploX^sjdwK3C6qFLKpQV@n9EPsFPtP!N znmq1`do(KgnXL+qCJK28_IlqNI0Xlr%Vgf=wn}zj(@XQ%(DMlq57wrP+d4l8ej+xd ze=#>q*0eBn=kIHLrN`#dB7a+6H$sr4W({%_x6HFwe7LV z-ps5~!#cZNGVMHEUO}O0vA~=n5eI@n7;U!$~KH&etUxC;uH( zjW1Py^v-m0AU2LBKz!v{n>$pM8+@w)_N}ueejB|?$J+tJUf#ys)ADexg6na-HlIm4mPmipAz{XP^wvG)|SfkC$T|1@8(XPilH+#H?rv? zdxo)Ho&{3sZ{Ct$PV!pp_S�L!NHwpPsaYu+f?Q4pEAZu`Pl>`kS8svNJG zJm)j%K1Jn(n)K6%XikfS2h=g{}fzacbln!`(+ze zeEJ%v?g$Oj!@g3&FmF7N4Zz*$Y7xHLK9|9HH!=sP(b{q|<4lhY7g6Fk>gd~O`k9cK z96AL!(h-5E!Gc-kyQWs&@+mymY~HzOq;P;4yWG_m8l&hrOe>V#B4ZzH376oRw#YQg zbV{>Pe`hA#eGO>VY1xkLe*v|B7_#JgdOEtZvr_$TADW3|{M$XAr?V3>Hyctx0caUI NQ$tIGI=x58e*wonE>{2m diff --git a/test/componentFixtures/.screenshots/baseline/baseUI/Toggles/Light.png b/test/componentFixtures/.screenshots/baseline/baseUI/Toggles/Light.png index 292bea20ad6fec3b0ebffea232ea56ace0d44069..49c44de392fcae9c36a85b24817e68b05a5d08c6 100644 GIT binary patch literal 7030 zcmbW6Rag|>*2d|fODQSo8V~_#8M>vL0frvBks3mjkP>Mr0Ridm25E+o?iT49VhDx9 z|2fZdzN_!zoQu8pd$n)&TJKuFy`r@=l!)-3;iI9U5veH4>pY&zk1HJ)<8enjBP~Zm zBSlk@m(lafI?N7nrrq%$Tq9o5K8kno@Xp-&^2v2z3B2<0_TH$3sc1hP$XpxKpO^Z3 zQQnEH0S;t2((`tjaF8z+K2p4JoKjPGg`VB`)JhAg#Eh2l)oSY_%~vOhte7J`w`r|J zm7Y-&at%M|*a720pps6J^YARmh!ooi0H<7{^JK;A?OI?C>h)RY?P=gi2Y?j!)tP0e z^mjs5)%W|-`SRb1|0fY2$2xM-B}&zCvHyS{0=B#BVh07d-@(=n7YIpdKN7Kwgup!b zZgSn|e3rXzk{FHc(pp5;I!;HNPSE+Iyj$|F1*>JEI{)lTql(k2lyRLUAuVqYw++#) zK&Lbg|C^EJ6g4W8%S!FtCY^MBT4NM)aXALT z7LpNkJZYx4O`mUleq2}F#>Yq>u-Ehg_QKEhZlSJC1XDiHA(FESZWiDXFXRhu@!Qek z>M#c0A9uZ%FsM2JXG<;4?yncaA&@0k$%SIsQp1_in;L`YqYx&63Z+z;t;Ka8O3>Y3P0;IH+56zB&a|JVMRq=%r*(dO{curN6$LSC7Di?5oLOr|IOrm>@Y{aDb67C~P-75q z05ZS!Fz_qBE@QMHmHHcMNk7TDIbJQS&D{`KS67zTO6=LDn{xzC%ICgU+4ezuV_)2)2nOt@QawLqdlvf>sObTN)=d89>Zcy zH;&<>;tBaX;_5~u>~iE{hIhOY4p*O-@fB;5e*yP7lsH^iK1ba$iOT)WL?r#<5MTVv z<5Y#XzarWs$Yr6|d>A^r=tXq?Im(6kCl2I3&_PM&)_Hv?zzRuUB)TJoKT@nmUUgg$ zplH`#UoYEh-rLOCyH$DYy`4CryMy;xBc#agE&~y-u}Enni7wgJG+hJdgUly7ori9C{tWFegfE{xT|l;V z4^S1E-wjZmU`G-4N6_fX_GYX-oK8B8J_NIlCEhiy1^&3F`6qo@wV9=!e{G^6E5(c^ z&lCT|`M(GQmJyLvzpaX<)zTT)6OW<^sIbf8MTsU1|2gTXU4MSiIb38d`0nV@=BV(G z8{_ia^WJTcD5phj*KN)*LE_tYaspEel)u`jaw^SZmq(Z|c|exnhjcmI;SJi`ioQql zKAr*5M|#DYy$MRq+|5aP=Sk6iUn~x4I!KH>irRgT76mAb0m9}Qc^3GDq;|Poxs#3M z%m`!PiFtgHpM-Kw=$n{*w^2G- zu#J*p^VS`w1kg|6vWCo1Hb2OxLYONv6~bMCjFdg*E^2LI+ATwEAW1BK%Z`U!ks9jN zHMsSS>X%WCsMs?NoB0fUyXxiy?Ax@-;0k_B}sk zjBHm;i!=rXS^wK#G9a}`KDv_}kjVCMUKnJRuG76-t;|`EI4ni3dq|`0Zs-qL#gl{Q zBO}{8x#D*RUAH?NsE|B(gp>#qUW*ZiIjRN?`})VQmW`-tJpJBhgzFpN**p2g*h=hio^s ztD1uD|1kajt^J;r(jPsY?%15X?9`br4WH=a{Jclz{VX7#iMLaF!v-o_fBTo1nt57^ zi$_3eH*WlMs#I4bhG(*6)$?o%peox>`Jc30KRfukMx}Q{^}bNBlA%!-8I4dW^e&%x zkx8%D?l}u-VOZOPlMR$i;Wol)+aoJ*)50HiVu|(Q$)@#V+2;WqSmA|pCq**o5u`}` zQ%UjI1Caq}9VgpHioJ&9-9F}80J1Dw6pBgC8P8as&{Q5KW+QnxEuw*Ed3Jr5a@Vrt z6J_6#L3ncf`NThN!s9TxU}DhD>nbx6(Cg3$6&bhC$~wyyFC6N(tNYo987BX(f#IN2 z#?e-o(wc1mfL#U#WTs36k_=dj+0Xk=eVEYsJE-}J$~oSgV+%wLcW2AI_br{)7AoxH zAHxOkz;V@D{H!9XBN2?c$90OyXQEE8S38EPO@OD^klMhYzuquRb;ENO7%ES9h1X+2 z5hr4D&+3H9q^!_|QXpx#mMv3`xYl5^HcNhyp54#D>1GUCs(clJm~->_`kpkF%?_xP z?lYQN_Oy@{oRg?-N<{FUgTmr=HG1da;&dwk}htk-7w*L~f&D$x=FW?o**>1LKFl}15NxK0W_Q0h^+tFU( zcr|fR+TVPf@=KatXM=Zl)Ouz+R|-Dm*8gg8!v@^(3i<#6Cc9cD2k}+O8<*)94kTKp z8x-_h){~7EDZcAoIH>leF-74PU!D13RyF7_*L^Zi z_<|&kZWY*P|Y48b=SS6dAzpBIk7pWsVRBc zYY}ugJjf^j`5L$Em><63S9bfd*}5b+8v-XHia5t|FE>rDh89BA2q zS_1O}>7LXkDp%4_>J`HI$wsT+&8Sc=2))Qy78cX&#Z}#eH{i?a&7ONKa4V>|1|ANB zU=PtxG?gD?dEy0W$|xesZ+{MT1p2!hZevQ(VzSOl?4(t^lit;pxG|#hJ3`p1a8kYW zk`2$!5+1i!hg@OB~J&fN7n=Y9xi z8#LYAQUby1(}=w3D`qr9MZ=LjzuHTBezUQYBy$sFDhIiCV)T_}ZYfM!2`~Fq z`Xpm(V9mGN99myA(Jon=h;sk<{e&O*p`{(`i@kyzsW_M$FXeZI7R9x!tvP))MV7oeM(GEpJ$MUMnF-7lPrs=)#|by&dn-G$6~dfF{+rp)$- zgp^-!5xu4B0*E;@B3sb3$R0gNlz-}=UXUH5Y^=7Wg!x8!_tQSR_&KR5D)*kr2*j#2 ztboxnt8Y|HlFGV2`&UTsq(+*HoZw1B+IT&?g8`HhRqqO5smKWqA}8+pg@Y4wq7FIZ z;CyBQ`QX|j)B{S5YD1H_gZ~mpdr6$#b5v7(m|LHY%Oyb`8OUcn5mkL5c<;Z>uh`dO3Kx@OTO;&LpLN4WW&W`Tr+gyFQUon3?_b*MBjfg*&dprF87p=&fE z&hVnm6U(YUf4Saa>Y%EtQ{8N~s}-jW4a;hwd?1$`HcVAh`Fu+65fx8%pX&k0*<^j5 zYcv0s0$KcsnZGonwdftMim{Ni0lEcp0N=~Q`9_ze`0PMp!W_x8biNr~Z+}ndPW3%MH-CDHI%V6^8(RJw+a)gHY{8|r zi?heDq?JiiZD#Y=?$6F_iN?pa5MopNQ)kTb2qe;M zZ(ndh60h-!+ocXVlR1n07=4-JMI^Gv4Qh289N!pTN~!;_-6oYvt-_(y-WHHd{|u@{ zg@#7J_|IR!DrxK?QZz{VMm<_6+rn|)WAx1ozKR>kvXf=!_4Kt@psx^bQ%b^Hx+pKO zr;WQNB0k4#HR%zE$|#C9`;fnVFAixnRz)`xVd9a*LmZ{{2ra9PVzme}P)uL+FR>E_ ze?NUto~;zj)jij9JkXb(`k9J)nxQ%SoJ{hg59f-WAz^EN$O#uG0m|N3p${?6Hk?A@ z85UsX&w686k(=*&_Ra&#ubsI?>D+RrCiRAB(}xa#Inw;=!do|Ip(6QU@roYxEs7i- zZeAY$M%;%de&(MvEh>5uxao;`28Xm9fG2M-?`jB2ray!#jJ&S|u(U}s5bns29Ft)E zg(aus`G@bxx=>`ADAEa@Z6p~FA0lr8N<4)Ho)Q8g3xKX3cYk29$pj=y#Z_+VXM3?! zDv>YN*GAEVH;Gu04ci}x?glpdH4yXij(=h^2W-N}v<&ji?jfQV6wJnJ zx3%75B)KKj_PsR@Z_v=O-e9Z_8zS)50157#RNC8qV4G}6f9OAYdBKPjd+Mc}IoMYl zrpRCB;SaXbg&2Rj+R9UUdd?W5O?O&Un|~s^B|pT2vjDU>+IMty=E@!4ejg{u@W8U- zX)&KK+3-!~_eUe!qU86ZX)z+Jn6;qoCy37bpIZq{!!Idzspm4HqieoaAyl_y`6%!R zFOF#(vVostTlO9bnK(shOP`MBXPt;v;wqo}7}BLP(1Z&~^!EhenhM}(+2nDTDSVd+ zub7hwlgy-Y+QuMwHC(Qd#Ofj-bY~gx5sg9yujm*F?U>lEVQ!PGbk-e}6aML(^)!}$ z|0N+q;Cbjee!ivX+`3(^hRoF-*kE3CWs-^$C!?+;aUJT}S{)I|ypJlL-gPhq{Q>+! zSCib0v$Hbh&~5sg$UAOQQT2UDZbt0Z4b$##F(fr%#uyF_WDsE5^Qma_iYl~nd9 zE^VJ}!4H2SwP!Y!u|(UNC4$DlB5IEM+cQ4mh&^|8AkWR$Jr6!gh=^auFSG_6QK?HMkaEC_UD$haThMFj>=EUbrw__=apsT?Z(@&dL|MUF7rE^ zoXzNM$Ot#pS%iNF&A7IDKt&O|1fOCZMelyyGuOaRCIj1z)p_&7xEqaoHI7WQZz%Ab zzIN4l1mGXL*zNmk=X|y zUu;jcOjf4}4}qDuuZpK9HQs{8?Dmu$gEbVsydDf{+$Pi!QdDv$Oo%9$fT-Ri39DNS zogC+!lrljhumlyp_qXEMYK8zuH|sN;yHHlNW(*W0>K?3=&q8T?B{slKB4p!X`d&P_ z<0&6t1mR;TVSl(D$^J(7u|oWx=?~>TBL7bbaom|O`NtZdoc!O4|6Cdw@Rv(%uP4Vv z!nETFg<6SAOvRFy>k(hd37~5jg~vm=O@Cg@%2|hA_DjsNQxMFliWViwp+{97{$_52 zNdCu)6|5X>DNM1^0KGpWNH=8$BXdyvh*BqOgXfJYf3wC9uDY6vRLZEfm;eR5dR93y zoiN^Mi`z9uSzefOTN#yc zHvJ=gP(8W0H@rtr#_baO51*iNWTcg#S~`+*HcY{Fwfi&G`h$WWXlS(7%@n&B9w%}^ z;WYdWnpD9ys44cw&$?@p|6ylfPFF=7q8HdC{WkeGa#&X93aIBZJ z1w9R!9;2*;sYC;FVAQoJ)&S_v2047Sk6RH<+VZ>gojhm2cM8ufnx1;ppN!TQ1#rhA z41nC3UrZXaVq1d$egsjgi4+;aK>W3}C6zv^%0{sRFc=d9$TtEE7g2WJnz=|Kr>VtceU+X!8YxDEb%Sgf7hiJUr} zQWJ=A?AKFY_9d5&UP|i)VySVVgG;6yxA4FYSx^5I zC-2FNiA^}wcnjsW`}~=+a(LCvx&Ub*$X%%`mb3MgQN{3Y4~fjgH__pOIC zSsAct7_(pa*b_XmRz9oG*W|v-tupg*db5Cw_6whoz~8TV`^XBv0-w*)5WysWh>*yD zOLe-=`|hGi$)IOHs8gKcXy16Y4KLi_y(QyQt_^O8aix;N#+J1{&abDs&e-H-PK>Pl zn*Qb&R#xgOP7aSxn(UtL(hla(zD`ngMUmX_vPVn`{ZN`^TLp@%82>HmzbX$4W%Mio zCnIsm<9~mo%ksBiY;qv7W1-_4kD_Kv5J=HyFCNvvFG+N_a{RJYG?kdROK9iYG8S{7 zAZKi5kQGO$GRVBnv5nu>yke5EYp-M;|HQhz4^ literal 3658 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 TAIq$>fFcZ@u6{1-oD!M<-uoAL literal 17805 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 LYBEr%&%yr(P*CeH literal 6017 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 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/InsertionView/Light.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/InsertionView/Light.png index 33fc14473ddfbda38cc96f328cbe4c336c2b7d30..a6fd87499a81477d52b3e207fb9a30918df5e2a6 100644 GIT binary patch literal 11067 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 literal 6038 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 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Dark.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Dark.png index be09882bf5af0c9295de28d100ea12c6ce0d687d..52a2280560a1d43e2683e48857af53a383b7d035 100644 GIT binary patch literal 11036 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 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Light.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/SideBySideView/Light.png index 76ad59e3288baf2203d49b90cceec11f6ad1af3f..65169b87a1126249c494c174b15c529963ea918c 100644 GIT binary patch literal 10906 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 diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Dark.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Dark.png index 67f5fa6685918e1615612986ec7ad3f64bf1fc00..297cb38eade940352843f14a7f683e72af1665cb 100644 GIT binary patch literal 10179 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 Q-3mZaR!yc{`g7p_0zB9g2><{9 literal 5570 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 NbTkb$s?{Cd{}*IT-s1oO diff --git a/test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Light.png b/test/componentFixtures/.screenshots/baseline/inlineCompletions/WordReplacementView/Light.png index 085a5afe7f18a3ae21ccf6d988cf0ea3c4924015..3d564e02878d555edc855f96d804139e370cee1b 100644 GIT binary patch literal 10049 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 literal 5618 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 Date: Fri, 20 Feb 2026 18:51:54 +0100 Subject: [PATCH 20/37] Removes animated progress bar --- .../test/browser/componentFixtures/baseUI.fixture.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts index 21501b6c2361d..134677051149a 100644 --- a/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts @@ -453,11 +453,6 @@ function renderProgressBars({ container, disposableStore }: ComponentFixtureCont return barContainer; }; - // Infinite progress - const infiniteSection = createSection('Infinite Progress (loading...)'); - const infiniteBar = disposableStore.add(new ProgressBar(infiniteSection, themedProgressBarOptions)); - infiniteBar.infinite(); - // Discrete progress - 30% const progress30Section = createSection('Discrete Progress - 30%'); const progress30Bar = disposableStore.add(new ProgressBar(progress30Section, themedProgressBarOptions)); From 5719a9a687ee925db35eebe0c1df0b44018b667a Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 20 Feb 2026 18:54:44 +0100 Subject: [PATCH 21/37] fixes ci --- .../test/browser/componentFixtures/baseUI.fixture.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts index 134677051149a..19579a21ab1a7 100644 --- a/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/baseUI.fixture.ts @@ -282,12 +282,6 @@ function renderInputBoxes({ container, disposableStore }: ComponentFixtureContex container.style.gap = '16px'; container.style.width = '350px'; - // Normal input - const normalInput = disposableStore.add(new InputBox(container, undefined, { - placeholder: 'Enter search query...', - inputBoxStyles: themedInputBoxStyles, - })); - // Input with value const filledInput = disposableStore.add(new InputBox(container, undefined, { placeholder: 'File path', From e8f4c461f1441bab17f8b44bd2b167b3adf69854 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 20 Feb 2026 19:14:25 +0100 Subject: [PATCH 22/37] updates screenshot-test.yml --- .github/workflows/screenshot-test.yml | 53 ++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/.github/workflows/screenshot-test.yml b/.github/workflows/screenshot-test.yml index 5499ae556c1f8..b49adbdf6396e 100644 --- a/.github/workflows/screenshot-test.yml +++ b/.github/workflows/screenshot-test.yml @@ -10,6 +10,8 @@ on: permissions: contents: read + pull-requests: write + statuses: write concurrency: group: screenshots-${{ github.event.pull_request.number || github.sha }} @@ -63,18 +65,57 @@ jobs: test/componentFixtures/.screenshots/report.json test/componentFixtures/.screenshots/report.md + - name: Set status + id: status + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + REPORT="test/componentFixtures/.screenshots/report.json" + if [ -f "$REPORT" ]; then + CHANGED=$(node -e "const r = require('./$REPORT'); console.log(r.summary.added + r.summary.removed + r.summary.changed)") + STATUS_TEXT="${CHANGED} screenshots changed" + else + STATUS_TEXT="Screenshots match" + fi + + SHA="${{ github.event.pull_request.head.sha || github.sha }}" + gh api "repos/${{ github.repository }}/statuses/$SHA" \ + -f state=success \ + -f description="$STATUS_TEXT" \ + -f context="screenshots" + - name: Post summary - if: always() run: | if [ -f test/componentFixtures/.screenshots/report.md ]; then cat test/componentFixtures/.screenshots/report.md >> $GITHUB_STEP_SUMMARY - elif [ "${{ steps.compare.outcome }}" == "success" ]; then + else echo "## Screenshots ✅" >> $GITHUB_STEP_SUMMARY echo "No visual changes detected." >> $GITHUB_STEP_SUMMARY fi - - name: Fail if screenshots changed - if: steps.compare.outcome == 'failure' + - name: Post PR comment + if: github.event_name == 'pull_request' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - echo "::error::Screenshot differences detected. Download the 'screenshot-diff' artifact to review changes." - exit 1 + COMMENT_MARKER="" + BODY="$COMMENT_MARKER"$'\n' + + if [ -f test/componentFixtures/.screenshots/report.md ]; then + BODY+=$(cat test/componentFixtures/.screenshots/report.md) + BODY+=$'\n\n' + BODY+="📦 [Download the \`screenshot-diff\` artifact](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) to review images." + else + BODY+="## Screenshots ✅"$'\n\n' + BODY+="No visual changes detected." + fi + + # Find existing comment + EXISTING=$(gh api "repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" \ + --paginate --jq ".[] | select(.body | startswith(\"$COMMENT_MARKER\")) | .id" | head -1) + + if [ -n "$EXISTING" ]; then + gh api "repos/${{ github.repository }}/issues/comments/$EXISTING" -X PATCH -f body="$BODY" + else + gh pr comment "${{ github.event.pull_request.number }}" --body "$BODY" + fi From a9c01a08a394df3c4141754ccef46fed875bb43a Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 20 Feb 2026 19:30:08 +0100 Subject: [PATCH 23/37] updates github action check --- .github/workflows/screenshot-test.yml | 74 ++++++++++++++------------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/.github/workflows/screenshot-test.yml b/.github/workflows/screenshot-test.yml index b49adbdf6396e..e5a91228a1419 100644 --- a/.github/workflows/screenshot-test.yml +++ b/.github/workflows/screenshot-test.yml @@ -11,7 +11,7 @@ on: permissions: contents: read pull-requests: write - statuses: write + checks: write concurrency: group: screenshots-${{ github.event.pull_request.number || github.sha }} @@ -65,24 +65,28 @@ jobs: test/componentFixtures/.screenshots/report.json test/componentFixtures/.screenshots/report.md - - name: Set status - id: status + - name: Set check title env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | REPORT="test/componentFixtures/.screenshots/report.json" if [ -f "$REPORT" ]; then CHANGED=$(node -e "const r = require('./$REPORT'); console.log(r.summary.added + r.summary.removed + r.summary.changed)") - STATUS_TEXT="${CHANGED} screenshots changed" + TITLE="${CHANGED} screenshots changed" else - STATUS_TEXT="Screenshots match" + TITLE="Screenshots match" fi SHA="${{ github.event.pull_request.head.sha || github.sha }}" - gh api "repos/${{ github.repository }}/statuses/$SHA" \ - -f state=success \ - -f description="$STATUS_TEXT" \ - -f context="screenshots" + CHECK_RUN_ID=$(gh api "repos/${{ github.repository }}/commits/$SHA/check-runs" \ + --jq '.check_runs[] | select(.name == "screenshots") | .id') + + if [ -n "$CHECK_RUN_ID" ]; then + gh api "repos/${{ github.repository }}/check-runs/$CHECK_RUN_ID" \ + -X PATCH --input - <> $GITHUB_STEP_SUMMARY fi - - name: Post PR comment - if: github.event_name == 'pull_request' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - COMMENT_MARKER="" - BODY="$COMMENT_MARKER"$'\n' - - if [ -f test/componentFixtures/.screenshots/report.md ]; then - BODY+=$(cat test/componentFixtures/.screenshots/report.md) - BODY+=$'\n\n' - BODY+="📦 [Download the \`screenshot-diff\` artifact](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) to review images." - else - BODY+="## Screenshots ✅"$'\n\n' - BODY+="No visual changes detected." - fi - - # Find existing comment - EXISTING=$(gh api "repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" \ - --paginate --jq ".[] | select(.body | startswith(\"$COMMENT_MARKER\")) | .id" | head -1) - - if [ -n "$EXISTING" ]; then - gh api "repos/${{ github.repository }}/issues/comments/$EXISTING" -X PATCH -f body="$BODY" - else - gh pr comment "${{ github.event.pull_request.number }}" --body "$BODY" - fi + # - name: Post PR comment + # if: github.event_name == 'pull_request' + # env: + # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # run: | + # COMMENT_MARKER="" + # BODY="$COMMENT_MARKER"$'\n' + # + # if [ -f test/componentFixtures/.screenshots/report.md ]; then + # BODY+=$(cat test/componentFixtures/.screenshots/report.md) + # BODY+=$'\n\n' + # BODY+="📦 [Download the \`screenshot-diff\` artifact](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) to review images." + # else + # BODY+="## Screenshots ✅"$'\n\n' + # BODY+="No visual changes detected." + # fi + # + # # Find existing comment + # EXISTING=$(gh api "repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" \ + # --paginate --jq ".[] | select(.body | startswith(\"$COMMENT_MARKER\")) | .id" | head -1) + # + # if [ -n "$EXISTING" ]; then + # gh api "repos/${{ github.repository }}/issues/comments/$EXISTING" -X PATCH -f body="$BODY" + # else + # gh pr comment "${{ github.event.pull_request.number }}" --body "$BODY" + # fi From f186967cb88a4806fab1e4a82f37a312a23865d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Ruales?= <1588988+jruales@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:13:09 -0800 Subject: [PATCH 24/37] Browser: Make toolbar icons align (#296454) --- .../contrib/browserView/electron-browser/media/browser.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/workbench/contrib/browserView/electron-browser/media/browser.css b/src/vs/workbench/contrib/browserView/electron-browser/media/browser.css index 0a1ea3099ab1a..e040c1a17416e 100644 --- a/src/vs/workbench/contrib/browserView/electron-browser/media/browser.css +++ b/src/vs/workbench/contrib/browserView/electron-browser/media/browser.css @@ -27,6 +27,7 @@ .actions-container { gap: 4px; + margin-right: 4px; } } From daddf4fcaee2dd30ee8d170d480b7b0ff6353a1f Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Fri, 20 Feb 2026 20:30:59 +0100 Subject: [PATCH 25/37] Feat: Show branch picker in core (#296559) * refactor: simplify interface declarations and improve method naming in NewChatWidget * refactor: update local mode handling in NewChatWidget to support folder isolation * refactor: implement SessionTargetPicker for managing session targets and isolation modes * refactor: integrate IsolationModePicker into NewChatWidget for improved session management * refactor: consolidate IsolationModePicker and SessionTargetPicker imports in NewChatViewPane * refactor: remove isolation mode pickers from NewChatWidget and update extension picker logic for Cloud target only * refactor: simplify folder change handling in NewChatWidget and remove unused notification logic * refactor: introduce IPendingSession interface and implement Local/RemotePendingSession classes for session management * refactor: replace IPendingSession with INewSession for improved session management * refactor: move pending session creation to SessionsManagementService for better session handling * refactor: update session creation to return a promise and enhance session handling * Update customization: sessions.json * fix: correct import path for new session classes in sessionsManagementService * remove * fix: update session target terminology from 'Folder' to 'Local' in SessionTargetPicker * feat: add branch selection functionality to new chat session * feat: enhance branch picker UI and functionality in chat session * feat: enhance repository opening logic in NewChatWidget * refactor: simplify repository opening logic in NewChatWidget * feat: implement BranchPicker component for selecting git branches * feat: improve session management in NewChatWidget and RemoteNewSession * feat: enhance BranchPicker to use a toggleable section for Copilot worktree branches * feat: add option handling to NewSession interface and implement in RemoteNewSession * feat: update BranchPicker to use a toggleable section for worktree branches and improve filtering options * feat: select the first non-worktree branch by default in BranchPicker * feat: refine BranchPicker to select main or master branch by default and streamline worktree filtering * feat: enhance LocalNewSession to notify session option changes and include service dependencies * feat: update INewSession to allow string values in setOption and refactor LocalNewSession to use setOption for notifying changes * feat: refactor session request handling to use INewSession and simplify sendRequestForNewSession method * feat: add modelId to INewSession interface and implement modelId handling in NewChatWidget * feat: update session management to support new session options and refactor sendRequestForNewSession method * feat: enhance session management by adding query and attached context handling in NewSession and SessionsManagementService * feat: update default isolation mode in IsolationModePicker to 'folder' * feat: enhance session management by clearing sent sessions in NewChatWidget and SessionsManagementService * feat: update LocalNewSession to set isolation mode to 'folder' and clear branch on repo URI change * feat: enhance LocalNewSession to handle string and object types in setOption method * feat: refactor session creation in NewChatWidget to use createNewSession method * feat: simplify session management by removing unused session map in NewChatWidget * feat: initialize repoUri in LocalNewSession constructor only if provided * feat: update NewChatWidget to open repository based on session's repoUri * feat: improve folder change handling in NewChatWidget to open repository and render extension pickers * feat: enhance session change handling in NewChatWidget and NewSession to support specific change types * feat: add context change handling to render extension pickers in NewChatWidget * feat: update BranchPicker and IsolationModePicker to handle disabled states based on repository availability * feat: update IsolationModePicker to handle disabled state based on repository availability * feat: add disabled state styles for session chat picker slot * feat: update BranchPicker to toggle disabled state on slot element * feat: update NewChatWidget to toggle branch picker visibility based on isolation mode * feat: update isolation mode references from 'folder' to 'workspace' * feat: disable curated models display in NewChatWidget --- .../contrib/chat/browser/branchPicker.ts | 197 ++++++ .../contrib/chat/browser/folderPicker.ts | 11 + .../chat/browser/media/chatWelcomePart.css | 11 + .../contrib/chat/browser/newChatViewPane.ts | 634 ++++-------------- .../contrib/chat/browser/newSession.ts | 221 ++++++ .../chat/browser/sessionTargetPicker.ts | 274 ++++++++ .../browser/sessionsManagementService.ts | 83 ++- 7 files changed, 893 insertions(+), 538 deletions(-) create mode 100644 src/vs/sessions/contrib/chat/browser/branchPicker.ts create mode 100644 src/vs/sessions/contrib/chat/browser/newSession.ts create mode 100644 src/vs/sessions/contrib/chat/browser/sessionTargetPicker.ts diff --git a/src/vs/sessions/contrib/chat/browser/branchPicker.ts b/src/vs/sessions/contrib/chat/browser/branchPicker.ts new file mode 100644 index 0000000000000..3865ca57750f0 --- /dev/null +++ b/src/vs/sessions/contrib/chat/browser/branchPicker.ts @@ -0,0 +1,197 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as dom from '../../../../base/browser/dom.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { localize } from '../../../../nls.js'; +import { IActionWidgetService } from '../../../../platform/actionWidget/browser/actionWidget.js'; +import { ActionListItemKind, IActionListDelegate, IActionListItem } from '../../../../platform/actionWidget/browser/actionList.js'; +import { IGitRepository } from '../../../../workbench/contrib/git/common/gitService.js'; +import { renderIcon } from '../../../../base/browser/ui/iconLabel/iconLabels.js'; +import { INewSession } from './newSession.js'; + +const COPILOT_WORKTREE_PATTERN = 'copilot-worktree-'; +const FILTER_THRESHOLD = 10; + +interface IBranchItem { + readonly name: string; +} + +/** + * A self-contained widget for selecting a git branch. + * Uses `IGitRepository.getRefs` to list local branches. + * Copilot worktree branches are shown in a collapsible section; + * other branches are listed without a section header. + * Writes the selected branch to the new session object. + */ +export class BranchPicker extends Disposable { + + private _selectedBranch: string | undefined; + private _newSession: INewSession | undefined; + private _branches: string[] = []; + + private readonly _onDidChange = this._register(new Emitter()); + readonly onDidChange: Event = this._onDidChange.event; + + private readonly _renderDisposables = this._register(new DisposableStore()); + private _slotElement: HTMLElement | undefined; + private _triggerElement: HTMLElement | undefined; + + get selectedBranch(): string | undefined { + return this._selectedBranch; + } + + constructor( + @IActionWidgetService private readonly actionWidgetService: IActionWidgetService, + ) { + super(); + } + + /** + * Sets the new session that this picker writes to. + */ + setNewSession(session: INewSession | undefined): void { + this._newSession = session; + } + + /** + * Sets the git repository and loads its branches. + * When undefined, the picker is shown disabled. + */ + async setRepository(repository: IGitRepository | undefined): Promise { + this._branches = []; + this._selectedBranch = undefined; + + if (!repository) { + this._newSession?.setBranch(undefined); + this._updateTriggerLabel(); + return; + } + + const refs = await repository.getRefs({ pattern: 'refs/heads' }); + this._branches = refs + .map(ref => ref.name) + .filter((name): name is string => !!name) + .filter(name => !name.includes(COPILOT_WORKTREE_PATTERN)); + + // Select main, master, or the first branch by default + const defaultBranch = this._branches.find(b => b === 'main') + ?? this._branches.find(b => b === 'master') + ?? this._branches[0]; + if (defaultBranch) { + this._selectBranch(defaultBranch); + } + + this._updateTriggerLabel(); + } + + /** + * Renders the branch picker trigger into the given container. + */ + render(container: HTMLElement): void { + this._renderDisposables.clear(); + + const slot = dom.append(container, dom.$('.sessions-chat-picker-slot')); + this._slotElement = slot; + this._renderDisposables.add({ dispose: () => slot.remove() }); + + const trigger = dom.append(slot, dom.$('a.action-label')); + trigger.tabIndex = 0; + trigger.role = 'button'; + this._triggerElement = trigger; + this._updateTriggerLabel(); + + this._renderDisposables.add(dom.addDisposableListener(trigger, dom.EventType.CLICK, (e) => { + dom.EventHelper.stop(e, true); + this.showPicker(); + })); + + this._renderDisposables.add(dom.addDisposableListener(trigger, dom.EventType.KEY_DOWN, (e) => { + if (e.key === 'Enter' || e.key === ' ') { + dom.EventHelper.stop(e, true); + this.showPicker(); + } + })); + } + + /** + * Shows or hides the picker. + */ + setVisible(visible: boolean): void { + if (this._slotElement) { + this._slotElement.style.display = visible ? '' : 'none'; + } + } + + /** + * Shows the branch picker dropdown anchored to the trigger element. + */ + showPicker(): void { + if (!this._triggerElement || this.actionWidgetService.isVisible || this._branches.length === 0) { + return; + } + + const items = this._buildItems(); + const triggerElement = this._triggerElement; + const delegate: IActionListDelegate = { + onSelect: (item) => { + this.actionWidgetService.hide(); + this._selectBranch(item.name); + }, + onHide: () => { triggerElement.focus(); }, + }; + + const totalActions = items.filter(i => i.kind === ActionListItemKind.Action).length; + + this.actionWidgetService.show( + 'branchPicker', + false, + items, + delegate, + this._triggerElement, + undefined, + [], + { + getAriaLabel: (item) => item.label ?? '', + getWidgetAriaLabel: () => localize('branchPicker.ariaLabel', "Branch Picker"), + }, + totalActions > FILTER_THRESHOLD ? { showFilter: true, filterPlaceholder: localize('branchPicker.filter', "Filter branches...") } : undefined, + ); + } + + private _buildItems(): IActionListItem[] { + return this._branches.map(branch => ({ + kind: ActionListItemKind.Action, + label: branch, + group: { title: '', icon: this._selectedBranch === branch ? Codicon.check : Codicon.blank }, + item: { name: branch }, + })); + } + + private _selectBranch(branch: string): void { + if (this._selectedBranch !== branch) { + this._selectedBranch = branch; + this._newSession?.setBranch(branch); + this._onDidChange.fire(branch); + this._updateTriggerLabel(); + } + } + + private _updateTriggerLabel(): void { + if (!this._triggerElement) { + return; + } + dom.clearNode(this._triggerElement); + const isDisabled = this._branches.length === 0; + const label = this._selectedBranch ?? localize('branchPicker.select', "Branch"); + dom.append(this._triggerElement, renderIcon(Codicon.gitBranch)); + const labelSpan = dom.append(this._triggerElement, dom.$('span.sessions-chat-dropdown-label')); + labelSpan.textContent = label; + dom.append(this._triggerElement, renderIcon(Codicon.chevronDown)); + this._slotElement?.classList.toggle('disabled', isDisabled); + } +} diff --git a/src/vs/sessions/contrib/chat/browser/folderPicker.ts b/src/vs/sessions/contrib/chat/browser/folderPicker.ts index 034ac24e4677a..dddc95aed2bc1 100644 --- a/src/vs/sessions/contrib/chat/browser/folderPicker.ts +++ b/src/vs/sessions/contrib/chat/browser/folderPicker.ts @@ -17,6 +17,7 @@ import { IStorageService, StorageScope, StorageTarget } from '../../../../platfo import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; import { IWorkspacesService, isRecentFolder } from '../../../../platform/workspaces/common/workspaces.js'; import { renderIcon } from '../../../../base/browser/ui/iconLabel/iconLabels.js'; +import { INewSession } from './newSession.js'; const STORAGE_KEY_LAST_FOLDER = 'agentSessions.lastPickedFolder'; const STORAGE_KEY_RECENT_FOLDERS = 'agentSessions.recentlyPickedFolders'; @@ -42,6 +43,7 @@ export class FolderPicker extends Disposable { private _selectedFolderUri: URI | undefined; private _recentlyPickedFolders: URI[] = []; private _cachedRecentFolders: { uri: URI; label?: string }[] = []; + private _newSession: INewSession | undefined; private _triggerElement: HTMLElement | undefined; private readonly _renderDisposables = this._register(new DisposableStore()); @@ -50,6 +52,14 @@ export class FolderPicker extends Disposable { return this._selectedFolderUri; } + /** + * Sets the pending session that this picker writes to. + * When the user selects a folder, it calls `setRepoUri` on the session. + */ + setNewSession(session: INewSession | undefined): void { + this._newSession = session; + } + constructor( @IActionWidgetService private readonly actionWidgetService: IActionWidgetService, @IStorageService private readonly storageService: IStorageService, @@ -175,6 +185,7 @@ export class FolderPicker extends Disposable { this._addToRecentlyPickedFolders(folderUri); this.storageService.store(STORAGE_KEY_LAST_FOLDER, folderUri.toString(), StorageScope.PROFILE, StorageTarget.MACHINE); this._updateTriggerLabel(this._triggerElement); + this._newSession?.setRepoUri(folderUri); this._onDidSelectFolder.fire(folderUri); } diff --git a/src/vs/sessions/contrib/chat/browser/media/chatWelcomePart.css b/src/vs/sessions/contrib/chat/browser/media/chatWelcomePart.css index 75d90b5f97d74..a6987292c9b5e 100644 --- a/src/vs/sessions/contrib/chat/browser/media/chatWelcomePart.css +++ b/src/vs/sessions/contrib/chat/browser/media/chatWelcomePart.css @@ -298,6 +298,17 @@ color: var(--vscode-foreground); } +.sessions-chat-picker-slot.disabled .action-label { + opacity: 0.5; + cursor: default; + pointer-events: none; +} + +.sessions-chat-picker-slot.disabled .action-label:hover { + background-color: transparent; + color: var(--vscode-descriptionForeground); +} + .sessions-chat-picker-slot .action-label .codicon { font-size: 14px; flex-shrink: 0; diff --git a/src/vs/sessions/contrib/chat/browser/newChatViewPane.ts b/src/vs/sessions/contrib/chat/browser/newChatViewPane.ts index 10dc60a3800a1..431e7e953d200 100644 --- a/src/vs/sessions/contrib/chat/browser/newChatViewPane.ts +++ b/src/vs/sessions/contrib/chat/browser/newChatViewPane.ts @@ -7,14 +7,11 @@ import './media/chatWidget.css'; import './media/chatWelcomePart.css'; import * as dom from '../../../../base/browser/dom.js'; import { Codicon } from '../../../../base/common/codicons.js'; -import { ThemeIcon } from '../../../../base/common/themables.js'; import { toAction } from '../../../../base/common/actions.js'; -import { Radio } from '../../../../base/browser/ui/radio/radio.js'; -import { DropdownMenuActionViewItem } from '../../../../base/browser/ui/dropdown/dropdownActionViewItem.js'; -import { Emitter, Event } from '../../../../base/common/event.js'; +import { Emitter } from '../../../../base/common/event.js'; import { KeyCode } from '../../../../base/common/keyCodes.js'; import { Disposable, DisposableStore, MutableDisposable } from '../../../../base/common/lifecycle.js'; -import { IObservable, observableValue } from '../../../../base/common/observable.js'; +import { observableValue } from '../../../../base/common/observable.js'; import { URI } from '../../../../base/common/uri.js'; import { CodeEditorWidget, ICodeEditorWidgetOptions } from '../../../../editor/browser/widget/codeEditor/codeEditorWidget.js'; @@ -32,149 +29,39 @@ import { IThemeService } from '../../../../platform/theme/common/themeService.js import { IHoverService } from '../../../../platform/hover/browser/hover.js'; import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js'; import { renderIcon } from '../../../../base/browser/ui/iconLabel/iconLabels.js'; -import { isEqual } from '../../../../base/common/resources.js'; import { localize } from '../../../../nls.js'; import { AgentSessionProviders } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessions.js'; import { ISessionsManagementService } from '../../sessions/browser/sessionsManagementService.js'; import { ChatSessionPosition, getResourceForNewChatSession } from '../../../../workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js'; import { ChatSessionPickerActionItem, IChatSessionPickerDelegate } from '../../../../workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js'; import { SearchableOptionPickerActionItem } from '../../../../workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.js'; -import { ChatAgentLocation, ChatModeKind } from '../../../../workbench/contrib/chat/common/constants.js'; -import { IChatSendRequestOptions } from '../../../../workbench/contrib/chat/common/chatService/chatService.js'; import { IChatSessionProviderOptionGroup, IChatSessionProviderOptionItem, IChatSessionsService } from '../../../../workbench/contrib/chat/common/chatSessionsService.js'; import { ILanguageModelChatMetadataAndIdentifier, ILanguageModelsService } from '../../../../workbench/contrib/chat/common/languageModels.js'; import { IModelPickerDelegate } from '../../../../workbench/contrib/chat/browser/widget/input/modelPickerActionItem.js'; import { EnhancedModelPickerActionItem } from '../../../../workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.js'; import { IChatInputPickerOptions } from '../../../../workbench/contrib/chat/browser/widget/input/chatInputPickerActionItem.js'; -import { WorkspaceFolderCountContext } from '../../../../workbench/common/contextkeys.js'; import { IViewDescriptorService } from '../../../../workbench/common/views.js'; import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; import { IViewPaneOptions, ViewPane } from '../../../../workbench/browser/parts/views/viewPane.js'; import { ContextMenuController } from '../../../../editor/contrib/contextmenu/browser/contextmenu.js'; import { getSimpleEditorOptions } from '../../../../workbench/contrib/codeEditor/browser/simpleEditorOptions.js'; -import { IChatRequestVariableEntry } from '../../../../workbench/contrib/chat/common/attachments/chatVariableEntries.js'; import { isString } from '../../../../base/common/types.js'; import { NewChatContextAttachments } from './newChatContextAttachments.js'; import { GITHUB_REMOTE_FILE_SCHEME } from '../../fileTreeView/browser/githubFileSystemProvider.js'; import { FolderPicker } from './folderPicker.js'; - -// #region --- Target Config --- - -/** - * A dropdown menu action item that shows an icon, a text label, and a chevron. - */ -class LabeledDropdownMenuActionViewItem extends DropdownMenuActionViewItem { - protected override renderLabel(element: HTMLElement): null { - // Render icon as a separate codicon element - const classNames = typeof this.options.classNames === 'string' - ? this.options.classNames.split(/\s+/g).filter(s => !!s) - : (this.options.classNames ?? []); - if (classNames.length > 0) { - const icon = dom.append(element, dom.$('span')); - icon.classList.add('codicon', ...classNames); - } - - // Add text label (not affected by codicon font) - const label = dom.append(element, dom.$('span.sessions-chat-dropdown-label')); - label.textContent = this._action.label; - - // Add chevron - dom.append(element, renderIcon(Codicon.chevronDown)); - - return null; - } -} - -/** - * Tracks which agent session targets are available and which is selected. - * Targets are fixed at construction time; only the selection changes. - */ -export interface ITargetConfig { - readonly allowedTargets: IObservable>; - readonly selectedTarget: IObservable; - readonly onDidChangeSelectedTarget: Event; - readonly onDidChangeAllowedTargets: Event>; - setSelectedTarget(target: AgentSessionProviders): void; -} - -export interface ITargetConfigOptions { - allowedTargets: AgentSessionProviders[]; - defaultTarget?: AgentSessionProviders; -} - -class TargetConfig extends Disposable implements ITargetConfig { - - private readonly _allowedTargets = observableValue>('allowedTargets', new Set()); - readonly allowedTargets: IObservable> = this._allowedTargets; - - private readonly _selectedTarget = observableValue('selectedTarget', undefined); - readonly selectedTarget: IObservable = this._selectedTarget; - - private readonly _onDidChangeSelectedTarget = this._register(new Emitter()); - readonly onDidChangeSelectedTarget = this._onDidChangeSelectedTarget.event; - - private readonly _onDidChangeAllowedTargets = this._register(new Emitter>()); - readonly onDidChangeAllowedTargets = this._onDidChangeAllowedTargets.event; - - constructor(options: ITargetConfigOptions) { - super(); - const initialSet = new Set(options.allowedTargets); - this._allowedTargets.set(initialSet, undefined); - const defaultTarget = options.defaultTarget && initialSet.has(options.defaultTarget) - ? options.defaultTarget - : initialSet.values().next().value; - this._selectedTarget.set(defaultTarget, undefined); - } - - setSelectedTarget(target: AgentSessionProviders): void { - const allowed = this._allowedTargets.get(); - if (!allowed.has(target)) { - throw new Error(`Target "${target}" is not in the allowed set`); - } - if (this._selectedTarget.get() !== target) { - this._selectedTarget.set(target, undefined); - this._onDidChangeSelectedTarget.fire(target); - } - } - - setAllowedTargets(targets: AgentSessionProviders[]): void { - const newSet = new Set(targets); - this._allowedTargets.set(newSet, undefined); - this._onDidChangeAllowedTargets.fire(newSet); - - // If the currently selected target is no longer allowed, switch to the first allowed target - const current = this._selectedTarget.get(); - if (current && !newSet.has(current)) { - const fallback = newSet.values().next().value; - this._selectedTarget.set(fallback, undefined); - this._onDidChangeSelectedTarget.fire(fallback); - } - } -} - -// #endregion +import { IGitService } from '../../../../workbench/contrib/git/common/gitService.js'; +import { IsolationModePicker, SessionTargetPicker } from './sessionTargetPicker.js'; +import { BranchPicker } from './branchPicker.js'; +import { INewSession } from './newSession.js'; // #region --- Chat Welcome Widget --- -/** - * Data passed to the `onSendRequest` callback when the user submits a query. - */ -export interface INewChatSendRequestData { - readonly resource: URI; - readonly target: AgentSessionProviders; - readonly query: string; - readonly sendOptions: IChatSendRequestOptions; - readonly selectedOptions: ReadonlyMap; - readonly folderUri?: URI; - readonly attachedContext?: IChatRequestVariableEntry[]; -} - /** * Options for creating a `NewChatWidget`. */ -export interface INewChatWidgetOptions { - readonly targetConfig: ITargetConfigOptions; - readonly onSendRequest?: (data: INewChatSendRequestData) => void; +interface INewChatWidgetOptions { + readonly allowedTargets: AgentSessionProviders[]; + readonly defaultTarget: AgentSessionProviders; readonly sessionPosition?: ChatSessionPosition; } @@ -187,26 +74,25 @@ export interface INewChatWidgetOptions { */ class NewChatWidget extends Disposable { - private readonly _targetConfig: TargetConfig; + private readonly _targetPicker: SessionTargetPicker; + private readonly _isolationModePicker: IsolationModePicker; + private readonly _branchPicker: BranchPicker; private readonly _options: INewChatWidgetOptions; // Input private _editor!: CodeEditorWidget; private readonly _currentLanguageModel = observableValue('currentLanguageModel', undefined); private readonly _modelPickerDisposable = this._register(new MutableDisposable()); - private _pendingSessionResource: URI | undefined; + + // Pending session + private readonly _newSession = this._register(new MutableDisposable()); + private readonly _newSessionListener = this._register(new MutableDisposable()); // Welcome part - private readonly _welcomeContentDisposables = this._register(new DisposableStore()); private _pickersContainer: HTMLElement | undefined; - private _targetDropdownContainer: HTMLElement | undefined; private _extensionPickersLeftContainer: HTMLElement | undefined; private _extensionPickersRightContainer: HTMLElement | undefined; private _inputSlot: HTMLElement | undefined; - private _localModeContainer: HTMLElement | undefined; - private _localModeDropdownContainer: HTMLElement | undefined; - private _localModePickersContainer: HTMLElement | undefined; - private _localMode: 'workspace' | 'worktree' = 'worktree'; private readonly _folderPicker: FolderPicker; private _folderPickerContainer: HTMLElement | undefined; private readonly _pickerWidgets = new Map(); @@ -227,56 +113,30 @@ class NewChatWidget extends Disposable { @IConfigurationService private readonly configurationService: IConfigurationService, @ILanguageModelsService private readonly languageModelsService: ILanguageModelsService, @IContextKeyService private readonly contextKeyService: IContextKeyService, - @IContextMenuService private readonly contextMenuService: IContextMenuService, + @IContextMenuService contextMenuService: IContextMenuService, @ILogService private readonly logService: ILogService, @IHoverService _hoverService: IHoverService, @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, @ISessionsManagementService private readonly sessionsManagementService: ISessionsManagementService, + @IGitService private readonly gitService: IGitService, ) { super(); this._contextAttachments = this._register(this.instantiationService.createInstance(NewChatContextAttachments)); this._folderPicker = this._register(this.instantiationService.createInstance(FolderPicker)); - this._targetConfig = this._register(new TargetConfig(options.targetConfig)); + this._targetPicker = this._register(new SessionTargetPicker(options.allowedTargets, options.defaultTarget)); + this._isolationModePicker = this._register(this.instantiationService.createInstance(IsolationModePicker)); + this._branchPicker = this._register(this.instantiationService.createInstance(BranchPicker)); this._options = options; - // When folder changes, notify extension and re-render pickers - this._register(this._folderPicker.onDidSelectFolder(() => { - this._notifyFolderSelection(); - this._renderExtensionPickers(true); - })); - - // When target changes, regenerate pending resource - this._register(this._targetConfig.onDidChangeSelectedTarget(() => { - this._generatePendingSessionResource(); - this._notifyFolderSelection(); - this._renderExtensionPickers(true); - this._renderLocalModePicker(); - })); - - this._register(this._targetConfig.onDidChangeAllowedTargets(() => { - if (this._targetDropdownContainer) { - dom.clearNode(this._targetDropdownContainer); - this._renderTargetDropdown(this._targetDropdownContainer); - } - this._renderExtensionPickers(true); - })); - - // Listen for option group changes to re-render pickers - this._register(this.chatSessionsService.onDidChangeOptionGroups(() => this._renderExtensionPickers())); - - // React to chat session option changes - this._register(this.chatSessionsService.onDidChangeSessionOptions((e: URI | undefined) => { - if (this._pendingSessionResource && isEqual(this._pendingSessionResource, e)) { - this._syncOptionsFromSession(this._pendingSessionResource); - this._renderExtensionPickers(); - } + // When target changes, create new session + this._register(this._targetPicker.onDidChangeTarget((target) => { + this._createNewSession(); + const isLocal = target === AgentSessionProviders.Background; + this._isolationModePicker.setVisible(isLocal); + this._branchPicker.setVisible(isLocal); })); - const workspaceFolderCountKey = new Set([WorkspaceFolderCountContext.key]); this._register(this.contextKeyService.onDidChangeContext(e => { - if (e.affectsSome(workspaceFolderCountKey)) { - this._renderExtensionPickers(true); - } if (this._whenClauseKeys.size > 0 && e.affectsSome(this._whenClauseKeys)) { this._renderExtensionPickers(true); } @@ -314,11 +174,17 @@ class NewChatWidget extends Disposable { this._createBottomToolbar(inputArea); this._inputSlot.appendChild(inputArea); - // Local mode picker (below the input, shown when Local is selected) - this._localModeContainer = dom.append(welcomeElement, dom.$('.chat-full-welcome-local-mode')); - this._localModeDropdownContainer = dom.append(this._localModeContainer, dom.$('.sessions-chat-local-mode-left')); - dom.append(this._localModeContainer, dom.$('.sessions-chat-local-mode-spacer')); - this._localModePickersContainer = dom.append(this._localModeContainer, dom.$('.sessions-chat-local-mode-right')); + // Isolation mode and branch pickers (below the input, shown when Local target is selected) + const isolationContainer = dom.append(welcomeElement, dom.$('.chat-full-welcome-local-mode')); + this._isolationModePicker.render(isolationContainer); + dom.append(isolationContainer, dom.$('.sessions-chat-local-mode-spacer')); + const branchContainer = dom.append(isolationContainer, dom.$('.sessions-chat-local-mode-right')); + this._branchPicker.render(branchContainer); + + // Set initial visibility based on default target + const isLocal = this._targetPicker.selectedTarget === AgentSessionProviders.Background; + this._isolationModePicker.setVisible(isLocal); + this._branchPicker.setVisible(isLocal); // Render target buttons & extension pickers this._renderOptionGroupPickers(); @@ -326,49 +192,75 @@ class NewChatWidget extends Disposable { // Initialize model picker this._initDefaultModel(); - // Generate pending resource for option changes - this._generatePendingSessionResource(); - - // Render local mode picker - this._renderLocalModePicker(); + // Create initial session + this._createNewSession(); // Reveal welcomeElement.classList.add('revealed'); } - private _getEffectiveTarget(): AgentSessionProviders | undefined { - const target = this._targetConfig.selectedTarget.get(); - if (target === AgentSessionProviders.Local && this._localMode === 'worktree') { - return AgentSessionProviders.Background; + private async _createNewSession(): Promise { + const target = this._targetPicker.selectedTarget; + const defaultRepoUri = this._folderPicker.selectedFolderUri ?? this.workspaceContextService.getWorkspace().folders[0]?.uri; + const resource = getResourceForNewChatSession({ + type: target, + position: this._options.sessionPosition ?? ChatSessionPosition.Sidebar, + displayName: '', + }); + + try { + const session = await this.sessionsManagementService.createNewSessionForTarget(target, resource, defaultRepoUri); + this._setNewSession(session); + } catch (e) { + this.logService.error('Failed to create new session:', e); } - return target; } - private readonly _pendingSessionResources = new Map(); + private _setNewSession(session: INewSession): void { + this._newSession.value = session; - private _generatePendingSessionResource(): void { - const target = this._getEffectiveTarget(); - if (!target || target === AgentSessionProviders.Local) { - this._pendingSessionResource = undefined; - return; + // Wire pickers to the new session + this._folderPicker.setNewSession(session); + this._isolationModePicker.setNewSession(session); + this._branchPicker.setNewSession(session); + + // Set the current model on the session + const currentModel = this._currentLanguageModel.get(); + if (currentModel) { + session.setModelId(currentModel.identifier); } - // Reuse existing pending resource for the same target type - const existing = this._pendingSessionResources.get(target); - if (existing) { - this._pendingSessionResource = existing; - return; + // Open repository for the session's repoUri + if (session.repoUri) { + this._openRepository(session.repoUri); } - this._pendingSessionResource = getResourceForNewChatSession({ - type: target, - position: this._options.sessionPosition ?? ChatSessionPosition.Sidebar, - displayName: '', + // Render extension pickers for the new session + this._renderExtensionPickers(true); + + // Listen for session changes + this._newSessionListener.value = session.onDidChange((changeType) => { + if (changeType === 'repoUri' && session.repoUri) { + this._openRepository(session.repoUri); + } + if (changeType === 'isolationMode') { + this._branchPicker.setVisible(session.isolationMode === 'worktree'); + } + if (changeType === 'options') { + this._syncOptionsFromSession(session.resource); + this._renderExtensionPickers(); + } }); - this._pendingSessionResources.set(target, this._pendingSessionResource); + } - this.sessionsManagementService.createNewPendingSession(this._pendingSessionResource,) - .catch((err) => this.logService.trace('Failed to create pending session:', err)); + private _openRepository(folderUri: URI): void { + this.gitService.openRepository(folderUri).then(repository => { + this._isolationModePicker.setRepository(repository); + this._branchPicker.setRepository(repository); + }).catch(() => { + this._isolationModePicker.setRepository(undefined); + this._branchPicker.setRepository(undefined); + }); } // --- Editor --- @@ -435,9 +327,9 @@ class NewChatWidget extends Disposable { * Local targets use the workspace folder; cloud targets construct a github-remote-file:// URI. */ private _getContextFolderUri(): URI | undefined { - const target = this._getEffectiveTarget(); + const target = this._targetPicker.selectedTarget; - if (!target || target === AgentSessionProviders.Local || target === AgentSessionProviders.Background) { + if (target === AgentSessionProviders.Background) { return this._folderPicker.selectedFolderUri ?? this.workspaceContextService.getWorkspace().folders[0]?.uri; } @@ -481,10 +373,11 @@ class NewChatWidget extends Disposable { currentModel: this._currentLanguageModel, setModel: (model: ILanguageModelChatMetadataAndIdentifier) => { this._currentLanguageModel.set(model, undefined); + this._newSession.value?.setModelId(model.identifier); }, getModels: () => this._getAvailableModels(), canManageModels: () => true, - showCuratedModels: () => this._localMode === 'workspace', + showCuratedModels: () => false, }; const pickerOptions: IChatInputPickerOptions = { @@ -530,9 +423,6 @@ class NewChatWidget extends Disposable { if (!model.metadata.isUserSelectable) { return false; } - if (model.metadata.targetChatSessionType === AgentSessionProviders.Background) { - return false; - } return true; } @@ -543,15 +433,15 @@ class NewChatWidget extends Disposable { return; } - this._disposePickerWidgets(); + this._clearExtensionPickers(); dom.clearNode(this._pickersContainer); const pickersRow = dom.append(this._pickersContainer, dom.$('.chat-full-welcome-pickers')); // Left half: target switcher (right-justified within its half) const leftHalf = dom.append(pickersRow, dom.$('.sessions-chat-pickers-left-half')); - this._targetDropdownContainer = dom.append(leftHalf, dom.$('.sessions-chat-dropdown-wrapper')); - this._renderTargetDropdown(this._targetDropdownContainer); + const targetDropdownContainer = dom.append(leftHalf, dom.$('.sessions-chat-dropdown-wrapper')); + this._targetPicker.render(targetDropdownContainer); // Right half: separator + pickers (left-justified within its half) const rightHalf = dom.append(pickersRow, dom.$('.sessions-chat-pickers-right-half')); @@ -565,140 +455,17 @@ class NewChatWidget extends Disposable { this._renderExtensionPickers(); } - private _renderTargetDropdown(container: HTMLElement): void { - const allowed = this._targetConfig.allowedTargets.get(); - if (allowed.size === 0) { - return; - } - - const activeType = this._targetConfig.selectedTarget.get() ?? AgentSessionProviders.Local; - const targets = [AgentSessionProviders.Local, AgentSessionProviders.Cloud].filter(t => allowed.has(t)); - const activeIndex = targets.indexOf(activeType); - - const radio = new Radio({ - items: targets.map(target => ({ - text: getAgentSessionProviderName(target), - isActive: target === activeType, - })), - }); - this._welcomeContentDisposables.add(radio); - container.appendChild(radio.domNode); - - if (activeIndex >= 0) { - radio.setActiveItem(activeIndex); - } - - this._welcomeContentDisposables.add(radio.onDidSelect(index => { - this._targetConfig.setSelectedTarget(targets[index]); - })); - } - - // --- Local mode picker (Workspace / Worktree) --- - - private readonly _localModeDisposables = this._register(new DisposableStore()); - - private _renderLocalModePicker(): void { - if (!this._localModeContainer || !this._localModeDropdownContainer || !this._localModePickersContainer) { - return; - } - - this._localModeDisposables.clear(); - dom.clearNode(this._localModeDropdownContainer); - dom.clearNode(this._localModePickersContainer); - - const selectedTarget = this._targetConfig.selectedTarget.get(); - if (selectedTarget !== AgentSessionProviders.Local) { - this._localModeContainer.style.visibility = 'hidden'; - return; - } - - this._localModeContainer.style.visibility = ''; - - // Dropdown button for Workspace / Worktree - const modeLabel = this._localMode === 'workspace' - ? localize('localMode.workspace', "Workspace") - : localize('localMode.worktree', "Worktree"); - const modeIcon = this._localMode === 'workspace' ? Codicon.folder : Codicon.worktree; - - const modeAction = toAction({ id: 'localMode', label: modeLabel, run: () => { } }); - const modeDropdown = this._localModeDisposables.add(new LabeledDropdownMenuActionViewItem( - modeAction, - { - getActions: () => [ - toAction({ - id: 'localMode.workspace', - label: localize('localMode.workspace', "Workspace"), - checked: this._localMode === 'workspace', - run: () => this._setLocalMode('workspace'), - }), - toAction({ - id: 'localMode.worktree', - label: localize('localMode.worktree', "Worktree"), - checked: this._localMode === 'worktree', - run: () => this._setLocalMode('worktree'), - }), - ], - }, - this.contextMenuService, - { classNames: [...ThemeIcon.asClassNameArray(modeIcon)] } - )); - const modeSlot = dom.append(this._localModeDropdownContainer, dom.$('.sessions-chat-picker-slot')); - modeDropdown.render(modeSlot); - - // Render pickers in the right side - this._renderLocalModePickers(); - } - - private _setLocalMode(mode: 'workspace' | 'worktree'): void { - if (this._localMode !== mode) { - this._localMode = mode; - this._generatePendingSessionResource(); - this._notifyFolderSelection(); - this._renderLocalModePicker(); - } - } - - private _notifyFolderSelection(): void { - this._selectedOptions.clear(); - if (!this._pendingSessionResource) { - return; - } - const folderUri = this._folderPicker.selectedFolderUri ?? this.workspaceContextService.getWorkspace().folders[0]?.uri; - if (folderUri) { - this.chatSessionsService.notifySessionOptionsChange( - this._pendingSessionResource, - [{ optionId: 'repository', value: folderUri.fsPath }] - ).catch((err) => this.logService.error('Failed to notify extension of folder selection:', err)); - } - } - - private _renderLocalModePickers(): void { - if (!this._localModePickersContainer) { - return; - } - dom.clearNode(this._localModePickersContainer); - - if (this._localMode === 'worktree') { - // Worktree mode: render extension pickers for Background provider - this._renderExtensionPickersInContainer(this._localModePickersContainer, AgentSessionProviders.Background); - } - } - - // --- Welcome: Extension option pickers --- + // --- Welcome: Extension option pickers (Cloud target only) --- private _renderExtensionPickers(force?: boolean): void { if (!this._extensionPickersRightContainer) { return; } - const activeSessionType = this._getEffectiveTarget(); - if (!activeSessionType) { - this._clearExtensionPickers(); - return; - } + const activeSessionType = this._targetPicker.selectedTarget; - // For Local target, show folder picker in top row and handle bottom row - if (this._targetConfig.selectedTarget.get() === AgentSessionProviders.Local) { + // Extension pickers are only shown for Cloud target + if (activeSessionType === AgentSessionProviders.Background) { this._clearExtensionPickers(); if (this._folderPickerContainer) { this._folderPickerContainer.style.display = ''; @@ -706,7 +473,6 @@ class NewChatWidget extends Disposable { if (this._extensionPickersLeftContainer) { this._extensionPickersLeftContainer.style.display = 'block'; } - this._renderLocalModePicker(); return; } @@ -742,16 +508,6 @@ class NewChatWidget extends Disposable { return; } - visibleGroups.sort((a, b) => { - // Repo/folder pickers first, then others - const aRepo = isRepoOrFolderGroup(a) ? 0 : 1; - const bRepo = isRepoOrFolderGroup(b) ? 0 : 1; - if (aRepo !== bRepo) { - return aRepo - bRepo; - } - return (a.when ? 1 : 0) - (b.when ? 1 : 0); - }); - if (!force && this._pickerWidgets.size === visibleGroups.length) { const allMatch = visibleGroups.every(g => this._pickerWidgets.has(g.id)); if (allMatch) { @@ -761,7 +517,6 @@ class NewChatWidget extends Disposable { this._clearExtensionPickers(); - // Show the separator between target switcher and extension pickers if (this._extensionPickersLeftContainer) { this._extensionPickersLeftContainer.style.display = 'block'; } @@ -783,12 +538,7 @@ class NewChatWidget extends Disposable { this._updateOptionContextKey(optionGroup.id, option.id); emitter.fire(option); - if (this._pendingSessionResource) { - this.chatSessionsService.notifySessionOptionsChange( - this._pendingSessionResource, - [{ optionId: optionGroup.id, value: option }] - ).catch((err) => this.logService.error(`Failed to notify extension of ${optionGroup.id} change:`, err)); - } + this._newSession.value?.setOption(optionGroup.id, option); this._renderExtensionPickers(true); }, @@ -796,7 +546,7 @@ class NewChatWidget extends Disposable { const groups = this.chatSessionsService.getOptionGroupsForSessionType(activeSessionType); return groups?.find((g: { id: string }) => g.id === optionGroup.id); }, - getSessionResource: () => this._pendingSessionResource, + getSessionResource: () => this._newSession.value?.resource, }; const action = toAction({ id: optionGroup.id, label: optionGroup.name, run: () => { } }); @@ -808,77 +558,7 @@ class NewChatWidget extends Disposable { this._pickerWidgetDisposables.add(widget); this._pickerWidgets.set(optionGroup.id, widget); - // All pickers go to the right - const targetContainer = this._extensionPickersRightContainer!; - - const slot = dom.append(targetContainer, dom.$('.sessions-chat-picker-slot')); - widget.render(slot); - } - } - - private _renderExtensionPickersInContainer(container: HTMLElement, sessionType: AgentSessionProviders): void { - const optionGroups = this.chatSessionsService.getOptionGroupsForSessionType(sessionType); - if (!optionGroups || optionGroups.length === 0) { - return; - } - - const visibleGroups: IChatSessionProviderOptionGroup[] = []; - for (const group of optionGroups) { - if (isModelOptionGroup(group)) { - continue; - } - if (group.id === 'repository') { - continue; - } - const hasItems = group.items.length > 0 || (group.commands || []).length > 0 || !!group.searchable; - const passesWhenClause = this._evaluateOptionGroupVisibility(group); - if (hasItems && passesWhenClause) { - visibleGroups.push(group); - } - } - - for (const optionGroup of visibleGroups) { - const initialItem = this._getDefaultOptionForGroup(optionGroup); - const initialState = { group: optionGroup, item: initialItem }; - - if (initialItem) { - this._updateOptionContextKey(optionGroup.id, initialItem.id); - } - - const emitter = this._getOrCreateOptionEmitter(optionGroup.id); - const itemDelegate: IChatSessionPickerDelegate = { - getCurrentOption: () => this._selectedOptions.get(optionGroup.id) ?? this._getDefaultOptionForGroup(optionGroup), - onDidChangeOption: emitter.event, - setOption: (option: IChatSessionProviderOptionItem) => { - this._selectedOptions.set(optionGroup.id, option); - this._updateOptionContextKey(optionGroup.id, option.id); - emitter.fire(option); - - if (this._pendingSessionResource) { - this.chatSessionsService.notifySessionOptionsChange( - this._pendingSessionResource, - [{ optionId: optionGroup.id, value: option }] - ).catch((err) => this.logService.error(`Failed to notify extension of ${optionGroup.id} change:`, err)); - } - - this._renderLocalModePickers(); - }, - getOptionGroup: () => { - const groups = this.chatSessionsService.getOptionGroupsForSessionType(sessionType); - return groups?.find((g: { id: string }) => g.id === optionGroup.id); - }, - getSessionResource: () => this._pendingSessionResource, - }; - - const action = toAction({ id: optionGroup.id, label: optionGroup.name, run: () => { } }); - const widget = this.instantiationService.createInstance( - optionGroup.searchable ? SearchableOptionPickerActionItem : ChatSessionPickerActionItem, - action, initialState, itemDelegate - ); - - this._localModeDisposables.add(widget); - - const slot = dom.append(container, dom.$('.sessions-chat-picker-slot')); + const slot = dom.append(this._extensionPickersRightContainer!, dom.$('.sessions-chat-picker-slot')); widget.render(slot); } } @@ -897,8 +577,8 @@ class NewChatWidget extends Disposable { return selectedOption; } - if (this._pendingSessionResource) { - const sessionOption = this.chatSessionsService.getSessionOption(this._pendingSessionResource, optionGroup.id); + if (this._newSession.value) { + const sessionOption = this.chatSessionsService.getSessionOption(this._newSession.value.resource, optionGroup.id); if (!isString(sessionOption)) { return sessionOption; } @@ -908,7 +588,7 @@ class NewChatWidget extends Disposable { } private _syncOptionsFromSession(sessionResource: URI): void { - const activeSessionType = this._getEffectiveTarget(); + const activeSessionType = this._targetPicker.selectedTarget; if (!activeSessionType) { return; } @@ -959,12 +639,6 @@ class NewChatWidget extends Disposable { return emitter; } - private _disposePickerWidgets(): void { - this._pickerWidgetDisposables.clear(); - this._pickerWidgets.clear(); - this._optionEmitters.clear(); - } - private _clearExtensionPickers(): void { this._pickerWidgetDisposables.clear(); this._pickerWidgets.clear(); @@ -984,50 +658,23 @@ class NewChatWidget extends Disposable { private _send(): void { const query = this._editor.getModel()?.getValue().trim(); - if (!query) { - return; - } - - const target = this._getEffectiveTarget(); - if (!target) { - this.logService.warn('ChatWelcomeWidget: No target selected, cannot create session'); + const session = this._newSession.value; + if (!query || !session) { return; } - const position = this._options.sessionPosition ?? ChatSessionPosition.Sidebar; - const resource = this._pendingSessionResource - ?? getResourceForNewChatSession({ type: target, position, displayName: '' }); - - const contribution = target !== AgentSessionProviders.Local - ? this.chatSessionsService.getChatSessionContribution(target) - : undefined; - - const sendOptions: IChatSendRequestOptions = { - location: ChatAgentLocation.Chat, - userSelectedModelId: this._currentLanguageModel.get()?.identifier, - modeInfo: { - kind: ChatModeKind.Agent, - isBuiltin: true, - modeInstructions: undefined, - modeId: 'agent', - applyCodeBlockSuggestionId: undefined, - }, - agentIdSilent: contribution?.type, - attachedContext: this._contextAttachments.attachments.length > 0 ? [...this._contextAttachments.attachments] : undefined, - }; - - const folderUri = this._folderPicker.selectedFolderUri ?? this.workspaceContextService.getWorkspace().folders[0]?.uri; + session.setQuery(query); + session.setAttachedContext( + this._contextAttachments.attachments.length > 0 ? [...this._contextAttachments.attachments] : undefined + ); - this._options.onSendRequest?.({ - resource, - target, - query, - sendOptions, - selectedOptions: new Map(this._selectedOptions), - folderUri, - attachedContext: this._contextAttachments.attachments.length > 0 ? [...this._contextAttachments.attachments] : undefined, - }); + this.sessionsManagementService.sendRequestForNewSession( + session.resource + ).catch(e => this.logService.error('Failed to send request:', e)); + // Clear sent session so a fresh one is created next time + this._newSession.clear(); + this._newSessionListener.clear(); this._contextAttachments.clear(); } @@ -1037,16 +684,12 @@ class NewChatWidget extends Disposable { this._editor?.layout(); } - setVisible(_visible: boolean): void { - // no-op - } - focusInput(): void { this._editor?.focus(); } updateAllowedTargets(targets: AgentSessionProviders[]): void { - this._targetConfig.setAllowedTargets(targets); + this._targetPicker.updateAllowedTargets(targets); } } @@ -1074,9 +717,7 @@ export class NewChatViewPane extends ViewPane { @IOpenerService openerService: IOpenerService, @IThemeService themeService: IThemeService, @IHoverService hoverService: IHoverService, - @ISessionsManagementService private readonly activeSessionService: ISessionsManagementService, @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, - @ILogService private readonly logService: ILogService, ) { super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, hoverService); } @@ -1087,15 +728,8 @@ export class NewChatViewPane extends ViewPane { this._widget = this._register(this.instantiationService.createInstance( NewChatWidget, { - targetConfig: { - allowedTargets: this.computeAllowedTargets(), - defaultTarget: AgentSessionProviders.Local, - }, - onSendRequest: (data) => { - this.activeSessionService.sendRequestForNewSession( - data.resource, data.query, data.sendOptions, data.selectedOptions, data.folderUri - ).catch(e => this.logService.error('NewChatViewPane: Failed to open session and send request', e)); - }, + allowedTargets: this.computeAllowedTargets(), + defaultTarget: AgentSessionProviders.Background, } satisfies INewChatWidgetOptions, )); @@ -1108,7 +742,7 @@ export class NewChatViewPane extends ViewPane { } private computeAllowedTargets(): AgentSessionProviders[] { - const targets: AgentSessionProviders[] = [AgentSessionProviders.Local, AgentSessionProviders.Cloud]; + const targets: AgentSessionProviders[] = [AgentSessionProviders.Background, AgentSessionProviders.Cloud]; return targets; } @@ -1124,7 +758,6 @@ export class NewChatViewPane extends ViewPane { override setVisible(visible: boolean): void { super.setVisible(visible); - this._widget?.setVisible(visible); if (visible) { this._widget?.focusInput(); } @@ -1157,20 +790,3 @@ function isRepoOrFolderGroup(group: IChatSessionProviderOptionGroup): boolean { nameLower === 'repository' || nameLower === 'repositories' || nameLower === 'folder' || nameLower === 'folders'; } - -function getAgentSessionProviderName(provider: AgentSessionProviders): string { - switch (provider) { - case AgentSessionProviders.Local: - return localize('chat.session.providerLabel.local', "Local"); - case AgentSessionProviders.Background: - return localize('chat.session.providerLabel.background', "Worktree"); - case AgentSessionProviders.Cloud: - return localize('chat.session.providerLabel.cloud', "Cloud"); - case AgentSessionProviders.Claude: - return 'Claude'; - case AgentSessionProviders.Codex: - return 'Codex'; - case AgentSessionProviders.Growth: - return 'Growth'; - } -} diff --git a/src/vs/sessions/contrib/chat/browser/newSession.ts b/src/vs/sessions/contrib/chat/browser/newSession.ts new file mode 100644 index 0000000000000..266a2c2e7f9f3 --- /dev/null +++ b/src/vs/sessions/contrib/chat/browser/newSession.ts @@ -0,0 +1,221 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, IDisposable } from '../../../../base/common/lifecycle.js'; +import { URI } from '../../../../base/common/uri.js'; +import { isEqual } from '../../../../base/common/resources.js'; +import { ILogService } from '../../../../platform/log/common/log.js'; +import { IChatSessionProviderOptionItem, IChatSessionsService } from '../../../../workbench/contrib/chat/common/chatSessionsService.js'; +import { IsolationMode } from './sessionTargetPicker.js'; +import { AgentSessionProviders } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessions.js'; +import { IActiveSessionItem } from '../../sessions/browser/sessionsManagementService.js'; + +import { IChatRequestVariableEntry } from '../../../../workbench/contrib/chat/common/attachments/chatVariableEntries.js'; + +export type NewSessionChangeType = 'repoUri' | 'isolationMode' | 'branch' | 'options'; + +/** + * A new session represents a session being configured before the first + * request is sent. It holds the user's selections (repoUri, isolationMode) + * and fires a single event when any property changes. + */ +export interface INewSession extends IDisposable { + readonly resource: URI; + readonly target: AgentSessionProviders; + readonly activeSessionItem: IActiveSessionItem; + readonly repoUri: URI | undefined; + readonly isolationMode: IsolationMode; + readonly branch: string | undefined; + readonly modelId: string | undefined; + readonly query: string | undefined; + readonly attachedContext: IChatRequestVariableEntry[] | undefined; + readonly selectedOptions: ReadonlyMap; + readonly onDidChange: Event; + setRepoUri(uri: URI): void; + setIsolationMode(mode: IsolationMode): void; + setBranch(branch: string | undefined): void; + setModelId(modelId: string | undefined): void; + setQuery(query: string): void; + setAttachedContext(context: IChatRequestVariableEntry[] | undefined): void; + setOption(optionId: string, value: IChatSessionProviderOptionItem | string): void; +} + +const REPOSITORY_OPTION_ID = 'repository'; +const BRANCH_OPTION_ID = 'branch'; +const ISOLATION_OPTION_ID = 'isolation'; + +/** + * Local new session for Background agent sessions. + * Fires `onDidChange` for both `repoUri` and `isolationMode` changes. + * Notifies the extension service with session options for each property change. + */ +export class LocalNewSession extends Disposable implements INewSession { + + private _repoUri: URI | undefined; + private _isolationMode: IsolationMode = 'worktree'; + private _branch: string | undefined; + private _modelId: string | undefined; + private _query: string | undefined; + private _attachedContext: IChatRequestVariableEntry[] | undefined; + + private readonly _onDidChange = this._register(new Emitter()); + readonly onDidChange: Event = this._onDidChange.event; + + readonly target = AgentSessionProviders.Background; + readonly selectedOptions = new Map(); + + get resource(): URI { return this.activeSessionItem.resource; } + get repoUri(): URI | undefined { return this._repoUri; } + get isolationMode(): IsolationMode { return this._isolationMode; } + get branch(): string | undefined { return this._branch; } + get modelId(): string | undefined { return this._modelId; } + get query(): string | undefined { return this._query; } + get attachedContext(): IChatRequestVariableEntry[] | undefined { return this._attachedContext; } + + constructor( + readonly activeSessionItem: IActiveSessionItem, + defaultRepoUri: URI | undefined, + private readonly chatSessionsService: IChatSessionsService, + private readonly logService: ILogService, + ) { + super(); + if (defaultRepoUri) { + this._repoUri = defaultRepoUri; + this.setOption(REPOSITORY_OPTION_ID, defaultRepoUri.fsPath); + } + } + + setRepoUri(uri: URI): void { + this._repoUri = uri; + this._isolationMode = 'workspace'; + this._branch = undefined; + this._onDidChange.fire('repoUri'); + this.setOption(REPOSITORY_OPTION_ID, uri.fsPath); + } + + setIsolationMode(mode: IsolationMode): void { + if (this._isolationMode !== mode) { + this._isolationMode = mode; + this._onDidChange.fire('isolationMode'); + this.setOption(ISOLATION_OPTION_ID, mode); + } + } + + setBranch(branch: string | undefined): void { + if (this._branch !== branch) { + this._branch = branch; + this._onDidChange.fire('branch'); + this.setOption(BRANCH_OPTION_ID, branch ?? ''); + } + } + + setModelId(modelId: string | undefined): void { + this._modelId = modelId; + } + + setQuery(query: string): void { + this._query = query; + } + + setAttachedContext(context: IChatRequestVariableEntry[] | undefined): void { + this._attachedContext = context; + } + + setOption(optionId: string, value: IChatSessionProviderOptionItem | string): void { + if (typeof value === 'string') { + this.selectedOptions.set(optionId, { id: value, name: value }); + } else { + this.selectedOptions.set(optionId, value); + } + this.chatSessionsService.notifySessionOptionsChange( + this.resource, + [{ optionId, value }] + ).catch((err) => this.logService.error(`Failed to notify session option ${optionId} change:`, err)); + } +} + +/** + * Remote new session for Cloud agent sessions. + * Fires `onDidChange` and notifies the extension service when `repoUri` changes. + * Ignores `isolationMode` (not relevant for cloud). + */ +export class RemoteNewSession extends Disposable implements INewSession { + + private _repoUri: URI | undefined; + private _isolationMode: IsolationMode = 'worktree'; + private _modelId: string | undefined; + private _query: string | undefined; + private _attachedContext: IChatRequestVariableEntry[] | undefined; + + private readonly _onDidChange = this._register(new Emitter()); + readonly onDidChange: Event = this._onDidChange.event; + + readonly selectedOptions = new Map(); + + get resource(): URI { return this.activeSessionItem.resource; } + get repoUri(): URI | undefined { return this._repoUri; } + get isolationMode(): IsolationMode { return this._isolationMode; } + get branch(): string | undefined { return undefined; } + get modelId(): string | undefined { return this._modelId; } + get query(): string | undefined { return this._query; } + get attachedContext(): IChatRequestVariableEntry[] | undefined { return this._attachedContext; } + + constructor( + readonly activeSessionItem: IActiveSessionItem, + readonly target: AgentSessionProviders, + private readonly chatSessionsService: IChatSessionsService, + private readonly logService: ILogService, + ) { + super(); + + // Listen for extension-driven option group and session option changes + this._register(this.chatSessionsService.onDidChangeOptionGroups(() => { + this._onDidChange.fire('options'); + })); + this._register(this.chatSessionsService.onDidChangeSessionOptions((e: URI | undefined) => { + if (isEqual(this.resource, e)) { + this._onDidChange.fire('options'); + } + })); + } + + setRepoUri(uri: URI): void { + this._repoUri = uri; + this._onDidChange.fire('repoUri'); + this.setOption('repository', uri.fsPath); + } + + setIsolationMode(_mode: IsolationMode): void { + // No-op for remote sessions — isolation mode is not relevant + } + + setBranch(_branch: string | undefined): void { + // No-op for remote sessions — branch is not relevant + } + + setModelId(modelId: string | undefined): void { + this._modelId = modelId; + } + + setQuery(query: string): void { + this._query = query; + } + + setAttachedContext(context: IChatRequestVariableEntry[] | undefined): void { + this._attachedContext = context; + } + + setOption(optionId: string, value: IChatSessionProviderOptionItem | string): void { + if (typeof value !== 'string') { + this.selectedOptions.set(optionId, value); + } + this._onDidChange.fire('options'); + this.chatSessionsService.notifySessionOptionsChange( + this.resource, + [{ optionId, value }] + ).catch((err) => this.logService.error(`Failed to notify extension of ${optionId} change:`, err)); + } +} diff --git a/src/vs/sessions/contrib/chat/browser/sessionTargetPicker.ts b/src/vs/sessions/contrib/chat/browser/sessionTargetPicker.ts new file mode 100644 index 0000000000000..1d762632f9f71 --- /dev/null +++ b/src/vs/sessions/contrib/chat/browser/sessionTargetPicker.ts @@ -0,0 +1,274 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as dom from '../../../../base/browser/dom.js'; +import { Codicon } from '../../../../base/common/codicons.js'; +import { ThemeIcon } from '../../../../base/common/themables.js'; +import { toAction } from '../../../../base/common/actions.js'; +import { Radio } from '../../../../base/browser/ui/radio/radio.js'; +import { DropdownMenuActionViewItem } from '../../../../base/browser/ui/dropdown/dropdownActionViewItem.js'; +import { Emitter, Event } from '../../../../base/common/event.js'; +import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js'; +import { renderIcon } from '../../../../base/browser/ui/iconLabel/iconLabels.js'; +import { localize } from '../../../../nls.js'; +import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; +import { AgentSessionProviders } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessions.js'; +import { IGitRepository } from '../../../../workbench/contrib/git/common/gitService.js'; +import { INewSession } from './newSession.js'; + +/** + * A dropdown menu action item that shows an icon, a text label, and a chevron. + */ +class LabeledDropdownMenuActionViewItem extends DropdownMenuActionViewItem { + protected override renderLabel(element: HTMLElement): null { + const classNames = typeof this.options.classNames === 'string' + ? this.options.classNames.split(/\s+/g).filter(s => !!s) + : (this.options.classNames ?? []); + if (classNames.length > 0) { + const icon = dom.append(element, dom.$('span')); + icon.classList.add('codicon', ...classNames); + } + + const label = dom.append(element, dom.$('span.sessions-chat-dropdown-label')); + label.textContent = this._action.label; + + dom.append(element, renderIcon(Codicon.chevronDown)); + + return null; + } +} + +// #region --- Session Target Picker --- + +/** + * A self-contained widget for selecting the session target (Local vs Cloud). + * Encapsulates state, events, and rendering. Can be placed anywhere in the view. + */ +export class SessionTargetPicker extends Disposable { + + private _selectedTarget: AgentSessionProviders; + private _allowedTargets: AgentSessionProviders[]; + + private readonly _onDidChangeTarget = this._register(new Emitter()); + readonly onDidChangeTarget: Event = this._onDidChangeTarget.event; + + private readonly _renderDisposables = this._register(new DisposableStore()); + private _container: HTMLElement | undefined; + + get selectedTarget(): AgentSessionProviders { + return this._selectedTarget; + } + + constructor( + allowedTargets: AgentSessionProviders[], + defaultTarget: AgentSessionProviders, + ) { + super(); + this._allowedTargets = allowedTargets; + this._selectedTarget = allowedTargets.includes(defaultTarget) + ? defaultTarget + : allowedTargets[0]; + } + + /** + * Renders the target radio (Local / Cloud) into the given container. + */ + render(container: HTMLElement): void { + this._container = container; + this._renderRadio(); + } + + updateAllowedTargets(targets: AgentSessionProviders[]): void { + if (targets.length === 0) { + return; + } + this._allowedTargets = targets; + if (!targets.includes(this._selectedTarget)) { + this._selectedTarget = targets[0]; + this._onDidChangeTarget.fire(this._selectedTarget); + } + if (this._container) { + this._renderRadio(); + } + } + + private _renderRadio(): void { + if (!this._container) { + return; + } + + this._renderDisposables.clear(); + dom.clearNode(this._container); + + if (this._allowedTargets.length === 0) { + return; + } + + const targets = [AgentSessionProviders.Background, AgentSessionProviders.Cloud].filter(t => this._allowedTargets.includes(t)); + const activeIndex = targets.indexOf(this._selectedTarget); + + const radio = new Radio({ + items: targets.map(target => ({ + text: getTargetLabel(target), + isActive: target === this._selectedTarget, + })), + }); + this._renderDisposables.add(radio); + this._container.appendChild(radio.domNode); + + if (activeIndex >= 0) { + radio.setActiveItem(activeIndex); + } + + this._renderDisposables.add(radio.onDidSelect(index => { + const target = targets[index]; + if (this._selectedTarget !== target) { + this._selectedTarget = target; + this._onDidChangeTarget.fire(target); + } + })); + } +} + +function getTargetLabel(provider: AgentSessionProviders): string { + switch (provider) { + case AgentSessionProviders.Local: + case AgentSessionProviders.Background: + return localize('chat.session.providerLabel.local', "Local"); + case AgentSessionProviders.Cloud: + return localize('chat.session.providerLabel.cloud', "Cloud"); + case AgentSessionProviders.Claude: + return 'Claude'; + case AgentSessionProviders.Codex: + return 'Codex'; + case AgentSessionProviders.Growth: + return 'Growth'; + } +} + +// #endregion + +// #region --- Isolation Mode Picker --- + +export type IsolationMode = 'worktree' | 'workspace'; + +/** + * A self-contained widget for selecting the isolation mode (Worktree vs Folder). + * Encapsulates state, events, and rendering. Can be placed anywhere in the view. + */ +export class IsolationModePicker extends Disposable { + + private _isolationMode: IsolationMode = 'worktree'; + private _newSession: INewSession | undefined; + private _repository: IGitRepository | undefined; + + private readonly _onDidChange = this._register(new Emitter()); + readonly onDidChange: Event = this._onDidChange.event; + + private readonly _renderDisposables = this._register(new DisposableStore()); + private _container: HTMLElement | undefined; + private _dropdownContainer: HTMLElement | undefined; + + get isolationMode(): IsolationMode { + return this._isolationMode; + } + + constructor( + @IContextMenuService private readonly contextMenuService: IContextMenuService, + ) { + super(); + } + + /** + * Sets the pending session that this picker writes to. + */ + setNewSession(session: INewSession | undefined): void { + this._newSession = session; + } + + /** + * Sets the git repository. When undefined, worktree option is hidden + * and isolation mode falls back to 'workspace'. + */ + setRepository(repository: IGitRepository | undefined): void { + this._repository = repository; + if (repository) { + this._setMode('worktree'); + } else if (this._isolationMode === 'worktree') { + this._setMode('workspace'); + } + this._renderDropdown(); + } + + /** + * Renders the isolation mode dropdown into the given container. + */ + render(container: HTMLElement): void { + this._container = container; + this._dropdownContainer = dom.append(container, dom.$('.sessions-chat-local-mode-left')); + this._renderDropdown(); + } + + /** + * Shows or hides the picker. + */ + setVisible(visible: boolean): void { + if (this._container) { + this._container.style.visibility = visible ? '' : 'hidden'; + } + } + + private _renderDropdown(): void { + if (!this._dropdownContainer) { + return; + } + + this._renderDisposables.clear(); + dom.clearNode(this._dropdownContainer); + + const modeLabel = this._isolationMode === 'worktree' + ? localize('isolationMode.worktree', "Worktree") + : localize('isolationMode.folder', "Folder"); + const modeIcon = this._isolationMode === 'worktree' ? Codicon.worktree : Codicon.folder; + const isDisabled = !this._repository; + + const modeAction = toAction({ id: 'isolationMode', label: modeLabel, run: () => { } }); + const modeDropdown = this._renderDisposables.add(new LabeledDropdownMenuActionViewItem( + modeAction, + { + getActions: () => isDisabled ? [] : [ + toAction({ + id: 'isolationMode.worktree', + label: localize('isolationMode.worktree', "Worktree"), + checked: this._isolationMode === 'worktree', + run: () => this._setMode('worktree'), + }), + toAction({ + id: 'isolationMode.folder', + label: localize('isolationMode.folder', "Folder"), + checked: this._isolationMode === 'workspace', + run: () => this._setMode('workspace'), + }), + ], + }, + this.contextMenuService, + { classNames: [...ThemeIcon.asClassNameArray(modeIcon)] } + )); + const modeSlot = dom.append(this._dropdownContainer, dom.$('.sessions-chat-picker-slot')); + modeDropdown.render(modeSlot); + modeSlot.classList.toggle('disabled', isDisabled); + } + + private _setMode(mode: IsolationMode): void { + if (this._isolationMode !== mode) { + this._isolationMode = mode; + this._newSession?.setIsolationMode(mode); + this._onDidChange.fire(mode); + this._renderDropdown(); + } + } +} + +// #endregion diff --git a/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.ts b/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.ts index 8ac2ffd7a0c6e..d3a7e96111910 100644 --- a/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.ts +++ b/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.ts @@ -16,15 +16,15 @@ import { ChatViewId, ChatViewPaneTarget, IChatWidgetService } from '../../../../ import { ChatViewPane } from '../../../../workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js'; import { IChatSessionItem, IChatSessionProviderOptionItem, IChatSessionsService } from '../../../../workbench/contrib/chat/common/chatSessionsService.js'; import { IChatService, IChatSendRequestOptions } from '../../../../workbench/contrib/chat/common/chatService/chatService.js'; -import { ChatAgentLocation } from '../../../../workbench/contrib/chat/common/constants.js'; +import { ChatAgentLocation, ChatModeKind } from '../../../../workbench/contrib/chat/common/constants.js'; import { IAgentSession, isAgentSession } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessionsModel.js'; import { IAgentSessionsService } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessionsService.js'; import { LocalChatSessionUri } from '../../../../workbench/contrib/chat/common/model/chatUri.js'; import { ICommandService } from '../../../../platform/commands/common/commands.js'; import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js'; -import { IWorkspaceEditingService } from '../../../../workbench/services/workspaces/common/workspaceEditing.js'; import { IViewsService } from '../../../../workbench/services/views/common/viewsService.js'; import { AgentSessionProviders } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessions.js'; +import { INewSession, LocalNewSession, RemoteNewSession } from '../../chat/browser/newSession.js'; export const IsNewChatSessionContext = new RawContextKey('isNewChatSession', true); @@ -80,11 +80,17 @@ export interface ISessionsManagementService { */ createNewPendingSession(pendingSessionResource: URI): Promise; + /** + * Create a pending session object for the given target type. + * Local sessions collect options locally; remote sessions notify the extension. + */ + createNewSessionForTarget(target: AgentSessionProviders, sessionResource: URI, defaultRepoUri?: URI): Promise; + /** * Open a new session, apply options, and send the initial request. - * This is the main entry point for the new-chat welcome widget. + * Looks up the session by resource URI and builds send options from it. */ - sendRequestForNewSession(sessionResource: URI, query: string, sendOptions: IChatSendRequestOptions, selectedOptions?: ReadonlyMap, folderUri?: URI): Promise; + sendRequestForNewSession(sessionResource: URI): Promise; /** * Commit files in a worktree and refresh the agent sessions model @@ -102,6 +108,7 @@ export class SessionsManagementService extends Disposable implements ISessionsMa private readonly _activeSession = observableValue(this, undefined); readonly activeSession: IObservable = this._activeSession; + private readonly _newSessions = new Map(); private lastSelectedSession: URI | undefined; private readonly isNewChatSessionContext: IContextKey; @@ -115,7 +122,6 @@ export class SessionsManagementService extends Disposable implements ISessionsMa @ILogService private readonly logService: ILogService, @IContextKeyService contextKeyService: IContextKeyService, @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, - @IWorkspaceEditingService private readonly workspaceEditingService: IWorkspaceEditingService, @IViewsService private readonly viewsService: IViewsService, @ICommandService private readonly commandService: ICommandService, ) { @@ -255,6 +261,19 @@ export class SessionsManagementService extends Disposable implements ISessionsMa return activeSessionItem; } + async createNewSessionForTarget(target: AgentSessionProviders, sessionResource: URI, defaultRepoUri?: URI): Promise { + const activeSessionItem = await this.createNewPendingSession(sessionResource); + + let newSession: INewSession; + if (target === AgentSessionProviders.Background || target === AgentSessionProviders.Local) { + newSession = new LocalNewSession(activeSessionItem, defaultRepoUri, this.chatSessionsService, this.logService); + } else { + newSession = new RemoteNewSession(activeSessionItem, target, this.chatSessionsService, this.logService); + } + this._newSessions.set(newSession.resource.toString(), newSession); + return newSession; + } + /** * Open an existing agent session - set it as active and reveal it. */ @@ -307,39 +326,45 @@ export class SessionsManagementService extends Disposable implements ISessionsMa this._activeSession.set(activeSessionItem, undefined); } - async sendRequestForNewSession(sessionResource: URI, query: string, sendOptions: IChatSendRequestOptions, selectedOptions?: ReadonlyMap, folderUri?: URI): Promise { - if (LocalChatSessionUri.isLocalSession(sessionResource)) { - await this.sendLocalSession(sessionResource, query, sendOptions, folderUri); - } else { - await this.sendCustomSession(sessionResource, query, sendOptions, selectedOptions); + async sendRequestForNewSession(sessionResource: URI): Promise { + const session = this._newSessions.get(sessionResource.toString()); + if (!session) { + this.logService.error(`[SessionsManagementService] No new session found for resource: ${sessionResource.toString()}`); + return; } - } - /** - * Local sessions run directly through the ChatWidget. - * Set the workspace folder, open a fresh chat view, and submit via acceptInput. - */ - private async sendLocalSession(sessionResource: URI, query: string, sendOptions: IChatSendRequestOptions, folderUri?: URI): Promise { - if (folderUri) { - await this.workspaceEditingService.updateFolders(0, this.workspaceContextService.getWorkspace().folders.length, [{ uri: folderUri }]); + const query = session.query; + if (!query) { + this.logService.error('[SessionsManagementService] No query set on session'); + return; } - await this.openSession(sessionResource); + const contribution = this.chatSessionsService.getChatSessionContribution(session.target); + const sendOptions: IChatSendRequestOptions = { + location: ChatAgentLocation.Chat, + userSelectedModelId: session.modelId, + modeInfo: { + kind: ChatModeKind.Agent, + isBuiltin: true, + modeInstructions: undefined, + modeId: 'agent', + applyCodeBlockSuggestionId: undefined, + }, + agentIdSilent: contribution?.type, + attachedContext: session.attachedContext, + }; - const widget = this.chatWidgetService.lastFocusedWidget; - if (widget) { - if (sendOptions.attachedContext?.length) { - widget.attachmentModel.addContext(...sendOptions.attachedContext); - } - widget.setInput(query); - widget.acceptInput(query); - } + await this.sendCustomSession(sessionResource, query, sendOptions, session.selectedOptions); + + // Clean up the session after sending + this._newSessions.delete(sessionResource.toString()); + session.dispose(); } /** * Custom sessions (worktree, cloud, etc.) go through the chat service. - * Apply selected options, send the request, then wait for the extension - * to create an agent session so it appears in the sidebar. + * Options have already been applied via setOption during session configuration. + * Send the request, then wait for the extension to create an agent session. */ private async sendCustomSession(sessionResource: URI, query: string, sendOptions: IChatSendRequestOptions, selectedOptions?: ReadonlyMap): Promise { // 1. Open the session - loads the model and shows the ChatViewPane From 3458c3225bdead3d02405878884ccf722875ffc8 Mon Sep 17 00:00:00 2001 From: Osvaldo Ortega Date: Fri, 20 Feb 2026 11:35:33 -0800 Subject: [PATCH 26/37] Fix model picker in welcome view --- .../contrib/chat/browser/widget/input/chatInputPart.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts index aa98e73062c3a..32a286920ce08 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts @@ -1070,7 +1070,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge models.sort((a, b) => a.metadata.name.localeCompare(b.metadata.name)); const sessionType = this.getCurrentSessionType(); - if (sessionType) { + if (sessionType && sessionType !== AgentSessionProviders.Local) { // Session has a specific chat session type - show only models that target // this session type, if any such models exist. return models.filter(entry => entry.metadata?.targetChatSessionType === sessionType && entry.metadata?.isUserSelectable); From 0057411b903ae20ff1740d9ac934ba1fd942c20c Mon Sep 17 00:00:00 2001 From: Matt Bierner <12821956+mjbvz@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:39:14 -0800 Subject: [PATCH 27/37] Hide ChatModelStore.acquire() We don't want outside callers to use `acquire` directly. Instead they should use `get` or `acquireExisting` or `acquireOrCreate` --- .../chat/common/model/chatModelStore.ts | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/vs/workbench/contrib/chat/common/model/chatModelStore.ts b/src/vs/workbench/contrib/chat/common/model/chatModelStore.ts index 268dba2ec107c..588be79a82851 100644 --- a/src/vs/workbench/contrib/chat/common/model/chatModelStore.ts +++ b/src/vs/workbench/contrib/chat/common/model/chatModelStore.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Emitter } from '../../../../../base/common/event.js'; -import { DisposableStore, IDisposable, IReference, ReferenceCollection } from '../../../../../base/common/lifecycle.js'; +import { Disposable, IDisposable, IReference, ReferenceCollection } from '../../../../../base/common/lifecycle.js'; import { ObservableMap } from '../../../../../base/common/observable.js'; import { URI } from '../../../../../base/common/uri.js'; import { ILogService } from '../../../../../platform/log/common/log.js'; @@ -27,17 +27,17 @@ export interface ChatModelStoreDelegate { willDisposeModel: (model: ChatModel) => Promise; } -export class ChatModelStore extends ReferenceCollection implements IDisposable { - private readonly _store = new DisposableStore(); +export class ChatModelStore extends Disposable implements IDisposable { + private readonly _refCollection: ReferenceCollection; private readonly _models = new ObservableMap(); private readonly _modelsToDispose = new Set(); private readonly _pendingDisposals = new Set>(); - private readonly _onDidDisposeModel = this._store.add(new Emitter()); + private readonly _onDidDisposeModel = this._register(new Emitter()); public readonly onDidDisposeModel = this._onDidDisposeModel.event; - private readonly _onDidCreateModel = this._store.add(new Emitter()); + private readonly _onDidCreateModel = this._register(new Emitter()); public readonly onDidCreateModel = this._onDidCreateModel.event; constructor( @@ -45,6 +45,16 @@ export class ChatModelStore extends ReferenceCollection implements ID @ILogService private readonly logService: ILogService, ) { super(); + + const self = this; + this._refCollection = new class extends ReferenceCollection { + protected createReferencedObject(key: string, props?: IStartSessionProps): ChatModel { + return self.createReferencedObject(key, props); + } + protected destroyReferencedObject(key: string, object: ChatModel): void { + return self.destroyReferencedObject(key, object); + } + }(); } public get observable() { @@ -71,14 +81,14 @@ export class ChatModelStore extends ReferenceCollection implements ID if (!this._models.has(key)) { return undefined; } - return this.acquire(key); + return this._refCollection.acquire(key); } public acquireOrCreate(props: IStartSessionProps): IReference { - return this.acquire(this.toKey(props.sessionResource), props); + return this._refCollection.acquire(this.toKey(props.sessionResource), props); } - protected createReferencedObject(key: string, props?: IStartSessionProps): ChatModel { + private createReferencedObject(key: string, props?: IStartSessionProps): ChatModel { this._modelsToDispose.delete(key); const existingModel = this._models.get(key); if (existingModel) { @@ -99,7 +109,7 @@ export class ChatModelStore extends ReferenceCollection implements ID return model; } - protected destroyReferencedObject(key: string, object: ChatModel): void { + private destroyReferencedObject(key: string, object: ChatModel): void { this._modelsToDispose.add(key); const promise = this.doDestroyReferencedObject(key, object); this._pendingDisposals.add(promise); @@ -135,8 +145,8 @@ export class ChatModelStore extends ReferenceCollection implements ID return uri.toString(); } - dispose(): void { - this._store.dispose(); + override dispose(): void { + super.dispose(); this._models.forEach(model => model.dispose()); } } From 73e3dbe7a29cce18b9a549e240086b2b527ee433 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 20 Feb 2026 20:47:52 +0100 Subject: [PATCH 28/37] sessions - adopt modal editor support from core (#296585) * sessions - adopt modal editor support from core * Update src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update .github/skills/agent-sessions-layout/SKILL.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/vs/workbench/services/editor/common/editorGroupFinder.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/copilot-instructions.md | 1 + .github/skills/agent-sessions-layout/SKILL.md | 3 +- .github/skills/sessions/SKILL.md | 5 +- src/vs/sessions/LAYOUT.md | 117 +++-------- src/vs/sessions/README.md | 1 - src/vs/sessions/browser/parts/editorModal.ts | 194 ------------------ src/vs/sessions/browser/style.css | 106 ---------- src/vs/sessions/browser/workbench.ts | 40 ++-- .../changesView/browser/changesView.ts | 54 +++-- .../browser/configuration.contribution.ts | 3 +- .../browser/parts/editor/editorCommands.ts | 5 +- .../browser/workbench.contribution.ts | 14 +- .../editor/common/editorGroupFinder.ts | 17 +- .../test/browser/modalEditorGroup.test.ts | 79 +++++++ .../preferences/browser/preferencesService.ts | 2 +- 15 files changed, 187 insertions(+), 454 deletions(-) delete mode 100644 src/vs/sessions/browser/parts/editorModal.ts diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 3ec839df4ef52..f121b855a0d42 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -140,6 +140,7 @@ function f(x: number, y: string): void { } - Do not duplicate code. Always look for existing utility functions, helpers, or patterns in the codebase before implementing new functionality. Reuse and extend existing code whenever possible. - You MUST deal with disposables by registering them immediately after creation for later disposal. Use helpers such as `DisposableStore`, `MutableDisposable` or `DisposableMap`. Do NOT register a disposable to the containing class if the object is created within a method that is called repeadedly to avoid leaks. Instead, return a `IDisposable` from such method and let the caller register it. - You MUST NOT use storage keys of another component only to make changes to that component. You MUST come up with proper API to change another component. +- Use `IEditorService` to open editors instead of `IEditorGroupsService.activeGroup.openEditor` to ensure that the editor opening logic is properly followed and to avoid bypassing important features such as `revealIfOpened` or `preserveFocus`. ## Learnings - Minimize the amount of assertions in tests. Prefer one snapshot-style `assert.deepStrictEqual` over multiple precise assertions, as they are much more difficult to understand and to update. diff --git a/.github/skills/agent-sessions-layout/SKILL.md b/.github/skills/agent-sessions-layout/SKILL.md index f818e2dc75e08..a76794d9c7d8a 100644 --- a/.github/skills/agent-sessions-layout/SKILL.md +++ b/.github/skills/agent-sessions-layout/SKILL.md @@ -61,7 +61,6 @@ When proposing or implementing changes, follow these rules from the spec: | `sessions/browser/style.css` | Layout-specific styles | | `sessions/browser/parts/` | Agent session part implementations | | `sessions/browser/parts/titlebarPart.ts` | Titlebar part, MainTitlebarPart, AuxiliaryTitlebarPart, TitleService | -| `sessions/browser/parts/editorModal.ts` | Editor modal overlay | | `sessions/browser/parts/sidebarPart.ts` | Sidebar part (with footer) | | `sessions/browser/parts/chatBarPart.ts` | Chat Bar part | | `sessions/browser/widget/` | Agent sessions chat widget | @@ -76,5 +75,5 @@ After modifying layout code: 1. Verify the build compiles without errors via the `VS Code - Build` task 2. Ensure the grid structure matches the spec's visual representation 3. Confirm part visibility toggling works correctly (show/hide/maximize) -4. Test the editor modal opens/closes properly on editor events +4. Test that editors open in the `ModalEditorPart` overlay and that it closes properly 5. Verify sidebar footer renders with account widget diff --git a/.github/skills/sessions/SKILL.md b/.github/skills/sessions/SKILL.md index 010c3779a7253..4889632066bf7 100644 --- a/.github/skills/sessions/SKILL.md +++ b/.github/skills/sessions/SKILL.md @@ -84,7 +84,6 @@ src/vs/sessions/ │ ├── auxiliaryBarPart.ts # Auxiliary Bar (with run script dropdown) │ ├── panelPart.ts # Panel (terminal, output, etc.) │ ├── projectBarPart.ts # Project bar (folder entries) -│ ├── editorModal.ts # Editor modal overlay │ ├── agentSessionsChatInputPart.ts # Chat input part adapter │ ├── agentSessionsChatWelcomePart.ts # Welcome view (mascot + target buttons + pickers) │ └── media/ # Part CSS files @@ -134,13 +133,13 @@ Use the `agent-sessions-layout` skill for detailed guidance on the layout. Key p | Chat Bar | Visible | Primary chat widget | | Auxiliary Bar | Visible | Changes view, etc. | | Panel | Hidden | Terminal, output | -| Editor | Hidden | Modal overlay, auto-shows on editor open | +| Editor | Hidden | Main part hidden; editors open via `MODAL_GROUP` into `ModalEditorPart` | **Not included:** Activity Bar, Status Bar, Banner. ### 4.3 Editor Modal -Editors appear as modal overlays (80% of workbench, min 400×300, max 1200×900). The modal auto-shows when an editor opens and auto-hides when all editors close. Click backdrop, press Escape, or click X to dismiss. +The main editor part is hidden (`display:none`). All editors open via `MODAL_GROUP` into the standard `ModalEditorPart` overlay (created on-demand by `EditorParts.createModalEditorPart`). The sessions configuration sets `workbench.editor.useModal` to `'on'`, which causes `findGroup()` to redirect all editor opens to the modal. Click backdrop or press Escape to dismiss. ## 5. Chat Widget diff --git a/src/vs/sessions/LAYOUT.md b/src/vs/sessions/LAYOUT.md index 1448a8a3dca49..7cd6cc059bade 100644 --- a/src/vs/sessions/LAYOUT.md +++ b/src/vs/sessions/LAYOUT.md @@ -27,20 +27,9 @@ The Agent Sessions Workbench (`Workbench` in `sessions/browser/workbench.ts`) pr │ │ Panel │ └─────────┴───────────────────────────────────────────────────────┘ - ┌───────────────────────────────────────┐ - │ ╔═══════════════════════════╗ │ - │ ║ Editor Modal Overlay ║ │ - │ ║ ┌─────────────────────┐ ║ │ - │ ║ │ [header] [X] │ ║ │ - │ ║ ├─────────────────────┤ ║ │ - │ ║ │ │ ║ │ - │ ║ │ Editor Part │ ║ │ - │ ║ │ │ ║ │ - │ ║ │ │ ║ │ - │ ║ └─────────────────────┘ ║ │ - │ ╚═══════════════════════════╝ │ - └───────────────────────────────────────┘ - (shown when editors are open) +Editors open via MODAL_GROUP into the standard ModalEditorPart overlay +(created on-demand by EditorParts.createModalEditorPart). The main +editor part exists but is hidden (display:none) for future use. ``` ### 2.2 Parts @@ -52,7 +41,7 @@ The Agent Sessions Workbench (`Workbench` in `sessions/browser/workbench.ts`) pr | Titlebar | `Parts.TITLEBAR_PART` | Top of right section | Always visible | — | | Sidebar | `Parts.SIDEBAR_PART` | Left, spans full height from top to bottom | Visible | `ViewContainerLocation.Sidebar` | | Chat Bar | `Parts.CHATBAR_PART` | Top-right section, takes remaining width | Visible | `ViewContainerLocation.ChatBar` | -| Editor | `Parts.EDITOR_PART` | **Modal overlay** (not in grid) | Hidden | — | +| Editor | `Parts.EDITOR_PART` | Hidden main part (not in grid); editors open via `MODAL_GROUP` into `ModalEditorPart` overlay | Hidden | — | | Auxiliary Bar | `Parts.AUXILIARYBAR_PART` | Top-right section, right side | Visible | `ViewContainerLocation.AuxiliaryBar` | | Panel | `Parts.PANEL_PART` | Below Chat Bar and Auxiliary Bar (right section only) | Hidden | `ViewContainerLocation.Panel` | @@ -180,87 +169,37 @@ This structure places the sidebar at the root level spanning the full window hei | Sidebar | 300px width | | Auxiliary Bar | 300px width | | Chat Bar | Remaining space | -| Editor Modal | 80% of workbench (min 400x300, max 1200x900), calculated in TypeScript | | Panel | 300px height | | Titlebar | Determined by `minimumHeight` (~30px) | ### 4.3 Editor Modal -The Editor part is rendered as a **modal overlay** rather than being part of the grid. This provides a focused editing experience that hovers above the main workbench layout. +The main editor part is created but hidden (`display:none`). It exists for future use but is not currently visible. All editors are forced to open in the `ModalEditorPart` overlay via the standard `createModalEditorPart()` mechanism. -#### Modal Structure +#### How It Works -``` -EditorModal -├── Overlay (semi-transparent backdrop) -├── Container (centered dialog) -│ ├── Header (32px, contains close button) -│ └── Content (editor part fills remaining space) -``` +The sessions configuration sets `workbench.editor.useModal` to `'on'` (in `contrib/configuration/browser/configuration.contribution.ts`). This causes `findGroup()` in `editorGroupFinder.ts` to redirect all editor opens (that do not specify an explicit preferred group) to `createModalEditorPart()`, which creates the standard workbench `ModalEditorPart` overlay on-demand. + +When the setting is `'on'`: +- All editors without an explicit preferred group open in the modal editor part +- The modal is not auto-closed when editors open without explicit `MODAL_GROUP` as preferred group #### Behavior | Trigger | Action | |---------|--------| -| Editor opens (`onWillOpenEditor`) | Modal shows automatically | -| All editors close | Modal hides automatically | +| Any editor opens (no explicit group) | `ModalEditorPart` overlay created/reused automatically | +| All editors closed in modal | Modal closes and is disposed | | Click backdrop | Close all editors, hide modal | -| Click close button (X) | Close all editors, hide modal | -| Press Escape key | Close all editors, hide modal | - -#### Modal Sizing +| Press Escape | Close all editors, hide modal | -Modal dimensions are calculated in TypeScript rather than CSS. The `EditorModal.layout()` method receives workbench dimensions and computes the modal size with constraints: - -| Property | Value | Constant | -|----------|-------|----------| -| Size Percentage | 80% of workbench | `MODAL_SIZE_PERCENTAGE = 0.8` | -| Max Width | 1200px | `MODAL_MAX_WIDTH = 1200` | -| Max Height | 900px | `MODAL_MAX_HEIGHT = 900` | -| Min Width | 400px | `MODAL_MIN_WIDTH = 400` | -| Min Height | 300px | `MODAL_MIN_HEIGHT = 300` | -| Header Height | 32px | `MODAL_HEADER_HEIGHT = 32` | - -The calculation: -```typescript -modalWidth = min(MODAL_MAX_WIDTH, max(MODAL_MIN_WIDTH, workbenchWidth * MODAL_SIZE_PERCENTAGE)) -modalHeight = min(MODAL_MAX_HEIGHT, max(MODAL_MIN_HEIGHT, workbenchHeight * MODAL_SIZE_PERCENTAGE)) -contentHeight = modalHeight - MODAL_HEADER_HEIGHT -``` +#### Configuration -#### CSS Classes - -| Class | Applied To | Notes | -|-------|------------|-------| -| `editor-modal-overlay` | Overlay container | Positioned absolute, full size | -| `editor-modal-overlay.visible` | When modal is shown | Enables pointer events | -| `editor-modal-backdrop` | Semi-transparent backdrop | Clicking closes modal | -| `editor-modal-container` | Centered modal dialog | Width/height set in TypeScript | -| `editor-modal-header` | Header with close button | Fixed 32px height | -| `editor-modal-content` | Editor content area | Width/height set in TypeScript | -| `editor-modal-visible` | Added to `mainContainer` when modal is visible | — | - -#### Implementation - -The modal is implemented in `EditorModal` class (`parts/editorModal.ts`): - -```typescript -class EditorModal extends Disposable { - // Events - readonly onDidChangeVisibility: Event; - - // State - get visible(): boolean; - - // Methods - show(): void; // Show modal using stored dimensions - hide(): void; // Hide modal - close(): void; // Close all editors, then hide - layout(workbenchWidth: number, workbenchHeight: number): void; // Store dimensions, re-layout if visible -} -``` +The setting `workbench.editor.useModal` is an enum with three values: +- `'off'`: Editors never open in a modal overlay +- `'default'`: Certain editors (e.g. Settings, Keyboard Shortcuts) may open in a modal overlay when requested via `MODAL_GROUP` +- `'on'`: All editors open in a modal overlay (used by sessions window) -The `Workbench.layout()` passes the workbench dimensions to `EditorModal.layout()`, which calculates and applies the modal size with min/max constraints. Dimensions are stored so that `show()` can use them when the modal becomes visible. --- @@ -302,9 +241,9 @@ setPartHidden(hidden: boolean, part: Parts): void - Showing a part restores the last active pane composite - **Panel Part:** - If the panel is maximized when hiding, it exits maximized state first -- **Editor Part Auto-Visibility:** - - Automatically shows when an editor is about to open (`onWillOpenEditor`) - - Automatically hides when the last editor closes (`onDidCloseEditor` + all groups empty) +- **Editor Part:** + - The main editor part is always hidden (`display:none`); `setEditorHidden()` is a no-op + - All editors open via `MODAL_GROUP` into the `ModalEditorPart` overlay, which manages its own lifecycle ### 6.2 Part Sizing @@ -386,11 +325,10 @@ Applied to `mainContainer` based on part visibility: | Class | Applied When | |-------|--------------| | `nosidebar` | Sidebar is hidden | -| `nomaineditorarea` | Editor modal is hidden | +| `nomaineditorarea` | Editor part is hidden (always applied — main editor part is permanently hidden) | | `noauxiliarybar` | Auxiliary bar is hidden | | `nochatbar` | Chat bar is hidden | | `nopanel` | Panel is hidden | -| `editor-modal-visible` | Editor modal is visible | ### 8.2 Window State Classes @@ -424,7 +362,6 @@ The Agent Sessions workbench uses specialized part implementations that extend t | Chat Bar | `ChatBarPart` | `AbstractPaneCompositePart` | `sessions/browser/parts/chatBarPart.ts` | | Titlebar | `TitlebarPart` / `MainTitlebarPart` | `Part` | `sessions/browser/parts/titlebarPart.ts` | | Project Bar | `ProjectBarPart` | `Part` | `sessions/browser/parts/projectBarPart.ts` | -| Editor Modal | `EditorModal` | `Disposable` | `sessions/browser/parts/editorModal.ts` | ### 9.2 Key Differences from Standard Parts @@ -555,7 +492,7 @@ src/vs/sessions/ │ ├── menus.ts # Agent sessions menu IDs (Menus export) │ ├── layoutActions.ts # Layout actions (toggle sidebar, secondary sidebar, panel) │ ├── paneCompositePartService.ts # AgenticPaneCompositePartService -│ ├── style.css # Layout-specific styles (including editor modal) +│ ├── style.css # Layout-specific styles │ ├── widget/ # Agent sessions chat widget │ │ ├── AGENTS_CHAT_WIDGET.md # Chat widget architecture documentation │ │ ├── agentSessionsChatWidget.ts # Main chat widget wrapper @@ -570,7 +507,6 @@ src/vs/sessions/ │ ├── panelPart.ts # Agent session panel │ ├── chatBarPart.ts # Chat Bar part implementation │ ├── projectBarPart.ts # Project bar part (folder entries, icon customization) -│ ├── editorModal.ts # Editor modal overlay implementation │ ├── parts.ts # AgenticParts enum │ ├── agentSessionsChatInputPart.ts # Chat input part adapter │ ├── agentSessionsChatWelcomePart.ts # Chat welcome part @@ -635,8 +571,8 @@ When modifying the Agent Sessions layout: 1. `constructor()` — Register error handlers 2. `startup()` — Initialize services and layout 3. `initServices()` — Set up service collection (including `TitleService`), register singleton services, set lifecycle to `Ready` -4. `initLayout()` — Get services, register layout listeners, register editor open/close listeners -5. `renderWorkbench()` — Create DOM, create parts, create editor modal, set up notifications +4. `initLayout()` — Get services, register layout listeners +5. `renderWorkbench()` — Create DOM, create parts, create hidden editor part, set up notifications 6. `createWorkbenchLayout()` — Build the grid structure 7. `createWorkbenchManagement()` — (No-op in agent sessions layout) 8. `layout()` — Perform initial layout @@ -704,6 +640,7 @@ interface IPartVisibilityState { | Date | Change | |------|--------| +| 2026-02-20 | Replaced custom `EditorModal` with standard `ModalEditorPart` via `MODAL_GROUP`; main editor part created but hidden; changed `workbench.editor.useModal` from boolean to enum (`off`/`default`/`on`); sessions config uses `on`; removed `editorModal.ts` and editor modal CSS | | 2026-02-17 | Added `-webkit-app-region: drag` to sidebar title area so it can be used to drag the window; interactive children (actions, composite bar, labels) marked `no-drag`; CSS rules scoped to `.agent-sessions-workbench` in `parts/media/sidebarPart.css` | | 2026-02-13 | Documentation sync: Updated all file names, class names, and references to match current implementation. `AgenticWorkbench` → `Workbench`, `AgenticSidebarPart` → `SidebarPart`, `AgenticAuxiliaryBarPart` → `AuxiliaryBarPart`, `AgenticPanelPart` → `PanelPart`, `agenticWorkbench.ts` → `workbench.ts`, `agenticWorkbenchMenus.ts` → `menus.ts`, `agenticLayoutActions.ts` → `layoutActions.ts`, `AgenticTitleBarWidget` → `SessionsTitleBarWidget`, `AgenticTitleBarContribution` → `SessionsTitleBarContribution`. Removed references to deleted files (`sidebarRevealButton.ts`, `floatingToolbar.ts`, `agentic.contributions.ts`, `agenticTitleBarWidget.ts`). Updated pane composite architecture from `SyncDescriptor`-based to `AgenticPaneCompositePartService`. Moved account widget docs from titlebar to sidebar footer. Added documentation for sidebar footer, project bar, traffic light spacer, card appearance styling, widget directory, and new contrib structure (`accountMenu/`, `chat/`, `configuration/`, `sessions/`). Updated titlebar actions to reflect Run Script split button and Open submenu. Removed Toggle Maximize panel action (no longer registered). Updated contributions section with all current contributions and their locations. | | 2026-02-13 | Changed grid structure: sidebar now spans full window height at root level (HORIZONTAL root orientation); Titlebar moved inside right section; Grid is now `Sidebar \| [Titlebar / TopRight / Panel]` instead of `Titlebar / [Sidebar \| RightSection]`; Panel maximize now excludes both titlebar and sidebar; Floating toolbar positioning no longer depends on titlebar height | diff --git a/src/vs/sessions/README.md b/src/vs/sessions/README.md index 002781a49ce4d..d03cecc3dd160 100644 --- a/src/vs/sessions/README.md +++ b/src/vs/sessions/README.md @@ -65,7 +65,6 @@ src/vs/sessions/ │ ├── panelPart.ts ← Panel part │ ├── chatBarPart.ts ← Chat bar part │ ├── projectBarPart.ts ← Project bar part (folder entries) -│ ├── editorModal.ts ← Editor modal overlay │ ├── parts.ts ← AgenticParts enum │ ├── agentSessionsChatInputPart.ts ← Chat input part adapter │ ├── agentSessionsChatWelcomePart.ts ← Chat welcome part diff --git a/src/vs/sessions/browser/parts/editorModal.ts b/src/vs/sessions/browser/parts/editorModal.ts deleted file mode 100644 index 6b30966f5623c..0000000000000 --- a/src/vs/sessions/browser/parts/editorModal.ts +++ /dev/null @@ -1,194 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { $ } from '../../../base/browser/dom.js'; -import { mainWindow } from '../../../base/browser/window.js'; -import { Disposable } from '../../../base/common/lifecycle.js'; -import { Emitter, Event } from '../../../base/common/event.js'; -import { Codicon } from '../../../base/common/codicons.js'; -import { ThemeIcon } from '../../../base/common/themables.js'; -import { Part } from '../../../workbench/browser/part.js'; -import { Parts } from '../../../workbench/services/layout/browser/layoutService.js'; -import { IEditorGroupsService } from '../../../workbench/services/editor/common/editorGroupsService.js'; -import { mark } from '../../../base/common/performance.js'; - -const MODAL_HEADER_HEIGHT = 32; -const MODAL_SIZE_PERCENTAGE = 0.8; -const MODAL_MIN_WIDTH = 400; -const MODAL_MAX_WIDTH = 1200; -const MODAL_MIN_HEIGHT = 300; -const MODAL_MAX_HEIGHT = 900; - -export class EditorModal extends Disposable { - - private readonly _onDidChangeVisibility = this._register(new Emitter()); - readonly onDidChangeVisibility: Event = this._onDidChangeVisibility.event; - - private readonly overlay: HTMLElement; - private readonly container: HTMLElement; - private readonly content: HTMLElement; - - private _visible = false; - get visible(): boolean { return this._visible; } - - private _workbenchWidth = 0; - private _workbenchHeight = 0; - - constructor( - private readonly parentContainer: HTMLElement, - private readonly editorPart: Part, - private readonly editorGroupService: IEditorGroupsService - ) { - super(); - - // Create modal structure - this.overlay = this.createOverlay(); - this.container = this.createContainer(); - this.content = this.createContent(); - - // Assemble the modal - this.container.appendChild(this.content); - this.overlay.appendChild(this.container); - - // Create and add editor part to modal content - this.createEditorPart(); - - // Register keyboard handler - this.registerKeyboardHandler(); - - // Add to parent - this.parentContainer.appendChild(this.overlay); - } - - private createOverlay(): HTMLElement { - const overlay = $('div.editor-modal-overlay'); - - // Create backdrop (clicking closes the modal) - const backdrop = $('div.editor-modal-backdrop'); - backdrop.addEventListener('click', () => this.close()); - overlay.appendChild(backdrop); - - return overlay; - } - - private createContainer(): HTMLElement { - const container = $('div.editor-modal-container'); - container.setAttribute('role', 'dialog'); - container.setAttribute('aria-modal', 'true'); - - // Create header with close button - const header = $('div.editor-modal-header'); - const closeButton = $('button.editor-modal-close-button'); - closeButton.setAttribute('aria-label', 'Close'); - closeButton.title = 'Close (Escape)'; - const closeIcon = $('span'); - closeIcon.classList.add(...ThemeIcon.asClassNameArray(Codicon.close)); - closeButton.appendChild(closeIcon); - closeButton.addEventListener('click', () => this.close()); - header.appendChild(closeButton); - container.appendChild(header); - - return container; - } - - private createContent(): HTMLElement { - return $('div.editor-modal-content'); - } - - private createEditorPart(): void { - const editorPartContainer = document.createElement('div'); - editorPartContainer.classList.add('part', 'editor'); - editorPartContainer.id = Parts.EDITOR_PART; - editorPartContainer.setAttribute('role', 'main'); - - mark('code/willCreatePart/workbench.parts.editor'); - this.editorPart.create(editorPartContainer, { restorePreviousState: false }); - mark('code/didCreatePart/workbench.parts.editor'); - - this.content.appendChild(editorPartContainer); - } - - private registerKeyboardHandler(): void { - mainWindow.addEventListener('keydown', (e) => { - if (e.key === 'Escape' && this._visible) { - this.close(); - } - }); - } - - show(): void { - if (this._visible) { - return; - } - - this._visible = true; - this.overlay.classList.add('visible'); - - this.doLayout(); - - this._onDidChangeVisibility.fire(true); - } - - hide(): void { - if (!this._visible) { - return; - } - - this._visible = false; - this.overlay.classList.remove('visible'); - - this._onDidChangeVisibility.fire(false); - } - - close(): void { - if (!this._visible) { - return; - } - - // Close all editors in all groups - for (const group of this.editorGroupService.groups) { - group.closeAllEditors(); - } - - // Hide the modal - this.hide(); - } - - layout(workbenchWidth: number, workbenchHeight: number): void { - this._workbenchWidth = workbenchWidth; - this._workbenchHeight = workbenchHeight; - - if (this._visible) { - this.doLayout(); - } - } - - private doLayout(): void { - // Calculate modal dimensions based on workbench size with constraints - const modalWidth = Math.floor( - Math.min(MODAL_MAX_WIDTH, Math.max(MODAL_MIN_WIDTH, this._workbenchWidth * MODAL_SIZE_PERCENTAGE)) - ); - const modalHeight = Math.floor( - Math.min(MODAL_MAX_HEIGHT, Math.max(MODAL_MIN_HEIGHT, this._workbenchHeight * MODAL_SIZE_PERCENTAGE)) - ); - - // Set the modal container dimensions - this.container.style.width = `${modalWidth}px`; - this.container.style.height = `${modalHeight}px`; - - // Calculate content dimensions (subtract header height) - const contentWidth = modalWidth; - const contentHeight = modalHeight - MODAL_HEADER_HEIGHT; - - if (contentWidth > 0 && contentHeight > 0) { - // Explicitly size the content area - this.content.style.width = `${contentWidth}px`; - this.content.style.height = `${contentHeight}px`; - - // Layout the editor part - this.editorPart.layout(contentWidth, contentHeight, 0, 0); - } - } -} diff --git a/src/vs/sessions/browser/style.css b/src/vs/sessions/browser/style.css index aa371216552a2..ac055f6948e6e 100644 --- a/src/vs/sessions/browser/style.css +++ b/src/vs/sessions/browser/style.css @@ -48,112 +48,6 @@ background-color: var(--vscode-sideBar-background); } -/* Editor Modal Overlay */ -.agent-sessions-workbench .editor-modal-overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1000; - display: flex; - align-items: center; - justify-content: center; - pointer-events: none; - visibility: hidden; -} - -.agent-sessions-workbench .editor-modal-overlay.visible { - pointer-events: auto; - visibility: visible; -} - -/* Modal Backdrop */ -.agent-sessions-workbench .editor-modal-backdrop { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.4); - opacity: 0; - transition: opacity 0.15s ease-out; -} - -.agent-sessions-workbench .editor-modal-overlay.visible .editor-modal-backdrop { - opacity: 1; -} - -/* Modal Container */ -.agent-sessions-workbench .editor-modal-container { - position: relative; - display: flex; - flex-direction: column; - /* Width and height are set dynamically in TypeScript */ - background-color: var(--vscode-editor-background); - border: 1px solid var(--vscode-editorWidget-border, var(--vscode-contrastBorder)); - border-radius: 8px; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); - overflow: hidden; - transform: scale(0.95); - opacity: 0; - transition: transform 0.15s ease-out, opacity 0.15s ease-out; -} - -.agent-sessions-workbench .editor-modal-overlay.visible .editor-modal-container { - transform: scale(1); - opacity: 1; -} - -/* Modal Header with close button */ -.agent-sessions-workbench .editor-modal-header { - display: flex; - align-items: center; - justify-content: flex-end; - height: 32px; - min-height: 32px; - padding: 0 8px; - background-color: var(--vscode-editorGroupHeader-tabsBackground); - border-bottom: 1px solid var(--vscode-editorGroupHeader-tabsBorder, transparent); -} - -.agent-sessions-workbench .editor-modal-close-button { - display: flex; - align-items: center; - justify-content: center; - width: 24px; - height: 24px; - border: none; - background: transparent; - color: var(--vscode-icon-foreground); - cursor: pointer; - border-radius: 4px; -} - -.agent-sessions-workbench .editor-modal-close-button:hover { - background-color: var(--vscode-toolbar-hoverBackground); -} - -.agent-sessions-workbench .editor-modal-close-button:active { - background-color: var(--vscode-toolbar-activeBackground); -} - -/* Editor Content Area */ -.agent-sessions-workbench .editor-modal-content { - flex: 1; - overflow: hidden; - position: relative; - min-height: 0; /* Allow flexbox shrinking */ -} - -.agent-sessions-workbench .editor-modal-content > .part.editor { - position: absolute !important; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - /* ---- Chat Input ---- */ .agent-sessions-workbench .interactive-session .chat-input-container { diff --git a/src/vs/sessions/browser/workbench.ts b/src/vs/sessions/browser/workbench.ts index 3ba1a8bb2cc0c..657ad48a44aa3 100644 --- a/src/vs/sessions/browser/workbench.ts +++ b/src/vs/sessions/browser/workbench.ts @@ -59,7 +59,6 @@ import { registerNotificationCommands } from '../../workbench/browser/parts/noti import { NotificationsToasts } from '../../workbench/browser/parts/notifications/notificationsToasts.js'; import { IMarkdownRendererService } from '../../platform/markdown/browser/markdownRenderer.js'; import { EditorMarkdownCodeBlockRenderer } from '../../editor/browser/widget/markdownRenderer/browser/editorMarkdownCodeBlockRenderer.js'; -import { EditorModal } from './parts/editorModal.js'; import { SyncDescriptor } from '../../platform/instantiation/common/descriptors.js'; import { TitleService } from './parts/titlebarPart.js'; @@ -83,8 +82,7 @@ enum LayoutClasses { AUXILIARYBAR_HIDDEN = 'noauxiliarybar', CHATBAR_HIDDEN = 'nochatbar', FULLSCREEN = 'fullscreen', - MAXIMIZED = 'maximized', - EDITOR_MODAL_VISIBLE = 'editor-modal-visible' + MAXIMIZED = 'maximized' } //#endregion @@ -230,8 +228,6 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService { private panelPartView!: ISerializableView; private auxiliaryBarPartView!: ISerializableView; - // Editor modal - private editorModal!: EditorModal; private chatBarPartView!: ISerializableView; private readonly partVisibility: IPartVisibilityState = { @@ -545,8 +541,8 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService { mark(`code/didCreatePart/${id}`); } - // Create Editor Part in modal - this.createEditorModal(); + // Create Editor Part (hidden — all editors open via MODAL_GROUP) + this.createHiddenEditorPart(); // Notification Handlers this.createNotificationsHandlers(instantiationService, notificationService); @@ -592,13 +588,18 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService { return part; } - private createEditorModal(): void { - const editorPart = this.getPart(Parts.EDITOR_PART); - this.editorModal = this._register(new EditorModal( - this.mainContainer, - editorPart, - this.editorGroupService - )); + private createHiddenEditorPart(): void { + const editorPartContainer = document.createElement('div'); + editorPartContainer.classList.add('part', 'editor'); + editorPartContainer.id = Parts.EDITOR_PART; + editorPartContainer.setAttribute('role', 'main'); + editorPartContainer.style.display = 'none'; + + mark('code/willCreatePart/workbench.parts.editor'); + this.getPart(Parts.EDITOR_PART).create(editorPartContainer, { restorePreviousState: false }); + mark('code/didCreatePart/workbench.parts.editor'); + + this.mainContainer.appendChild(editorPartContainer); } private restore(lifecycleService: ILifecycleService): void { @@ -880,9 +881,6 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService { // Layout the grid widget this.workbenchGrid.layout(this._mainContainerDimension.width, this._mainContainerDimension.height); - // Layout the editor modal with workbench dimensions - this.editorModal.layout(this._mainContainerDimension.width, this._mainContainerDimension.height); - // Emit as event this.handleContainerDidLayout(this.mainContainer, this._mainContainerDimension); } @@ -1106,14 +1104,6 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService { this.partVisibility.editor = !hidden; this.mainContainer.classList.toggle(LayoutClasses.MAIN_EDITOR_AREA_HIDDEN, hidden); - this.mainContainer.classList.toggle(LayoutClasses.EDITOR_MODAL_VISIBLE, !hidden); - - // Show/hide modal - if (hidden) { - this.editorModal.hide(); - } else { - this.editorModal.show(); - } } private setPanelHidden(hidden: boolean): void { diff --git a/src/vs/sessions/contrib/changesView/browser/changesView.ts b/src/vs/sessions/contrib/changesView/browser/changesView.ts index a5e7e3e70a876..973e8e2ba1b4b 100644 --- a/src/vs/sessions/contrib/changesView/browser/changesView.ts +++ b/src/vs/sessions/contrib/changesView/browser/changesView.ts @@ -52,7 +52,7 @@ import { chatEditingWidgetFileStateContextKey, hasAppliedChatEditsContextKey, ha import { getChatSessionType } from '../../../../workbench/contrib/chat/common/model/chatUri.js'; import { createFileIconThemableTreeContainerScope } from '../../../../workbench/contrib/files/browser/views/explorerView.js'; import { IActivityService, NumberBadge } from '../../../../workbench/services/activity/common/activity.js'; -import { ACTIVE_GROUP, IEditorService, SIDE_GROUP } from '../../../../workbench/services/editor/common/editorService.js'; +import { IEditorService, MODAL_GROUP, SIDE_GROUP } from '../../../../workbench/services/editor/common/editorService.js'; import { IExtensionService } from '../../../../workbench/services/extensions/common/extensions.js'; import { IWorkbenchLayoutService } from '../../../../workbench/services/layout/browser/layoutService.js'; import { ISessionsManagementService } from '../../sessions/browser/sessionsManagementService.js'; @@ -656,39 +656,53 @@ export class ChangesViewPane extends ViewPane { if (this.tree) { const tree = this.tree; - this.renderDisposables.add(tree.onDidOpen(async (e) => { - if (!e.element) { - return; - } - - // Ignore folder elements - only open files - if (!isChangesFileItem(e.element)) { - return; - } + const openFileItem = (item: IChangesFileItem, items: IChangesFileItem[], sideBySide: boolean) => { + const { uri: modifiedFileUri, originalUri, isDeletion } = item; + const currentIndex = items.indexOf(item); + + const navigation = { + total: items.length, + current: currentIndex, + navigate: (index: number) => { + const target = items[index]; + if (target) { + openFileItem(target, items, false); + } + } + }; - const { uri: modifiedFileUri, originalUri, isDeletion } = e.element; + const group = sideBySide ? SIDE_GROUP : MODAL_GROUP; if (isDeletion && originalUri) { - await this.editorService.openEditor({ + this.editorService.openEditor({ resource: originalUri, - options: e.editorOptions - }, e.sideBySide ? SIDE_GROUP : ACTIVE_GROUP); + options: { modal: { navigation } } + }, group); return; } if (originalUri) { - await this.editorService.openEditor({ + this.editorService.openEditor({ original: { resource: originalUri }, modified: { resource: modifiedFileUri }, - options: e.editorOptions - }, e.sideBySide ? SIDE_GROUP : ACTIVE_GROUP); + options: { modal: { navigation } } + }, group); return; } - await this.editorService.openEditor({ + this.editorService.openEditor({ resource: modifiedFileUri, - options: e.editorOptions - }, e.sideBySide ? SIDE_GROUP : ACTIVE_GROUP); + options: { modal: { navigation } } + }, group); + }; + + this.renderDisposables.add(tree.onDidOpen((e) => { + if (!e.element || !isChangesFileItem(e.element)) { + return; + } + + const items = combinedEntriesObs.get(); + openFileItem(e.element, items, e.sideBySide); })); } diff --git a/src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts b/src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts index 57de7b183e99a..73601b49ce12d 100644 --- a/src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts +++ b/src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts @@ -36,7 +36,8 @@ Registry.as(Extensions.Configuration).registerDefaultCon 'workbench.startupEditor': 'none', 'workbench.tips.enabled': false, 'workbench.layoutControl.type': 'toggles', - 'workbench.editor.allowOpenInModalEditor': false, + 'workbench.editor.useModal': 'on', + 'workbench.editor.labelFormat': 'short', 'window.menuStyle': 'custom', 'window.dialogStyle': 'custom', diff --git a/src/vs/workbench/browser/parts/editor/editorCommands.ts b/src/vs/workbench/browser/parts/editor/editorCommands.ts index 5fd906f1d8585..961340c6548c7 100644 --- a/src/vs/workbench/browser/parts/editor/editorCommands.ts +++ b/src/vs/workbench/browser/parts/editor/editorCommands.ts @@ -27,7 +27,7 @@ import { ITelemetryService } from '../../../../platform/telemetry/common/telemet import { ActiveGroupEditorsByMostRecentlyUsedQuickAccess } from './editorQuickAccess.js'; import { SideBySideEditor } from './sideBySideEditor.js'; import { TextDiffEditor } from './textDiffEditor.js'; -import { ActiveEditorCanSplitInGroupContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupLockedContext, ActiveEditorStickyContext, EditorPartModalContext, EditorPartModalMaximizedContext, EditorPartModalNavigationContext, MultipleEditorGroupsContext, SideBySideEditorActiveContext, TextCompareEditorActiveContext } from '../../../common/contextkeys.js'; +import { ActiveEditorCanSplitInGroupContext, ActiveEditorGroupEmptyContext, ActiveEditorGroupLockedContext, ActiveEditorStickyContext, EditorPartModalContext, EditorPartModalMaximizedContext, EditorPartModalNavigationContext, IsSessionsWindowContext, MultipleEditorGroupsContext, SideBySideEditorActiveContext, TextCompareEditorActiveContext } from '../../../common/contextkeys.js'; import { CloseDirection, EditorInputCapabilities, EditorsOrder, IResourceDiffEditorInput, IUntitledTextResourceEditorInput, isEditorInputWithOptionsAndGroup } from '../../../common/editor.js'; import { EditorInput } from '../../../common/editor/editorInput.js'; import { SideBySideEditorInput } from '../../../common/editor/sideBySideEditorInput.js'; @@ -1422,7 +1422,8 @@ function registerModalEditorCommands(): void { menu: { id: MenuId.ModalEditorTitle, group: 'navigation', - order: 0 + order: 0, + when: IsSessionsWindowContext.negate() } }); } diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts index b1c5637a750c3..a14964c0ef4b4 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts @@ -349,10 +349,16 @@ const registry = Registry.as(ConfigurationExtensions.Con 'description': localize('revealIfOpen', "Controls whether an editor is revealed in any of the visible groups if opened. If disabled, an editor will prefer to open in the currently active editor group. If enabled, an already opened editor will be revealed instead of opened again in the currently active editor group. Note that there are some cases where this setting is ignored, such as when forcing an editor to open in a specific group or to the side of the currently active group."), 'default': false }, - 'workbench.editor.allowOpenInModalEditor': { - 'type': 'boolean', - 'description': localize('allowOpenInModalEditor', "Controls whether editors can be opened in a modal overlay. When enabled, certain editors such as Settings and Keyboard Shortcuts may open in a centered modal overlay instead of as a regular editor tab."), - 'default': product.quality !== 'stable', // TODO@bpasero figure out the default for stable + 'workbench.editor.useModal': { + 'type': 'string', + 'enum': ['off', 'default', 'on'], + 'enumDescriptions': [ + localize('useModal.off', "Editors never open in a modal overlay."), + localize('useModal.default', "Certain editors such as Settings and Keyboard Shortcuts may open in a centered modal overlay."), + localize('useModal.on', "All editors open in a centered modal overlay."), + ], + 'description': localize('useModal', "Controls whether editors open in a modal overlay."), + 'default': product.quality !== 'stable' ? 'default' : 'off', tags: ['experimental'], experiment: { mode: 'auto' diff --git a/src/vs/workbench/services/editor/common/editorGroupFinder.ts b/src/vs/workbench/services/editor/common/editorGroupFinder.ts index f46747726b722..af149b8102874 100644 --- a/src/vs/workbench/services/editor/common/editorGroupFinder.ts +++ b/src/vs/workbench/services/editor/common/editorGroupFinder.ts @@ -29,15 +29,16 @@ export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOpt const group = doFindGroup(editor, preferredGroup, editorGroupService, configurationService); if (group instanceof Promise) { - return group.then(group => handleGroupResult(group, editor, preferredGroup, editorGroupService)); + return group.then(group => handleGroupResult(group, editor, preferredGroup, editorGroupService, configurationService)); } - return handleGroupResult(group, editor, preferredGroup, editorGroupService); + return handleGroupResult(group, editor, preferredGroup, editorGroupService, configurationService); } -function handleGroupResult(group: IEditorGroup, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService): [IEditorGroup, EditorActivation | undefined] { +function handleGroupResult(group: IEditorGroup, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService, configurationService: IConfigurationService): [IEditorGroup, EditorActivation | undefined] { const modalEditorPart = editorGroupService.activeModalEditorPart; - if (modalEditorPart && preferredGroup !== MODAL_GROUP) { + const modalEditorMode = configurationService.getValue('workbench.editor.useModal'); + if (modalEditorPart && preferredGroup !== MODAL_GROUP && modalEditorMode !== 'on') { // Only allow to open in modal group if MODAL_GROUP is explicitly requested group = handleModalEditorPart(group, editor, modalEditorPart, editorGroupService); } @@ -124,7 +125,7 @@ function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, prefer } // Group: Modal (gated behind a setting) - else if (preferredGroup === MODAL_GROUP && configurationService.getValue('workbench.editor.allowOpenInModalEditor')) { + else if (preferredGroup === MODAL_GROUP && configurationService.getValue('workbench.editor.useModal') !== 'off') { group = editorGroupService.createModalEditorPart(options?.modal) .then(part => part.activeGroup); } @@ -174,6 +175,12 @@ function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, prefer } } + // Force modal editor part: redirect to the modal group when setting is 'on' + if (!group && configurationService.getValue('workbench.editor.useModal') === 'on') { + group = editorGroupService.createModalEditorPart(options?.modal) + .then(part => part.activeGroup); + } + // Fallback to active group if target not valid but avoid // locked editor groups unless editor is already opened there if (!group) { diff --git a/src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts b/src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts index f33d165e59f0a..1c0db5ecf5835 100644 --- a/src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts +++ b/src/vs/workbench/services/editor/test/browser/modalEditorGroup.test.ts @@ -16,6 +16,8 @@ import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/tes import { Registry } from '../../../../../platform/registry/common/platform.js'; import { MODAL_GROUP, MODAL_GROUP_TYPE } from '../../common/editorService.js'; import { findGroup } from '../../common/editorGroupFinder.js'; +import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; +import { TestConfigurationService } from '../../../../../platform/configuration/test/common/testConfigurationService.js'; suite('Modal Editor Group', () => { @@ -504,5 +506,82 @@ suite('Modal Editor Group', () => { modalPart.close(); }); + suite('useModal: on', () => { + + test('findGroup creates modal and returns its active group', async () => { + const instantiationService = workbenchInstantiationService({ contextKeyService: instantiationService => instantiationService.createInstance(MockScopableContextKeyService) }, disposables); + instantiationService.invokeFunction(accessor => Registry.as(EditorExtensions.EditorFactory).start(accessor)); + const configurationService = new TestConfigurationService(); + await configurationService.setUserConfiguration('workbench.editor.useModal', 'on'); + instantiationService.stub(IConfigurationService, configurationService); + const parts = await createEditorParts(instantiationService, disposables); + instantiationService.stub(IEditorGroupsService, parts); + + // findGroup with undefined preferredGroup should create modal and return its group + const input = createTestFileEditorInput(URI.file('foo/bar'), TEST_EDITOR_INPUT_ID); + const result = instantiationService.invokeFunction(accessor => findGroup(accessor, { resource: input.resource }, undefined)); + + // Should return a promise (async modal creation) + assert.ok(result instanceof Promise); + const [group] = await result; + + // The group should be in the modal part + assert.ok(parts.activeModalEditorPart); + assert.strictEqual(group.id, parts.activeModalEditorPart.activeGroup.id); + + parts.activeModalEditorPart.close(); + }); + + test('findGroup does not auto-close modal', async () => { + const instantiationService = workbenchInstantiationService({ contextKeyService: instantiationService => instantiationService.createInstance(MockScopableContextKeyService) }, disposables); + instantiationService.invokeFunction(accessor => Registry.as(EditorExtensions.EditorFactory).start(accessor)); + const configurationService = new TestConfigurationService(); + await configurationService.setUserConfiguration('workbench.editor.useModal', 'on'); + instantiationService.stub(IConfigurationService, configurationService); + const parts = await createEditorParts(instantiationService, disposables); + instantiationService.stub(IEditorGroupsService, parts); + + // Create modal first + const modalPart = await parts.createModalEditorPart(); + const input = createTestFileEditorInput(URI.file('foo/bar'), TEST_EDITOR_INPUT_ID); + await modalPart.activeGroup.openEditor(input, { pinned: true }); + + // findGroup without MODAL_GROUP should NOT close the modal + const newInput = createTestFileEditorInput(URI.file('foo/baz'), TEST_EDITOR_INPUT_ID); + const result = instantiationService.invokeFunction(accessor => findGroup(accessor, { resource: newInput.resource }, undefined)); + + // Since the setting is 'on', modal stays open + const [group] = result instanceof Promise ? await result : result; + + assert.ok(parts.activeModalEditorPart); + assert.strictEqual(group.id, modalPart.activeGroup.id); + + modalPart.close(); + }); + + test('findGroup auto-closes modal when setting is not on', async () => { + const instantiationService = workbenchInstantiationService({ contextKeyService: instantiationService => instantiationService.createInstance(MockScopableContextKeyService) }, disposables); + instantiationService.invokeFunction(accessor => Registry.as(EditorExtensions.EditorFactory).start(accessor)); + const configurationService = new TestConfigurationService(); + await configurationService.setUserConfiguration('workbench.editor.useModal', 'off'); + instantiationService.stub(IConfigurationService, configurationService); + const parts = await createEditorParts(instantiationService, disposables); + instantiationService.stub(IEditorGroupsService, parts); + + // Create modal + const modalPart = await parts.createModalEditorPart(); + const input = createTestFileEditorInput(URI.file('foo/bar'), TEST_EDITOR_INPUT_ID); + await modalPart.activeGroup.openEditor(input, { pinned: true }); + + assert.ok(parts.activeModalEditorPart); + + // findGroup without MODAL_GROUP should close the modal + const newInput = createTestFileEditorInput(URI.file('foo/baz'), TEST_EDITOR_INPUT_ID); + instantiationService.invokeFunction(accessor => findGroup(accessor, { resource: newInput.resource }, undefined)); + + assert.strictEqual(parts.activeModalEditorPart, undefined); + }); + }); + ensureNoDisposablesAreLeakedInTestSuite(); }); diff --git a/src/vs/workbench/services/preferences/browser/preferencesService.ts b/src/vs/workbench/services/preferences/browser/preferencesService.ts index c1c1f94f062bd..a1ca22b3c4a2d 100644 --- a/src/vs/workbench/services/preferences/browser/preferencesService.ts +++ b/src/vs/workbench/services/preferences/browser/preferencesService.ts @@ -372,7 +372,7 @@ export class PreferencesService extends Disposable implements IPreferencesServic } private getEditorGroupFromOptions(isTextual: boolean, options: { groupId?: number; openToSide?: boolean }): PreferredGroup { - if (!isTextual && this.configurationService.getValue('workbench.editor.allowOpenInModalEditor')) { + if (!isTextual && this.configurationService.getValue('workbench.editor.useModal') !== 'off') { return MODAL_GROUP; } if (options.openToSide) { From 15914a34df9254c28334acf281a68b4d78064eab Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 20 Feb 2026 20:55:18 +0100 Subject: [PATCH 29/37] sessions - show title actions only in main window (#296592) --- src/vs/sessions/browser/layoutActions.ts | 11 +++++++---- .../contrib/chat/browser/chat.contribution.ts | 2 ++ .../sessions/contrib/chat/browser/runScriptAction.ts | 2 ++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/vs/sessions/browser/layoutActions.ts b/src/vs/sessions/browser/layoutActions.ts index d16de091c627c..7d1a013328a7e 100644 --- a/src/vs/sessions/browser/layoutActions.ts +++ b/src/vs/sessions/browser/layoutActions.ts @@ -13,7 +13,7 @@ import { Menus } from './menus.js'; import { ServicesAccessor } from '../../platform/instantiation/common/instantiation.js'; import { KeybindingWeight } from '../../platform/keybinding/common/keybindingsRegistry.js'; import { registerIcon } from '../../platform/theme/common/iconRegistry.js'; -import { AuxiliaryBarVisibleContext, SideBarVisibleContext } from '../../workbench/common/contextkeys.js'; +import { AuxiliaryBarVisibleContext, IsAuxiliaryWindowContext, SideBarVisibleContext } from '../../workbench/common/contextkeys.js'; import { IWorkbenchLayoutService, Parts } from '../../workbench/services/layout/browser/layoutService.js'; // Register Icons @@ -52,7 +52,8 @@ class ToggleSidebarVisibilityAction extends Action2 { { id: Menus.TitleBarLeft, group: 'navigation', - order: 0 + order: 0, + when: IsAuxiliaryWindowContext.toNegated() } ] }); @@ -97,7 +98,8 @@ class ToggleSecondarySidebarVisibilityAction extends Action2 { { id: Menus.TitleBarRight, group: 'navigation', - order: 10 + order: 10, + when: IsAuxiliaryWindowContext.toNegated() } ] }); @@ -132,7 +134,8 @@ class TogglePanelVisibilityAction extends Action2 { { id: Menus.PanelTitle, group: 'navigation', - order: 2 + order: 2, + when: IsAuxiliaryWindowContext.toNegated() } ] }); diff --git a/src/vs/sessions/contrib/chat/browser/chat.contribution.ts b/src/vs/sessions/contrib/chat/browser/chat.contribution.ts index 8fa8db33b1c52..d337a84b2db72 100644 --- a/src/vs/sessions/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/sessions/contrib/chat/browser/chat.contribution.ts @@ -36,6 +36,7 @@ import { NewChatViewPane, SessionsViewId } from './newChatViewPane.js'; import { ViewPaneContainer } from '../../../../workbench/browser/parts/views/viewPaneContainer.js'; import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'; import { ChatViewPane } from '../../../../workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js'; +import { IsAuxiliaryWindowContext } from '../../../../workbench/common/contextkeys.js'; export class OpenSessionWorktreeInVSCodeAction extends Action2 { static readonly ID = 'chat.openSessionWorktreeInVSCode'; @@ -156,6 +157,7 @@ MenuRegistry.appendMenuItem(Menus.TitleBarRight, { icon: Codicon.folderOpened, group: 'navigation', order: 9, + when: IsAuxiliaryWindowContext.toNegated() }); diff --git a/src/vs/sessions/contrib/chat/browser/runScriptAction.ts b/src/vs/sessions/contrib/chat/browser/runScriptAction.ts index dfa11fd710d40..d196c18f3039b 100644 --- a/src/vs/sessions/contrib/chat/browser/runScriptAction.ts +++ b/src/vs/sessions/contrib/chat/browser/runScriptAction.ts @@ -17,6 +17,7 @@ import { ITerminalService } from '../../../../workbench/contrib/terminal/browser import { Menus } from '../../../browser/menus.js'; import { ISessionsConfigurationService, ISessionScript } from './sessionsConfigurationService.js'; import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js'; +import { IsAuxiliaryWindowContext } from '../../../../workbench/common/contextkeys.js'; // Menu IDs - exported for use in auxiliary bar part @@ -190,4 +191,5 @@ MenuRegistry.appendMenuItem(Menus.TitleBarRight, { icon: Codicon.play, group: 'navigation', order: 8, + when: IsAuxiliaryWindowContext.toNegated() }); From 2df0c0ee056d68e83b9ec2a07b53e012506824e6 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Fri, 20 Feb 2026 21:19:35 +0100 Subject: [PATCH 30/37] do not show add models and handle anonymous users (#296603) --- .../browser/widget/input/chatModelPicker.ts | 48 +++----- .../widget/input/chatModelPicker.test.ts | 104 ++++++++++++++---- .../accounts/browser/defaultAccount.ts | 17 ++- 3 files changed, 113 insertions(+), 56 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts b/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts index 6dd4e299fe452..bd38dd8e78750 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts @@ -124,7 +124,6 @@ export function buildModelPickerItems( selectedModelId: string | undefined, recentModelIds: string[], controlModels: IStringDictionary, - isProUser: boolean, currentVSCodeVersion: string, updateStateType: StateType, onSelect: (model: ILanguageModelChatMetadataAndIdentifier) => void, @@ -132,6 +131,7 @@ export function buildModelPickerItems( commandService: ICommandService, chatEntitlementService: IChatEntitlementService, ): IActionListItem[] { + const isPro = isProUser(chatEntitlementService.entitlement); const items: IActionListItem[] = []; let otherModels: ILanguageModelChatMetadataAndIdentifier[] = []; if (models.length === 0) { @@ -165,7 +165,7 @@ export function buildModelPickerItems( const resolveModel = (id: string) => allModelsMap.get(id) ?? modelsByMetadataId.get(id); const getUnavailableReason = (entry: IModelControlEntry): 'upgrade' | 'update' | 'admin' => { - if (!isProUser) { + if (!isPro) { return 'upgrade'; } if (entry.minVSCodeVersion && !isVersionAtLeast(currentVSCodeVersion, entry.minVSCodeVersion)) { @@ -245,6 +245,7 @@ export function buildModelPickerItems( } // Render promoted section: sorted alphabetically by name + let hasShownActionLink = false; if (promotedItems.length > 0) { promotedItems.sort((a, b) => { const aName = a.kind === 'available' ? a.model.metadata.name : a.entry.label; @@ -259,7 +260,11 @@ export function buildModelPickerItems( if (item.kind === 'available') { items.push(createModelItem(createModelAction(item.model, selectedModelId, onSelect), item.model)); } else { - items.push(createUnavailableModelItem(item.id, item.entry, item.reason, manageSettingsUrl, updateStateType)); + const showActionLink = item.reason === 'upgrade' ? !hasShownActionLink : true; + if (showActionLink && item.reason === 'upgrade') { + hasShownActionLink = true; + } + items.push(createUnavailableModelItem(item.id, item.entry, item.reason, manageSettingsUrl, updateStateType, undefined, showActionLink)); } } } @@ -301,7 +306,7 @@ export function buildModelPickerItems( for (const model of otherModels) { const entry = controlModels[model.metadata.id] ?? controlModels[model.identifier]; if (entry?.minVSCodeVersion && !isVersionAtLeast(currentVSCodeVersion, entry.minVSCodeVersion)) { - items.push(createUnavailableModelItem(model.metadata.id, entry, 'update', manageSettingsUrl, updateStateType, ModelPickerSection.Other)); + items.push(createUnavailableModelItem(model.metadata.id, entry, 'update', manageSettingsUrl, updateStateType, ModelPickerSection.Other, true)); } else { items.push(createModelItem(createModelAction(model, selectedModelId, onSelect, ModelPickerSection.Other), model)); } @@ -340,35 +345,6 @@ export function buildModelPickerItems( }); } - // Add sign-in / upgrade option if entitlement is anonymous / free / new user - const isNewOrAnonymousUser = !chatEntitlementService.sentiment.installed || - chatEntitlementService.entitlement === ChatEntitlement.Available || - chatEntitlementService.anonymous || - chatEntitlementService.entitlement === ChatEntitlement.Unknown; - if (isNewOrAnonymousUser || chatEntitlementService.entitlement === ChatEntitlement.Free) { - items.push({ kind: ActionListItemKind.Separator }); - items.push({ - item: { - id: 'moreModels', - enabled: true, - checked: false, - class: undefined, - tooltip: isNewOrAnonymousUser ? localize('chat.moreModels.tooltip', "Add Language Models") : localize('chat.morePremiumModels.tooltip', "Add Premium Models"), - label: isNewOrAnonymousUser ? localize('chat.moreModels', "Add Language Models") : localize('chat.morePremiumModels', "Add Premium Models"), - icon: Codicon.add, - run: () => { - const commandId = isNewOrAnonymousUser ? 'workbench.action.chat.triggerSetup' : 'workbench.action.chat.upgradePlan'; - commandService.executeCommand(commandId); - } - }, - kind: ActionListItemKind.Action, - label: isNewOrAnonymousUser ? localize('chat.moreModels', "Add Language Models") : localize('chat.morePremiumModels', "Add Premium Models"), - group: { title: '', icon: Codicon.add }, - hideIcon: false, - showAlways: true, - }); - } - return items; } @@ -379,11 +355,14 @@ function createUnavailableModelItem( manageSettingsUrl: string | undefined, updateStateType: StateType, section?: string, + showActionLink: boolean = true, ): IActionListItem { let description: string | MarkdownString | undefined; if (reason === 'upgrade') { - description = new MarkdownString(localize('chat.modelPicker.upgradeLink', "[Upgrade your plan](command:workbench.action.chat.upgradePlan \" \")"), { isTrusted: true }); + description = showActionLink + ? new MarkdownString(localize('chat.modelPicker.upgradeLink', "[Upgrade your plan](command:workbench.action.chat.upgradePlan \" \")"), { isTrusted: true }) + : undefined; } else if (reason === 'update') { description = localize('chat.modelPicker.updateDescription', "Update VS Code"); } else { @@ -542,7 +521,6 @@ export class ModelPickerWidget extends Disposable { this._selectedModel?.identifier, this._languageModelsService.getRecentlyUsedModelIds(), controlModelsForTier, - isPro, this._productService.version, this._updateService.state.type, onSelect, diff --git a/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts b/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts index 3b66e899c9920..8f2f67e90b6ab 100644 --- a/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts +++ b/src/vs/workbench/contrib/chat/test/browser/widget/input/chatModelPicker.test.ts @@ -16,12 +16,16 @@ import { buildModelPickerItems } from '../../../../browser/widget/input/chatMode import { ILanguageModelChatMetadata, ILanguageModelChatMetadataAndIdentifier, IModelControlEntry } from '../../../../common/languageModels.js'; import { ChatEntitlement, IChatEntitlementService } from '../../../../../../services/chat/common/chatEntitlementService.js'; -const stubChatEntitlementService: Partial = { - entitlement: ChatEntitlement.Pro, - sentiment: { installed: true } as IChatEntitlementService['sentiment'], - isInternal: false, - anonymous: false, -}; +function createStubEntitlementService(opts?: { entitlement?: ChatEntitlement; isInternal?: boolean; anonymous?: boolean }): IChatEntitlementService { + return { + entitlement: opts?.entitlement ?? ChatEntitlement.Pro, + sentiment: { installed: true } as IChatEntitlementService['sentiment'], + isInternal: opts?.isInternal ?? false, + anonymous: opts?.anonymous ?? false, + } as IChatEntitlementService; +} + +const stubChatEntitlementService = createStubEntitlementService(); function createModel(id: string, name: string, vendor = 'copilot'): ILanguageModelChatMetadataAndIdentifier { return { @@ -69,25 +73,29 @@ function callBuild( selectedModelId?: string; recentModelIds?: string[]; controlModels?: IStringDictionary; - isProUser?: boolean; + entitlement?: ChatEntitlement; currentVSCodeVersion?: string; updateStateType?: StateType; manageSettingsUrl?: string; + anonymous?: boolean; } = {}, ): IActionListItem[] { const onSelect = () => { }; + const entitlementService = createStubEntitlementService({ + entitlement: opts.entitlement ?? ChatEntitlement.Pro, + anonymous: opts.anonymous ?? false, + }); return buildModelPickerItems( models, opts.selectedModelId, opts.recentModelIds ?? [], opts.controlModels ?? {}, - opts.isProUser ?? true, opts.currentVSCodeVersion ?? '1.100.0', opts.updateStateType ?? StateType.Idle, onSelect, opts.manageSettingsUrl, stubCommandService, - stubChatEntitlementService as IChatEntitlementService, + entitlementService, ); } @@ -173,7 +181,7 @@ suite('buildModelPickerItems', () => { controlModels: { 'missing-model': { label: 'Missing Model', exists: false }, }, - isProUser: false, + entitlement: ChatEntitlement.Free, }); const actions = getActionItems(items); const unavailable = actions.find(a => a.label === 'Missing Model'); @@ -188,7 +196,6 @@ suite('buildModelPickerItems', () => { controlModels: { 'missing-model': { label: 'Missing Model', minVSCodeVersion: '2.0.0', exists: false }, }, - isProUser: true, currentVSCodeVersion: '1.90.0', }); const actions = getActionItems(items); @@ -204,7 +211,6 @@ suite('buildModelPickerItems', () => { controlModels: { 'missing-model': { label: 'Missing Model', exists: false }, }, - isProUser: true, }); const actions = getActionItems(items); const unavailable = actions.find(a => a.label === 'Missing Model'); @@ -233,7 +239,7 @@ suite('buildModelPickerItems', () => { controlModels: { 'premium-model': { label: 'Premium Model', featured: true, exists: false }, }, - isProUser: false, + entitlement: ChatEntitlement.Free, }); const actions = getActionItems(items); const unavailable = actions.find(a => a.label === 'Premium Model'); @@ -247,7 +253,6 @@ suite('buildModelPickerItems', () => { controlModels: { 'premium-model': { label: 'Premium Model', featured: true, exists: false }, }, - isProUser: true, }); const actions = getActionItems(items); const unavailable = actions.find(a => a.label === 'Premium Model'); @@ -312,7 +317,7 @@ suite('buildModelPickerItems', () => { controlModels: { 'missing-model': { label: 'Missing Model', exists: false }, }, - isProUser: false, + entitlement: ChatEntitlement.Free, }); const actions = getActionItems(items); // Auto, then GPT-4o (available), then Missing Model (unavailable) @@ -436,13 +441,12 @@ suite('buildModelPickerItems', () => { undefined, [], {}, - true, '1.100.0', StateType.Idle, onSelect, undefined, stubCommandService, - stubChatEntitlementService as IChatEntitlementService, + stubChatEntitlementService, ); const gptItem = getActionItems(items).find(a => a.label === 'GPT-4o'); assert.ok(gptItem?.item); @@ -518,13 +522,12 @@ suite('buildModelPickerItems', () => { undefined, ['missing-model'], { 'missing-model': { label: 'Missing Model' } as IModelControlEntry }, - true, '1.100.0', StateType.Idle, () => { }, 'https://aka.ms/github-copilot-settings', stubCommandService, - stubChatEntitlementService as IChatEntitlementService, + stubChatEntitlementService, ); const adminItem = getActionItems(items).find(a => a.label === 'Missing Model'); @@ -542,7 +545,7 @@ suite('buildModelPickerItems', () => { controlModels: { 'missing-model': { label: 'Missing Model' } as IModelControlEntry, }, - isProUser: false, + entitlement: ChatEntitlement.Free, }); const unavailable = getActionItems(items).find(a => a.label === 'Missing Model'); @@ -550,4 +553,65 @@ suite('buildModelPickerItems', () => { assert.strictEqual(unavailable.hideIcon, false); assert.strictEqual(unavailable.group?.icon?.id, Codicon.blank.id); }); + + test('anonymous user sees upgrade description only on first unavailable model', () => { + const auto = createAutoModel(); + const items = callBuild([auto], { + recentModelIds: ['model-a', 'model-b'], + controlModels: { + 'model-a': { label: 'Model A', featured: true, exists: false }, + 'model-b': { label: 'Model B', featured: true, exists: false }, + }, + anonymous: true, + entitlement: ChatEntitlement.Unknown, + }); + const actions = getActionItems(items); + const disabledItems = actions.filter(a => a.disabled); + assert.strictEqual(disabledItems.length, 2); + assert.ok(disabledItems[0].description instanceof MarkdownString); + assert.ok(disabledItems[0].description.value.includes('Upgrade')); + assert.strictEqual(disabledItems[1].description, undefined); + }); + + test('free user sees upgrade description only on first unavailable model', () => { + const auto = createAutoModel(); + const items = callBuild([auto], { + recentModelIds: ['model-a', 'model-b'], + controlModels: { + 'model-a': { label: 'Model A', featured: true, exists: false }, + 'model-b': { label: 'Model B', featured: true, exists: false }, + }, + entitlement: ChatEntitlement.Free, + }); + const actions = getActionItems(items); + const disabledItems = actions.filter(a => a.disabled); + assert.strictEqual(disabledItems.length, 2); + assert.ok(disabledItems[0].description instanceof MarkdownString); + assert.ok(disabledItems[0].description.value.includes('Upgrade')); + assert.strictEqual(disabledItems[1].description, undefined); + }); + + test('anonymous user model selection triggers onSelect normally', () => { + const auto = createAutoModel(); + const modelA = createModel('gpt-4o', 'GPT-4o'); + let selectedModel: ILanguageModelChatMetadataAndIdentifier | undefined; + const onSelect = (m: ILanguageModelChatMetadataAndIdentifier) => { selectedModel = m; }; + const anonymousEntitlementService = createStubEntitlementService({ entitlement: ChatEntitlement.Unknown, anonymous: true }); + const items = buildModelPickerItems( + [auto, modelA], + undefined, + [], + {}, + '1.100.0', + StateType.Idle, + onSelect, + undefined, + stubCommandService, + anonymousEntitlementService, + ); + const gptItem = getActionItems(items).find(a => a.label === 'GPT-4o'); + assert.ok(gptItem?.item); + gptItem.item.run(); + assert.strictEqual(selectedModel?.identifier, modelA.identifier); + }); }); diff --git a/src/vs/workbench/services/accounts/browser/defaultAccount.ts b/src/vs/workbench/services/accounts/browser/defaultAccount.ts index 3fba2439fa500..9cc1b8bc96089 100644 --- a/src/vs/workbench/services/accounts/browser/defaultAccount.ts +++ b/src/vs/workbench/services/accounts/browser/defaultAccount.ts @@ -28,8 +28,10 @@ import { distinct } from '../../../../base/common/arrays.js'; import { equals } from '../../../../base/common/objects.js'; import { IDefaultChatAgent } from '../../../../base/common/product.js'; import { IRequestContext } from '../../../../base/parts/request/common/request.js'; -import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; +import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { ICommandService } from '../../../../platform/commands/common/commands.js'; +import { localize2 } from '../../../../nls.js'; +import { Action2, registerAction2 } from '../../../../platform/actions/common/actions.js'; interface IDefaultAccountConfig { readonly preferredExtensions: string[]; @@ -853,4 +855,17 @@ class DefaultAccountProviderContribution extends Disposable implements IWorkbenc } } +registerAction2(class extends Action2 { + constructor() { + super({ + id: DEFAULT_ACCOUNT_SIGN_IN_COMMAND, + title: localize2('signIn', 'Sign In'), + }); + } + async run(accessor: ServicesAccessor): Promise { + const defaultAccountService = accessor.get(IDefaultAccountService); + await defaultAccountService.signIn(); + } +}); + registerWorkbenchContribution2(DefaultAccountProviderContribution.ID, DefaultAccountProviderContribution, WorkbenchPhase.BlockStartup); From 35c9204ff3c19bc0e29e09999650b2efef9ccc2c Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 20 Feb 2026 12:53:02 -0800 Subject: [PATCH 31/37] Fix configure tools code lens action in prompt files (#296584) --- .../promptToolsCodeLensProvider.ts | 2 +- .../promptSyntax/promptFileRewriter.test.ts | 136 ++++++++++++++++++ 2 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 src/vs/workbench/contrib/chat/test/browser/promptSyntax/promptFileRewriter.test.ts diff --git a/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.ts b/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.ts index 538f5d4ac2d68..ac323f512e4e3 100644 --- a/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.ts +++ b/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.ts @@ -86,7 +86,7 @@ class PromptToolsCodeLensProvider extends Disposable implements CodeLensProvider command: { title: localize('configure-tools.capitalized.ellipsis', "Configure Tools..."), id: this.cmdId, - arguments: [model, toolsAttr.range, toolsAttr.value.type === 'scalar', selectedTools, target] + arguments: [model, toolsAttr.value.range, toolsAttr.value.type === 'scalar', selectedTools, target] } }; return { lenses: [codeLens] }; diff --git a/src/vs/workbench/contrib/chat/test/browser/promptSyntax/promptFileRewriter.test.ts b/src/vs/workbench/contrib/chat/test/browser/promptSyntax/promptFileRewriter.test.ts new file mode 100644 index 0000000000000..aa5843f4b4623 --- /dev/null +++ b/src/vs/workbench/contrib/chat/test/browser/promptSyntax/promptFileRewriter.test.ts @@ -0,0 +1,136 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import assert from 'assert'; +import { URI } from '../../../../../../base/common/uri.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../base/test/common/utils.js'; +import { createTextModel } from '../../../../../../editor/test/common/testTextModel.js'; +import { TestConfigurationService } from '../../../../../../platform/configuration/test/common/testConfigurationService.js'; +import { ContextKeyService } from '../../../../../../platform/contextkey/browser/contextKeyService.js'; +import { TestInstantiationService } from '../../../../../../platform/instantiation/test/common/instantiationServiceMock.js'; +import { workbenchInstantiationService } from '../../../../../test/browser/workbenchTestServices.js'; +import { ChatConfiguration } from '../../../common/constants.js'; +import { ILanguageModelToolsService, IToolData, ToolDataSource } from '../../../common/tools/languageModelToolsService.js'; +import { LanguageModelToolsService } from '../../../browser/tools/languageModelToolsService.js'; +import { IPromptsService } from '../../../common/promptSyntax/service/promptsService.js'; +import { getLanguageIdForPromptsType, PromptsType } from '../../../common/promptSyntax/promptTypes.js'; +import { PromptFileParser, PromptHeaderAttributes, parseCommaSeparatedList } from '../../../common/promptSyntax/promptFileParser.js'; +import { PromptFileRewriter } from '../../../browser/promptSyntax/promptFileRewriter.js'; + +suite('PromptFileRewriter', () => { + const disposables = ensureNoDisposablesAreLeakedInTestSuite(); + + let instaService: TestInstantiationService; + + setup(async () => { + const testConfigService = new TestConfigurationService(); + testConfigService.setUserConfiguration(ChatConfiguration.ExtensionToolsEnabled, true); + instaService = workbenchInstantiationService({ + contextKeyService: () => disposables.add(new ContextKeyService(testConfigService)), + configurationService: () => testConfigService + }, disposables); + + const toolService = disposables.add(instaService.createInstance(LanguageModelToolsService)); + + const testTool1 = { id: 'testTool1', displayName: 'tool1', toolReferenceName: 'testTool1', canBeReferencedInPrompt: true, modelDescription: 'Test Tool 1', source: ToolDataSource.External, inputSchema: {} } satisfies IToolData; + disposables.add(toolService.registerToolData(testTool1)); + const testTool2 = { id: 'testTool2', displayName: 'tool2', toolReferenceName: 'testTool2', canBeReferencedInPrompt: true, modelDescription: 'Test Tool 2', source: ToolDataSource.External, inputSchema: {} } satisfies IToolData; + disposables.add(toolService.registerToolData(testTool2)); + + instaService.set(ILanguageModelToolsService, toolService); + + const parser = new PromptFileParser(); + instaService.stub(IPromptsService, { + getParsedPromptFile(model: import('../../../../../../editor/common/model.js').ITextModel) { + return parser.parse(model.uri, model.getValue()); + }, + }); + }); + + test('rewriteTools preserves tools key when using value range (array syntax)', () => { + const content = [ + '---', + 'description: "Test agent"', + 'tools: [testTool1]', + '---', + ].join('\n'); + const languageId = getLanguageIdForPromptsType(PromptsType.agent); + const uri = URI.parse('test:///test.agent.md'); + const model = disposables.add(createTextModel(content, languageId, undefined, uri)); + + const parser = new PromptFileParser(); + const parsed = parser.parse(uri, content); + const toolsAttr = parsed.header!.getAttribute(PromptHeaderAttributes.tools); + assert.ok(toolsAttr); + + const toolService = instaService.get(ILanguageModelToolsService); + const enablementMap = toolService.toToolAndToolSetEnablementMap(['testTool1', 'testTool2'], undefined); + + const rewriter = instaService.createInstance(PromptFileRewriter); + rewriter.rewriteTools(model, enablementMap, toolsAttr.value.range, false); + + const result = model.getValue(); + assert.ok(result.includes('tools:'), `Expected 'tools:' key to be preserved, but got: ${result}`); + assert.ok(result.includes('testTool1'), `Expected 'testTool1' in result: ${result}`); + assert.ok(result.includes('testTool2'), `Expected 'testTool2' in result: ${result}`); + }); + + test('rewriteTools preserves tools key when using value range (string syntax)', () => { + const content = [ + '---', + 'description: "Test agent"', + 'tools: testTool1', + '---', + ].join('\n'); + const languageId = getLanguageIdForPromptsType(PromptsType.agent); + const uri = URI.parse('test:///test.agent.md'); + const model = disposables.add(createTextModel(content, languageId, undefined, uri)); + + const parser = new PromptFileParser(); + const parsed = parser.parse(uri, content); + const toolsAttr = parsed.header!.getAttribute(PromptHeaderAttributes.tools); + assert.ok(toolsAttr); + + let value = toolsAttr.value; + if (value.type === 'scalar') { + value = parseCommaSeparatedList(value); + } + + const toolService = instaService.get(ILanguageModelToolsService); + const enablementMap = toolService.toToolAndToolSetEnablementMap(['testTool1', 'testTool2'], undefined); + + const rewriter = instaService.createInstance(PromptFileRewriter); + rewriter.rewriteTools(model, enablementMap, toolsAttr.value.range, true); + + const result = model.getValue(); + assert.ok(result.includes('tools:'), `Expected 'tools:' key to be preserved, but got: ${result}`); + assert.ok(result.includes('testTool1'), `Expected 'testTool1' in result: ${result}`); + assert.ok(result.includes('testTool2'), `Expected 'testTool2' in result: ${result}`); + }); + + test('rewriteTools with attribute range would destroy the tools key (regression)', () => { + const content = [ + '---', + 'description: "Test agent"', + 'tools: [testTool1]', + '---', + ].join('\n'); + const languageId = getLanguageIdForPromptsType(PromptsType.agent); + const uri = URI.parse('test:///test.agent.md'); + disposables.add(createTextModel(content, languageId, undefined, uri)); + + const parser = new PromptFileParser(); + const parsed = parser.parse(uri, content); + const toolsAttr = parsed.header!.getAttribute(PromptHeaderAttributes.tools); + assert.ok(toolsAttr); + + // Verify that the attribute range is larger than the value range + assert.ok( + toolsAttr.range.startColumn < toolsAttr.value.range.startColumn || + toolsAttr.range.startLineNumber < toolsAttr.value.range.startLineNumber, + 'Attribute range should start before value range (includes the key)' + ); + }); +}); From dea3ecf79ed5c5532d1993849b6eaba1ba99d707 Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Fri, 20 Feb 2026 21:58:45 +0100 Subject: [PATCH 32/37] Sessions - select the active branch in the branch picker (#296606) * Git - observable repository state * Wire-up the active branch selection * Pull request feedback --- .../contrib/chat/browser/branchPicker.ts | 5 ++-- .../browser/mainThreadGitExtensionService.ts | 5 ++-- .../api/common/extHostGitExtensionService.ts | 19 +++++++++------ .../contrib/git/browser/gitService.ts | 24 +++++++++---------- .../contrib/git/common/gitService.ts | 8 +++---- 5 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/vs/sessions/contrib/chat/browser/branchPicker.ts b/src/vs/sessions/contrib/chat/browser/branchPicker.ts index 3865ca57750f0..f00e7f42abd7c 100644 --- a/src/vs/sessions/contrib/chat/browser/branchPicker.ts +++ b/src/vs/sessions/contrib/chat/browser/branchPicker.ts @@ -78,8 +78,9 @@ export class BranchPicker extends Disposable { .filter((name): name is string => !!name) .filter(name => !name.includes(COPILOT_WORKTREE_PATTERN)); - // Select main, master, or the first branch by default - const defaultBranch = this._branches.find(b => b === 'main') + // Select active branch, main, master, or the first branch by default + const defaultBranch = this._branches.find(b => b === repository.state.get().HEAD?.name) + ?? this._branches.find(b => b === 'main') ?? this._branches.find(b => b === 'master') ?? this._branches[0]; if (defaultBranch) { diff --git a/src/vs/workbench/api/browser/mainThreadGitExtensionService.ts b/src/vs/workbench/api/browser/mainThreadGitExtensionService.ts index 658b056c5c161..6ed0a6d0acdd0 100644 --- a/src/vs/workbench/api/browser/mainThreadGitExtensionService.ts +++ b/src/vs/workbench/api/browser/mainThreadGitExtensionService.ts @@ -97,7 +97,7 @@ export class MainThreadGitExtensionService extends Disposable implements MainThr // Create a new repository and store it in the maps const state = toGitRepositoryState(result.state); - const repository = new GitRepository(this, repositoryRootUri, state); + const repository = new GitRepository(repositoryRootUri, state, this); this._repositories.set(result.handle, repository); this._repositoryHandles.set(repositoryRootUri, result.handle); @@ -135,6 +135,7 @@ export class MainThreadGitExtensionService extends Disposable implements MainThr return; } - repository.setState(toGitRepositoryState(state)); + // Update the repository state + repository.updateState(toGitRepositoryState(state)); } } diff --git a/src/vs/workbench/api/common/extHostGitExtensionService.ts b/src/vs/workbench/api/common/extHostGitExtensionService.ts index 13a5102368562..8029798f00f0d 100644 --- a/src/vs/workbench/api/common/extHostGitExtensionService.ts +++ b/src/vs/workbench/api/common/extHostGitExtensionService.ts @@ -6,6 +6,7 @@ import type * as vscode from 'vscode'; import { Event } from '../../../base/common/event.js'; import { Disposable, DisposableStore } from '../../../base/common/lifecycle.js'; +import { observableFromEvent, waitForState } from '../../../base/common/observable.js'; import { URI, UriComponents } from '../../../base/common/uri.js'; import { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js'; import { createDecorator } from '../../../platform/instantiation/common/instantiation.js'; @@ -153,18 +154,20 @@ export class ExtHostGitExtensionService extends Disposable implements IExtHostGi }; } - let repositoryState = repository.state; - if (repository.state.HEAD === undefined) { - // If the repository is not initialized, wait for it - await Event.toPromise(repository.state.onDidChange, this._disposables); - repositoryState = repository.state; - } + // Ensure that the repository state is initialized + const repositoryStateObs = observableFromEvent(this, + repository.state.onDidChange, () => repository.state); + await waitForState(repositoryStateObs, state => !!state.HEAD); + + const repositoryState = repositoryStateObs.get(); + // Store the repository and its handle in the maps const handle = ExtHostGitExtensionService._handlePool++; this._repositories.set(handle, repository); this._repositoryByUri.set(repository.rootUri, handle); + // Subscribe to repository state changes this._disposables.add(repository.state.onDidChange(() => { this._proxy.$onDidChangeRepository(handle); })); @@ -173,7 +176,9 @@ export class ExtHostGitExtensionService extends Disposable implements IExtHostGi handle, rootUri: repository.rootUri, state: { - HEAD: repositoryState.HEAD ? toGitBranchDto(repositoryState.HEAD) : undefined + HEAD: repositoryState.HEAD + ? toGitBranchDto(repositoryState.HEAD) + : undefined } }; } diff --git a/src/vs/workbench/contrib/git/browser/gitService.ts b/src/vs/workbench/contrib/git/browser/gitService.ts index 146533f1e76f2..9dfb27c8fad6f 100644 --- a/src/vs/workbench/contrib/git/browser/gitService.ts +++ b/src/vs/workbench/contrib/git/browser/gitService.ts @@ -4,11 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from '../../../../base/common/cancellation.js'; -import { Emitter, Event } from '../../../../base/common/event.js'; import { BugIndicatingError } from '../../../../base/common/errors.js'; import { Disposable, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; import { URI } from '../../../../base/common/uri.js'; import { IGitService, IGitExtensionDelegate, GitRef, GitRefQuery, IGitRepository, GitRepositoryState } from '../common/gitService.js'; +import { ISettableObservable, observableValueOpts } from '../../../../base/common/observable.js'; +import { structuralEquals } from '../../../../base/common/equals.js'; export class GitService extends Disposable implements IGitService { declare readonly _serviceBrand: undefined; @@ -44,25 +45,22 @@ export class GitService extends Disposable implements IGitService { } export class GitRepository extends Disposable implements IGitRepository { - private readonly _onDidChangeState = this._register(new Emitter()); - readonly onDidChangeState: Event = this._onDidChangeState.event; + readonly rootUri: URI; - private _state: GitRepositoryState; - get state(): GitRepositoryState { return this._state; } - - setState(state: GitRepositoryState): void { - this._state = state; - this._onDidChangeState.fire(); + readonly state: ISettableObservable; + updateState(state: GitRepositoryState): void { + this.state.set(state, undefined); } constructor( - private readonly delegate: IGitExtensionDelegate, - readonly rootUri: URI, - state: GitRepositoryState + rootUri: URI, + initialState: GitRepositoryState, + private readonly delegate: IGitExtensionDelegate ) { super(); - this._state = state; + this.rootUri = rootUri; + this.state = observableValueOpts({ owner: this, equalsFn: structuralEquals }, initialState); } async getRefs(query: GitRefQuery, token?: CancellationToken): Promise { diff --git a/src/vs/workbench/contrib/git/common/gitService.ts b/src/vs/workbench/contrib/git/common/gitService.ts index d5f04b75c3dbb..353686d452ab5 100644 --- a/src/vs/workbench/contrib/git/common/gitService.ts +++ b/src/vs/workbench/contrib/git/common/gitService.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from '../../../../base/common/cancellation.js'; -import { Event } from '../../../../base/common/event.js'; import { IDisposable } from '../../../../base/common/lifecycle.js'; +import { IObservable } from '../../../../base/common/observable.js'; import { URI } from '../../../../base/common/uri.js'; import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js'; @@ -48,10 +48,8 @@ export interface GitUpstreamRef { export interface IGitRepository { readonly rootUri: URI; - readonly state: GitRepositoryState; - setState(state: GitRepositoryState): void; - - readonly onDidChangeState: Event; + readonly state: IObservable; + updateState(state: GitRepositoryState): void; getRefs(query: GitRefQuery, token?: CancellationToken): Promise; } From 80eaba3b1caa83e5b9e20baa90a10a8e0153da1b Mon Sep 17 00:00:00 2001 From: Anthony Kim <62267334+anthonykim1@users.noreply.github.com> Date: Fri, 20 Feb 2026 13:12:33 -0800 Subject: [PATCH 33/37] Bump xterm for kitty image updates (#296577) --- package-lock.json | 96 ++++++++++++++++++------------------ package.json | 22 ++++----- remote/package-lock.json | 96 ++++++++++++++++++------------------ remote/package.json | 20 ++++---- remote/web/package-lock.json | 88 ++++++++++++++++----------------- remote/web/package.json | 18 +++---- 6 files changed, 170 insertions(+), 170 deletions(-) diff --git a/package-lock.json b/package-lock.json index 85555984471bb..33c4fa7383bc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,16 +30,16 @@ "@vscode/windows-mutex": "^0.5.0", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", - "@xterm/addon-clipboard": "^0.3.0-beta.165", - "@xterm/addon-image": "^0.10.0-beta.165", - "@xterm/addon-ligatures": "^0.11.0-beta.165", - "@xterm/addon-progress": "^0.3.0-beta.165", - "@xterm/addon-search": "^0.17.0-beta.165", - "@xterm/addon-serialize": "^0.15.0-beta.165", - "@xterm/addon-unicode11": "^0.10.0-beta.165", - "@xterm/addon-webgl": "^0.20.0-beta.164", - "@xterm/headless": "^6.1.0-beta.165", - "@xterm/xterm": "^6.1.0-beta.165", + "@xterm/addon-clipboard": "^0.3.0-beta.167", + "@xterm/addon-image": "^0.10.0-beta.167", + "@xterm/addon-ligatures": "^0.11.0-beta.167", + "@xterm/addon-progress": "^0.3.0-beta.167", + "@xterm/addon-search": "^0.17.0-beta.167", + "@xterm/addon-serialize": "^0.15.0-beta.167", + "@xterm/addon-unicode11": "^0.10.0-beta.167", + "@xterm/addon-webgl": "^0.20.0-beta.166", + "@xterm/headless": "^6.1.0-beta.167", + "@xterm/xterm": "^6.1.0-beta.167", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "jschardet": "3.1.4", @@ -4047,30 +4047,30 @@ } }, "node_modules/@xterm/addon-clipboard": { - "version": "0.3.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.3.0-beta.165.tgz", - "integrity": "sha512-48GUTZg7sKB7tQvtC7FcH22GxxO0cIUVM4hw068Oi3cJnxDLLPQDicPv70fFG7zysGxxEKE7A39GMtHhwFI75Q==", + "version": "0.3.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.3.0-beta.167.tgz", + "integrity": "sha512-+JSjagAk6okCaGVYFwkKl8qIBfy+W+h7p/qULIi9cC8QyeswOLaE4GOqY5yuGNQYU+zMlrpgR1ttyp0o6y9LHg==", "license": "MIT", "dependencies": { "js-base64": "^3.7.5" }, "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-image": { - "version": "0.10.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.10.0-beta.165.tgz", - "integrity": "sha512-DwYvKRgytc1OYoJVwA/doOTT92K8asgvnt3FzsHt5D+XgniwdvM5nwjxv95p6UXv0kEOxQWFy3sNJl/4g/5pew==", + "version": "0.10.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.10.0-beta.167.tgz", + "integrity": "sha512-Bxi2oTaX7YM1gup0OSv02n9+tA3P1Ozlu5zyB/ZwSVkepB9FOxCODWD0l3DhWyLGMBqQ+OY/COw5SRxrKyvkNg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-ligatures": { - "version": "0.11.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.11.0-beta.165.tgz", - "integrity": "sha512-3nuPBH4ZrGYF+yj/tBB/+YaLRnn8qqbR9J9OcvM6aeDfboEeaFAYIpmdqjh+2Rl2JFTIgZoiS3dKLWaUUpk0Tw==", + "version": "0.11.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.11.0-beta.167.tgz", + "integrity": "sha512-d+9ANnoz6D4J06CjronVolcG+J0jqUWQXbzciRqQkHq0or5k8PYuIj2DuuyBx/0rOaN7JYN347KQ9iylk+++xA==", "license": "MIT", "dependencies": { "lru-cache": "^6.0.0", @@ -4080,7 +4080,7 @@ "node": ">8.0.0" }, "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-ligatures/node_modules/lru-cache": { @@ -4102,63 +4102,63 @@ "license": "ISC" }, "node_modules/@xterm/addon-progress": { - "version": "0.3.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-progress/-/addon-progress-0.3.0-beta.165.tgz", - "integrity": "sha512-Jl+dhHkFBUafrXCECI/EepcGV1GYuU1X/0oXkPYu/VYfbmkjQSAidmfBAEyS+4+AUK5Lkf6yLdb1N13tZVexyg==", + "version": "0.3.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-progress/-/addon-progress-0.3.0-beta.167.tgz", + "integrity": "sha512-8eeaWnp0pnjYaKtOLsXVCE0hTFXS0A2kZCciWp52l6CbNGQsnky4VNWJXKaJrGbS+RHGxT6qWgcB+Mx5ETzZfg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-search": { - "version": "0.17.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.17.0-beta.165.tgz", - "integrity": "sha512-3KjonTDJl/8M6jI5nTJITVT+Z528d/5CgqRmn6IV+sDgRfr3W84RZNDsaxXsLoc0GDsxQIB74/FmnNykUQ5Yew==", + "version": "0.17.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.17.0-beta.167.tgz", + "integrity": "sha512-1K6POdu0iCdjtW0Bs2z3IGWpMU4gJypbYxGnecbGnsH86rNRGwAKS0bKwWlHAiUQLlOxSGxTiNbazbrDln03FQ==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-serialize": { - "version": "0.15.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.15.0-beta.165.tgz", - "integrity": "sha512-NjXE+of4NJagrtHlzePBuWQ8a9pBFhhmQuvOhPj9W3CSi+VanuMoM/oRaT1TbR3efHk2JdCsKVDJScEzY8kdjw==", + "version": "0.15.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.15.0-beta.167.tgz", + "integrity": "sha512-7EK/PN7QaUZcNE+bHmt7ELSNK3OBR2UZEuqNkE/0ooha7KqqI9mxZQG53Yn6wYcmRip34OFW9YF49kbTCkFuBg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-unicode11": { - "version": "0.10.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.10.0-beta.165.tgz", - "integrity": "sha512-a6myeixOXDYeuOj0GK+/LWXbXXWanFVMvQRUMgC7wmUNGgSZiyJ8NPWzhAq6Vib4jSQ02pd+ux4ZtWs5kyvFLg==", + "version": "0.10.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.10.0-beta.167.tgz", + "integrity": "sha512-uOJCfsMhML8GTesUKqCC4CH2cPH9yCIFnixiwgpcE5eLVrLszXW3tny25S/bu6EM+rfvE4nwIvLNTMrQYYnMFA==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-webgl": { - "version": "0.20.0-beta.164", - "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.20.0-beta.164.tgz", - "integrity": "sha512-wXTi281yTWY1iAmRh21N6AhcEMopTjIm4xsdDdNmS5LbhxNuhVKNNIGKm5Zhd/G9fpn/vrfC4yZ6KA0lI/ZAxg==", + "version": "0.20.0-beta.166", + "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.20.0-beta.166.tgz", + "integrity": "sha512-SZmz7HDeSMc4O0++x14ma/UWbK/0Ea8AikHw6V5ex/shjrjwbik7Uf2n8FfG2zMYNgBakvCy/SbwDPtQN+IbRQ==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/headless": { - "version": "6.1.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-6.1.0-beta.165.tgz", - "integrity": "sha512-GjAqUhEiY7gb12+yIItptgMKUwHMa7o39HpezD7sfNjYLjmvWQcB02jqUdVMsvjjAKTe2YJMXp3RkApeXdMRVg==", + "version": "6.1.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-6.1.0-beta.167.tgz", + "integrity": "sha512-8TokXIwL8UeHhR4mAlUurzrqku5xaDXsikNi0HWpTcPCtZPdntxW36OaHxJmmpuHc8CecdaJehSuhApeW2TuZw==", "license": "MIT", "workspaces": [ "addons/*" ] }, "node_modules/@xterm/xterm": { - "version": "6.1.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.1.0-beta.165.tgz", - "integrity": "sha512-OUszO4HSmGPEw3EhboyIcNLQKJQKCDsYHv9kYFcaiK3biuNjGP0VAPVUJOLbf3V9fa1GLUUq+t985blqvTApoA==", + "version": "6.1.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.1.0-beta.167.tgz", + "integrity": "sha512-OOG2gcH9OhEjY+KW3X2s30e1KzaRlynhkF9/oKfb2PNUJBYUdXeww4YAugrz7+nLP8KxCeOdSJrq7VvRzyZrwA==", "license": "MIT", "workspaces": [ "addons/*" diff --git a/package.json b/package.json index 3d3fc5c7f44cb..d4dda3bbce18e 100644 --- a/package.json +++ b/package.json @@ -98,16 +98,16 @@ "@vscode/windows-mutex": "^0.5.0", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", - "@xterm/addon-clipboard": "^0.3.0-beta.165", - "@xterm/addon-image": "^0.10.0-beta.165", - "@xterm/addon-ligatures": "^0.11.0-beta.165", - "@xterm/addon-progress": "^0.3.0-beta.165", - "@xterm/addon-search": "^0.17.0-beta.165", - "@xterm/addon-serialize": "^0.15.0-beta.165", - "@xterm/addon-unicode11": "^0.10.0-beta.165", - "@xterm/addon-webgl": "^0.20.0-beta.164", - "@xterm/headless": "^6.1.0-beta.165", - "@xterm/xterm": "^6.1.0-beta.165", + "@xterm/addon-clipboard": "^0.3.0-beta.167", + "@xterm/addon-image": "^0.10.0-beta.167", + "@xterm/addon-ligatures": "^0.11.0-beta.167", + "@xterm/addon-progress": "^0.3.0-beta.167", + "@xterm/addon-search": "^0.17.0-beta.167", + "@xterm/addon-serialize": "^0.15.0-beta.167", + "@xterm/addon-unicode11": "^0.10.0-beta.167", + "@xterm/addon-webgl": "^0.20.0-beta.166", + "@xterm/headless": "^6.1.0-beta.167", + "@xterm/xterm": "^6.1.0-beta.167", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "jschardet": "3.1.4", @@ -249,4 +249,4 @@ "optionalDependencies": { "windows-foreground-love": "0.6.1" } -} \ No newline at end of file +} diff --git a/remote/package-lock.json b/remote/package-lock.json index d58a430653403..625b7143211ee 100644 --- a/remote/package-lock.json +++ b/remote/package-lock.json @@ -22,16 +22,16 @@ "@vscode/vscode-languagedetection": "1.0.23", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", - "@xterm/addon-clipboard": "^0.3.0-beta.165", - "@xterm/addon-image": "^0.10.0-beta.165", - "@xterm/addon-ligatures": "^0.11.0-beta.165", - "@xterm/addon-progress": "^0.3.0-beta.165", - "@xterm/addon-search": "^0.17.0-beta.165", - "@xterm/addon-serialize": "^0.15.0-beta.165", - "@xterm/addon-unicode11": "^0.10.0-beta.165", - "@xterm/addon-webgl": "^0.20.0-beta.164", - "@xterm/headless": "^6.1.0-beta.165", - "@xterm/xterm": "^6.1.0-beta.165", + "@xterm/addon-clipboard": "^0.3.0-beta.167", + "@xterm/addon-image": "^0.10.0-beta.167", + "@xterm/addon-ligatures": "^0.11.0-beta.167", + "@xterm/addon-progress": "^0.3.0-beta.167", + "@xterm/addon-search": "^0.17.0-beta.167", + "@xterm/addon-serialize": "^0.15.0-beta.167", + "@xterm/addon-unicode11": "^0.10.0-beta.167", + "@xterm/addon-webgl": "^0.20.0-beta.166", + "@xterm/headless": "^6.1.0-beta.167", + "@xterm/xterm": "^6.1.0-beta.167", "cookie": "^0.7.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", @@ -578,30 +578,30 @@ "license": "MIT" }, "node_modules/@xterm/addon-clipboard": { - "version": "0.3.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.3.0-beta.165.tgz", - "integrity": "sha512-48GUTZg7sKB7tQvtC7FcH22GxxO0cIUVM4hw068Oi3cJnxDLLPQDicPv70fFG7zysGxxEKE7A39GMtHhwFI75Q==", + "version": "0.3.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.3.0-beta.167.tgz", + "integrity": "sha512-+JSjagAk6okCaGVYFwkKl8qIBfy+W+h7p/qULIi9cC8QyeswOLaE4GOqY5yuGNQYU+zMlrpgR1ttyp0o6y9LHg==", "license": "MIT", "dependencies": { "js-base64": "^3.7.5" }, "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-image": { - "version": "0.10.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.10.0-beta.165.tgz", - "integrity": "sha512-DwYvKRgytc1OYoJVwA/doOTT92K8asgvnt3FzsHt5D+XgniwdvM5nwjxv95p6UXv0kEOxQWFy3sNJl/4g/5pew==", + "version": "0.10.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.10.0-beta.167.tgz", + "integrity": "sha512-Bxi2oTaX7YM1gup0OSv02n9+tA3P1Ozlu5zyB/ZwSVkepB9FOxCODWD0l3DhWyLGMBqQ+OY/COw5SRxrKyvkNg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-ligatures": { - "version": "0.11.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.11.0-beta.165.tgz", - "integrity": "sha512-3nuPBH4ZrGYF+yj/tBB/+YaLRnn8qqbR9J9OcvM6aeDfboEeaFAYIpmdqjh+2Rl2JFTIgZoiS3dKLWaUUpk0Tw==", + "version": "0.11.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.11.0-beta.167.tgz", + "integrity": "sha512-d+9ANnoz6D4J06CjronVolcG+J0jqUWQXbzciRqQkHq0or5k8PYuIj2DuuyBx/0rOaN7JYN347KQ9iylk+++xA==", "license": "MIT", "dependencies": { "lru-cache": "^6.0.0", @@ -611,67 +611,67 @@ "node": ">8.0.0" }, "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-progress": { - "version": "0.3.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-progress/-/addon-progress-0.3.0-beta.165.tgz", - "integrity": "sha512-Jl+dhHkFBUafrXCECI/EepcGV1GYuU1X/0oXkPYu/VYfbmkjQSAidmfBAEyS+4+AUK5Lkf6yLdb1N13tZVexyg==", + "version": "0.3.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-progress/-/addon-progress-0.3.0-beta.167.tgz", + "integrity": "sha512-8eeaWnp0pnjYaKtOLsXVCE0hTFXS0A2kZCciWp52l6CbNGQsnky4VNWJXKaJrGbS+RHGxT6qWgcB+Mx5ETzZfg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-search": { - "version": "0.17.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.17.0-beta.165.tgz", - "integrity": "sha512-3KjonTDJl/8M6jI5nTJITVT+Z528d/5CgqRmn6IV+sDgRfr3W84RZNDsaxXsLoc0GDsxQIB74/FmnNykUQ5Yew==", + "version": "0.17.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.17.0-beta.167.tgz", + "integrity": "sha512-1K6POdu0iCdjtW0Bs2z3IGWpMU4gJypbYxGnecbGnsH86rNRGwAKS0bKwWlHAiUQLlOxSGxTiNbazbrDln03FQ==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-serialize": { - "version": "0.15.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.15.0-beta.165.tgz", - "integrity": "sha512-NjXE+of4NJagrtHlzePBuWQ8a9pBFhhmQuvOhPj9W3CSi+VanuMoM/oRaT1TbR3efHk2JdCsKVDJScEzY8kdjw==", + "version": "0.15.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.15.0-beta.167.tgz", + "integrity": "sha512-7EK/PN7QaUZcNE+bHmt7ELSNK3OBR2UZEuqNkE/0ooha7KqqI9mxZQG53Yn6wYcmRip34OFW9YF49kbTCkFuBg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-unicode11": { - "version": "0.10.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.10.0-beta.165.tgz", - "integrity": "sha512-a6myeixOXDYeuOj0GK+/LWXbXXWanFVMvQRUMgC7wmUNGgSZiyJ8NPWzhAq6Vib4jSQ02pd+ux4ZtWs5kyvFLg==", + "version": "0.10.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.10.0-beta.167.tgz", + "integrity": "sha512-uOJCfsMhML8GTesUKqCC4CH2cPH9yCIFnixiwgpcE5eLVrLszXW3tny25S/bu6EM+rfvE4nwIvLNTMrQYYnMFA==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-webgl": { - "version": "0.20.0-beta.164", - "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.20.0-beta.164.tgz", - "integrity": "sha512-wXTi281yTWY1iAmRh21N6AhcEMopTjIm4xsdDdNmS5LbhxNuhVKNNIGKm5Zhd/G9fpn/vrfC4yZ6KA0lI/ZAxg==", + "version": "0.20.0-beta.166", + "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.20.0-beta.166.tgz", + "integrity": "sha512-SZmz7HDeSMc4O0++x14ma/UWbK/0Ea8AikHw6V5ex/shjrjwbik7Uf2n8FfG2zMYNgBakvCy/SbwDPtQN+IbRQ==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/headless": { - "version": "6.1.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-6.1.0-beta.165.tgz", - "integrity": "sha512-GjAqUhEiY7gb12+yIItptgMKUwHMa7o39HpezD7sfNjYLjmvWQcB02jqUdVMsvjjAKTe2YJMXp3RkApeXdMRVg==", + "version": "6.1.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-6.1.0-beta.167.tgz", + "integrity": "sha512-8TokXIwL8UeHhR4mAlUurzrqku5xaDXsikNi0HWpTcPCtZPdntxW36OaHxJmmpuHc8CecdaJehSuhApeW2TuZw==", "license": "MIT", "workspaces": [ "addons/*" ] }, "node_modules/@xterm/xterm": { - "version": "6.1.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.1.0-beta.165.tgz", - "integrity": "sha512-OUszO4HSmGPEw3EhboyIcNLQKJQKCDsYHv9kYFcaiK3biuNjGP0VAPVUJOLbf3V9fa1GLUUq+t985blqvTApoA==", + "version": "6.1.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.1.0-beta.167.tgz", + "integrity": "sha512-OOG2gcH9OhEjY+KW3X2s30e1KzaRlynhkF9/oKfb2PNUJBYUdXeww4YAugrz7+nLP8KxCeOdSJrq7VvRzyZrwA==", "license": "MIT", "workspaces": [ "addons/*" diff --git a/remote/package.json b/remote/package.json index 0784e097baf34..ecc25ae5590e0 100644 --- a/remote/package.json +++ b/remote/package.json @@ -17,16 +17,16 @@ "@vscode/vscode-languagedetection": "1.0.23", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", - "@xterm/addon-clipboard": "^0.3.0-beta.165", - "@xterm/addon-image": "^0.10.0-beta.165", - "@xterm/addon-ligatures": "^0.11.0-beta.165", - "@xterm/addon-progress": "^0.3.0-beta.165", - "@xterm/addon-search": "^0.17.0-beta.165", - "@xterm/addon-serialize": "^0.15.0-beta.165", - "@xterm/addon-unicode11": "^0.10.0-beta.165", - "@xterm/addon-webgl": "^0.20.0-beta.164", - "@xterm/headless": "^6.1.0-beta.165", - "@xterm/xterm": "^6.1.0-beta.165", + "@xterm/addon-clipboard": "^0.3.0-beta.167", + "@xterm/addon-image": "^0.10.0-beta.167", + "@xterm/addon-ligatures": "^0.11.0-beta.167", + "@xterm/addon-progress": "^0.3.0-beta.167", + "@xterm/addon-search": "^0.17.0-beta.167", + "@xterm/addon-serialize": "^0.15.0-beta.167", + "@xterm/addon-unicode11": "^0.10.0-beta.167", + "@xterm/addon-webgl": "^0.20.0-beta.166", + "@xterm/headless": "^6.1.0-beta.167", + "@xterm/xterm": "^6.1.0-beta.167", "cookie": "^0.7.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", diff --git a/remote/web/package-lock.json b/remote/web/package-lock.json index 93e41b4397009..8ee7ddeb9bd32 100644 --- a/remote/web/package-lock.json +++ b/remote/web/package-lock.json @@ -14,15 +14,15 @@ "@vscode/iconv-lite-umd": "0.7.1", "@vscode/tree-sitter-wasm": "^0.3.0", "@vscode/vscode-languagedetection": "1.0.23", - "@xterm/addon-clipboard": "^0.3.0-beta.165", - "@xterm/addon-image": "^0.10.0-beta.165", - "@xterm/addon-ligatures": "^0.11.0-beta.165", - "@xterm/addon-progress": "^0.3.0-beta.165", - "@xterm/addon-search": "^0.17.0-beta.165", - "@xterm/addon-serialize": "^0.15.0-beta.165", - "@xterm/addon-unicode11": "^0.10.0-beta.165", - "@xterm/addon-webgl": "^0.20.0-beta.164", - "@xterm/xterm": "^6.1.0-beta.165", + "@xterm/addon-clipboard": "^0.3.0-beta.167", + "@xterm/addon-image": "^0.10.0-beta.167", + "@xterm/addon-ligatures": "^0.11.0-beta.167", + "@xterm/addon-progress": "^0.3.0-beta.167", + "@xterm/addon-search": "^0.17.0-beta.167", + "@xterm/addon-serialize": "^0.15.0-beta.167", + "@xterm/addon-unicode11": "^0.10.0-beta.167", + "@xterm/addon-webgl": "^0.20.0-beta.166", + "@xterm/xterm": "^6.1.0-beta.167", "jschardet": "3.1.4", "katex": "^0.16.22", "tas-client": "0.3.1", @@ -100,30 +100,30 @@ } }, "node_modules/@xterm/addon-clipboard": { - "version": "0.3.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.3.0-beta.165.tgz", - "integrity": "sha512-48GUTZg7sKB7tQvtC7FcH22GxxO0cIUVM4hw068Oi3cJnxDLLPQDicPv70fFG7zysGxxEKE7A39GMtHhwFI75Q==", + "version": "0.3.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.3.0-beta.167.tgz", + "integrity": "sha512-+JSjagAk6okCaGVYFwkKl8qIBfy+W+h7p/qULIi9cC8QyeswOLaE4GOqY5yuGNQYU+zMlrpgR1ttyp0o6y9LHg==", "license": "MIT", "dependencies": { "js-base64": "^3.7.5" }, "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-image": { - "version": "0.10.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.10.0-beta.165.tgz", - "integrity": "sha512-DwYvKRgytc1OYoJVwA/doOTT92K8asgvnt3FzsHt5D+XgniwdvM5nwjxv95p6UXv0kEOxQWFy3sNJl/4g/5pew==", + "version": "0.10.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.10.0-beta.167.tgz", + "integrity": "sha512-Bxi2oTaX7YM1gup0OSv02n9+tA3P1Ozlu5zyB/ZwSVkepB9FOxCODWD0l3DhWyLGMBqQ+OY/COw5SRxrKyvkNg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-ligatures": { - "version": "0.11.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.11.0-beta.165.tgz", - "integrity": "sha512-3nuPBH4ZrGYF+yj/tBB/+YaLRnn8qqbR9J9OcvM6aeDfboEeaFAYIpmdqjh+2Rl2JFTIgZoiS3dKLWaUUpk0Tw==", + "version": "0.11.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.11.0-beta.167.tgz", + "integrity": "sha512-d+9ANnoz6D4J06CjronVolcG+J0jqUWQXbzciRqQkHq0or5k8PYuIj2DuuyBx/0rOaN7JYN347KQ9iylk+++xA==", "license": "MIT", "dependencies": { "lru-cache": "^6.0.0", @@ -133,58 +133,58 @@ "node": ">8.0.0" }, "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-progress": { - "version": "0.3.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-progress/-/addon-progress-0.3.0-beta.165.tgz", - "integrity": "sha512-Jl+dhHkFBUafrXCECI/EepcGV1GYuU1X/0oXkPYu/VYfbmkjQSAidmfBAEyS+4+AUK5Lkf6yLdb1N13tZVexyg==", + "version": "0.3.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-progress/-/addon-progress-0.3.0-beta.167.tgz", + "integrity": "sha512-8eeaWnp0pnjYaKtOLsXVCE0hTFXS0A2kZCciWp52l6CbNGQsnky4VNWJXKaJrGbS+RHGxT6qWgcB+Mx5ETzZfg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-search": { - "version": "0.17.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.17.0-beta.165.tgz", - "integrity": "sha512-3KjonTDJl/8M6jI5nTJITVT+Z528d/5CgqRmn6IV+sDgRfr3W84RZNDsaxXsLoc0GDsxQIB74/FmnNykUQ5Yew==", + "version": "0.17.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.17.0-beta.167.tgz", + "integrity": "sha512-1K6POdu0iCdjtW0Bs2z3IGWpMU4gJypbYxGnecbGnsH86rNRGwAKS0bKwWlHAiUQLlOxSGxTiNbazbrDln03FQ==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-serialize": { - "version": "0.15.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.15.0-beta.165.tgz", - "integrity": "sha512-NjXE+of4NJagrtHlzePBuWQ8a9pBFhhmQuvOhPj9W3CSi+VanuMoM/oRaT1TbR3efHk2JdCsKVDJScEzY8kdjw==", + "version": "0.15.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.15.0-beta.167.tgz", + "integrity": "sha512-7EK/PN7QaUZcNE+bHmt7ELSNK3OBR2UZEuqNkE/0ooha7KqqI9mxZQG53Yn6wYcmRip34OFW9YF49kbTCkFuBg==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-unicode11": { - "version": "0.10.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.10.0-beta.165.tgz", - "integrity": "sha512-a6myeixOXDYeuOj0GK+/LWXbXXWanFVMvQRUMgC7wmUNGgSZiyJ8NPWzhAq6Vib4jSQ02pd+ux4ZtWs5kyvFLg==", + "version": "0.10.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.10.0-beta.167.tgz", + "integrity": "sha512-uOJCfsMhML8GTesUKqCC4CH2cPH9yCIFnixiwgpcE5eLVrLszXW3tny25S/bu6EM+rfvE4nwIvLNTMrQYYnMFA==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/addon-webgl": { - "version": "0.20.0-beta.164", - "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.20.0-beta.164.tgz", - "integrity": "sha512-wXTi281yTWY1iAmRh21N6AhcEMopTjIm4xsdDdNmS5LbhxNuhVKNNIGKm5Zhd/G9fpn/vrfC4yZ6KA0lI/ZAxg==", + "version": "0.20.0-beta.166", + "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.20.0-beta.166.tgz", + "integrity": "sha512-SZmz7HDeSMc4O0++x14ma/UWbK/0Ea8AikHw6V5ex/shjrjwbik7Uf2n8FfG2zMYNgBakvCy/SbwDPtQN+IbRQ==", "license": "MIT", "peerDependencies": { - "@xterm/xterm": "^6.1.0-beta.165" + "@xterm/xterm": "^6.1.0-beta.167" } }, "node_modules/@xterm/xterm": { - "version": "6.1.0-beta.165", - "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.1.0-beta.165.tgz", - "integrity": "sha512-OUszO4HSmGPEw3EhboyIcNLQKJQKCDsYHv9kYFcaiK3biuNjGP0VAPVUJOLbf3V9fa1GLUUq+t985blqvTApoA==", + "version": "6.1.0-beta.167", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.1.0-beta.167.tgz", + "integrity": "sha512-OOG2gcH9OhEjY+KW3X2s30e1KzaRlynhkF9/oKfb2PNUJBYUdXeww4YAugrz7+nLP8KxCeOdSJrq7VvRzyZrwA==", "license": "MIT", "workspaces": [ "addons/*" diff --git a/remote/web/package.json b/remote/web/package.json index eb80319e29b22..37b14b0114ffd 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -9,15 +9,15 @@ "@vscode/iconv-lite-umd": "0.7.1", "@vscode/tree-sitter-wasm": "^0.3.0", "@vscode/vscode-languagedetection": "1.0.23", - "@xterm/addon-clipboard": "^0.3.0-beta.165", - "@xterm/addon-image": "^0.10.0-beta.165", - "@xterm/addon-ligatures": "^0.11.0-beta.165", - "@xterm/addon-progress": "^0.3.0-beta.165", - "@xterm/addon-search": "^0.17.0-beta.165", - "@xterm/addon-serialize": "^0.15.0-beta.165", - "@xterm/addon-unicode11": "^0.10.0-beta.165", - "@xterm/addon-webgl": "^0.20.0-beta.164", - "@xterm/xterm": "^6.1.0-beta.165", + "@xterm/addon-clipboard": "^0.3.0-beta.167", + "@xterm/addon-image": "^0.10.0-beta.167", + "@xterm/addon-ligatures": "^0.11.0-beta.167", + "@xterm/addon-progress": "^0.3.0-beta.167", + "@xterm/addon-search": "^0.17.0-beta.167", + "@xterm/addon-serialize": "^0.15.0-beta.167", + "@xterm/addon-unicode11": "^0.10.0-beta.167", + "@xterm/addon-webgl": "^0.20.0-beta.166", + "@xterm/xterm": "^6.1.0-beta.167", "jschardet": "3.1.4", "katex": "^0.16.22", "tas-client": "0.3.1", From a3dddab13f73e6c2db391fb3538bbb6301938449 Mon Sep 17 00:00:00 2001 From: David Dossett <25163139+daviddossett@users.noreply.github.com> Date: Fri, 20 Feb 2026 13:26:19 -0800 Subject: [PATCH 34/37] Fix welcome view sessions grid layout after item height change (#296600) The 2-column grid CSS transforms in the welcome page used hardcoded 44px row heights, but ITEM_HEIGHT was changed to 54px in #296560. Update all transform values to match the new height (54px, 108px, 162px). --- .../browser/media/agentSessionsWelcome.css | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/contrib/welcomeAgentSessions/browser/media/agentSessionsWelcome.css b/src/vs/workbench/contrib/welcomeAgentSessions/browser/media/agentSessionsWelcome.css index edc3e1d193d49..a28e8a835929b 100644 --- a/src/vs/workbench/contrib/welcomeAgentSessions/browser/media/agentSessionsWelcome.css +++ b/src/vs/workbench/contrib/welcomeAgentSessions/browser/media/agentSessionsWelcome.css @@ -168,31 +168,31 @@ * Each pair forms a visual row. * Left column items need to move up by floor((index-1)/2) rows * Right column items need to move right and up by (index/2) rows - * Row height is 44px. + * Row height is 54px (must match AgentSessionsListDelegate.ITEM_HEIGHT). */ /* Left column items (odd positions): move up to form 2-column layout */ /* Item 3: move up 1 row */ .agentSessionsWelcome-sessionsGrid .monaco-list-row:nth-child(3) { - transform: translateY(-44px); + transform: translateY(-54px); } /* Item 5: move up 2 rows */ .agentSessionsWelcome-sessionsGrid .monaco-list-row:nth-child(5) { - transform: translateY(-88px); + transform: translateY(-108px); } /* Right column items (even positions): move right and up */ /* Item 2: move right, up 1 row */ .agentSessionsWelcome-sessionsGrid .monaco-list-row:nth-child(2) { - transform: translateX(100%) translateY(-44px); + transform: translateX(100%) translateY(-54px); } /* Item 4: move right, up 2 rows */ .agentSessionsWelcome-sessionsGrid .monaco-list-row:nth-child(4) { - transform: translateX(100%) translateY(-88px); + transform: translateX(100%) translateY(-108px); } /* Item 6: move right, up 3 rows */ .agentSessionsWelcome-sessionsGrid .monaco-list-row:nth-child(6) { - transform: translateX(100%) translateY(-132px); + transform: translateX(100%) translateY(-162px); } /* Style individual session items in the welcome page */ From 8801c3fac3b7b8758d88b1813ed0e41b6dab27bf Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 20 Feb 2026 13:26:42 -0800 Subject: [PATCH 35/37] Use markdown icons for prompt markdown files (#296602) --- .../theme-seti/icons/vs-seti-icon-theme.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/extensions/theme-seti/icons/vs-seti-icon-theme.json b/extensions/theme-seti/icons/vs-seti-icon-theme.json index f7c55c96d9e37..50e325eac8caf 100644 --- a/extensions/theme-seti/icons/vs-seti-icon-theme.json +++ b/extensions/theme-seti/icons/vs-seti-icon-theme.json @@ -1977,7 +1977,11 @@ "jsonl": "_json", "postcss": "_css", "django-html": "_html_3", - "blade": "_php" + "blade": "_php", + "prompt": "_markdown", + "instructions": "_markdown", + "chatagent": "_markdown", + "skill": "_markdown" }, "light": { "file": "_default_light", @@ -2299,7 +2303,11 @@ "jsonl": "_json_light", "postcss": "_css_light", "django-html": "_html_3_light", - "blade": "_php_light" + "blade": "_php_light", + "prompt": "_markdown_light", + "instructions": "_markdown_light", + "chatagent": "_markdown_light", + "skill": "_markdown_light" }, "fileNames": { "mix": "_hex_light", @@ -2403,4 +2411,4 @@ } }, "version": "https://github.com/jesseweed/seti-ui/commit/2d6c5e68b4ded73c92dac291845ee44e1182d511" -} \ No newline at end of file +} From dac39ff893cdc8b64a6e5a210a666e62308763e4 Mon Sep 17 00:00:00 2001 From: Megan Rogge Date: Fri, 20 Feb 2026 15:32:37 -0600 Subject: [PATCH 36/37] don't play chat request sounds on `/agents` entered in chat input (#296624) --- .../contrib/chat/browser/widget/chatWidget.ts | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/widget/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/widget/chatWidget.ts index 4134d04ad8231..27bef3f19c06b 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/chatWidget.ts @@ -2393,11 +2393,7 @@ export class ChatWidget extends Disposable implements IChatWidget { } // Expand directory attachments: extract images as binary entries const resolvedImageVariables = await this._resolveDirectoryImageAttachments(requestInputs.attachedContext.asArray()); - - if (this.viewModel.sessionResource && !options.queue) { - // todo@connor4312: move chatAccessibilityService.acceptRequest to a refcount model to handle queue messages - this.chatAccessibilityService.acceptRequest(this._viewModel!.sessionResource); - } + const submittedSessionResource = this.viewModel.sessionResource; const result = await this.chatService.sendRequest(this.viewModel.sessionResource, requestInputs.input, { userSelectedModelId: this.input.currentLanguageModel, @@ -2414,10 +2410,6 @@ export class ChatWidget extends Disposable implements IChatWidget { pauseQueue: options?.alwaysQueue, }); - if (this.viewModel.sessionResource && !options.queue && ChatSendResult.isRejected(result)) { - this.chatAccessibilityService.disposeRequest(this.viewModel.sessionResource); - } - if (ChatSendResult.isRejected(result)) { return; } @@ -2431,24 +2423,23 @@ export class ChatWidget extends Disposable implements IChatWidget { return; } - // If this was a queued request that just got dequeued, start the progress sound now - if (options.queue && this.viewModel?.sessionResource) { - this.chatAccessibilityService.acceptRequest(this.viewModel.sessionResource); - } - this._onDidSubmitAgent.fire({ agent: sent.data.agent, slashCommand: sent.data.slashCommand }); this.handleDelegationExitIfNeeded(this._lockedAgent, sent.data.agent); - sent.data.responseCompletePromise.then(() => { - const responses = this.viewModel?.getItems().filter(isResponseVM); - const lastResponse = responses?.[responses.length - 1]; - this.chatAccessibilityService.acceptResponse(this, this.container, lastResponse, this.viewModel?.sessionResource, options?.isVoiceInput); - if (lastResponse?.result?.nextQuestion) { - const { prompt, participant, command } = lastResponse.result.nextQuestion; - const question = formatChatQuestion(this.chatAgentService, this.location, prompt, participant, command); - if (question) { - this.input.setValue(question, false); + sent.data.responseCreatedPromise.then(() => { + // Only start accessibility progress once a real request/response model exists. + this.chatAccessibilityService.acceptRequest(submittedSessionResource); + sent.data.responseCompletePromise.then(() => { + const responses = this.viewModel?.getItems().filter(isResponseVM); + const lastResponse = responses?.[responses.length - 1]; + this.chatAccessibilityService.acceptResponse(this, this.container, lastResponse, submittedSessionResource, options?.isVoiceInput); + if (lastResponse?.result?.nextQuestion) { + const { prompt, participant, command } = lastResponse.result.nextQuestion; + const question = formatChatQuestion(this.chatAgentService, this.location, prompt, participant, command); + if (question) { + this.input.setValue(question, false); + } } - } + }); }); return sent.data.responseCreatedPromise; From 6955692b89755803beb8585b2a25f6126f3f8549 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Feb 2026 22:00:09 +0000 Subject: [PATCH 37/37] Raise keybinding precedence for chat question carousel and confirmation focus actions (#296616) --- .../contrib/chat/browser/actions/chatAccessibilityActions.ts | 2 +- src/vs/workbench/contrib/chat/browser/actions/chatActions.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.ts index 99bad32ce49b2..bc789fbed6df9 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.ts @@ -31,7 +31,7 @@ class AnnounceChatConfirmationAction extends Action2 { precondition: ChatContextKeys.enabled, f1: true, keybinding: { - weight: KeybindingWeight.WorkbenchContrib, + weight: KeybindingWeight.ExternalExtension + 1, primary: KeyMod.CtrlCmd | KeyCode.KeyA | KeyMod.Shift, when: ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, ChatContextKeys.Editing.hasQuestionCarousel.negate()) } diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts index 88e50c6a49834..5843e1ee006f7 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts @@ -893,7 +893,7 @@ export function registerChatActions() { f1: true, precondition: ChatContextKeys.inChatSession, keybinding: [{ - weight: KeybindingWeight.WorkbenchContrib, + weight: KeybindingWeight.ExternalExtension + 1, primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyA, when: ContextKeyExpr.and(ChatContextKeys.inChatSession, ChatContextKeys.Editing.hasQuestionCarousel), }]