Merge branch 'main' into justin/tools-sample

This commit is contained in:
Justin Chen
2025-09-09 15:49:37 -07:00
committed by GitHub
300 changed files with 62645 additions and 75618 deletions

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -35,8 +35,8 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "1.90.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"rootDir": "src",
"strict": true
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

View File

@ -2,13 +2,15 @@ name: CI
on:
pull_request:
branches: [ $default-branch ]
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm run validate
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci --workspaces=false
- run: npm run validate

3
.gitignore vendored
View File

@ -8,3 +8,6 @@ tsconfig.lsif.json
*.lsif
*.db
*.tsbuildinfo
# Don't check in API files. These should be pulled in during install
vscode*.d.ts

View File

@ -291,38 +291,41 @@ export const samples: Sample[] = [
apis: [],
contributions: []
},
{ description: 'authenticationprovider-sample', excludeFromReadme: true, path: 'authenticationprovider-sample', guide: null, apis: [], contributions: [] },
{ description: 'configuration-sample', excludeFromReadme: true, path: 'configuration-sample', guide: null, apis: [], contributions: [] },
{ description: 'chat-model-provider-sample', excludeFromReadme: true, path: 'chat-model-provider-sample', guide: null, apis: [], contributions: [] },
{ description: 'chat-output-renderer-sample', excludeFromReadme: true, path: 'chat-output-renderer-sample', guide: null, apis: [], contributions: [] },
{ description: 'contentprovider-sample', excludeFromReadme: true, path: 'contentprovider-sample', guide: null, apis: [], contributions: [] },
{ description: 'nodefs-provider-sample', excludeFromReadme: true, path: 'nodefs-provider-sample', guide: null, apis: [], contributions: [] },
{ description: 'progress-sample', excludeFromReadme: true, path: 'progress-sample', guide: null, apis: [], contributions: [] },
{ description: 'quickinput-sample', excludeFromReadme: true, path: 'quickinput-sample', guide: null, apis: [], contributions: [] },
{ description: 'diagnostic-related-information-sample', excludeFromReadme: true, path: 'diagnostic-related-information-sample', guide: null, apis: [], contributions: [] },
{ description: 'fsconsumer-sample', excludeFromReadme: true, path: 'fsconsumer-sample', guide: null, apis: [], contributions: [] },
{ description: 'github-authentication-sample', excludeFromReadme: true, path: 'github-authentication-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-sample', excludeFromReadme: true, path: 'helloworld-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-minimal-sample', excludeFromReadme: true, path: 'helloworld-minimal-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-test-sample', excludeFromReadme: true, path: 'helloworld-test-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-web-sample', excludeFromReadme: true, path: 'helloworld-web-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-test-cli-sample', excludeFromReadme: true, path: 'helloworld-test-cli-sample', guide: null, apis: [], contributions: [] },
{ description: 'inline-completions', excludeFromReadme: true, path: 'inline-completions', guide: null, apis: [], contributions: [] },
{ description: 'notebook-renderer-react-sample', excludeFromReadme: true, path: 'notebook-renderer-react-sample', guide: null, apis: [], contributions: [] },
{ description: 'notebook-format-code-action-sample', excludeFromReadme: true, path: 'notebook-format-code-action-sample', guide: null, apis: [], contributions: [] },
{ description: 'notebook-serializer-sample', excludeFromReadme: true, path: 'notebook-serializer-sample', guide: null, apis: [], contributions: [] },
{ description: 'proposed-api-sample', excludeFromReadme: true, path: 'proposed-api-sample', guide: null, apis: [], contributions: [] },
{ description: 'virtual-document-sample', excludeFromReadme: true, path: 'virtual-document-sample', guide: null, apis: [], contributions: [] },
{ description: 'welcome-view-content-sample', excludeFromReadme: true, path: 'welcome-view-content-sample', guide: null, apis: [], contributions: [] },
{ description: 'document-paste', excludeFromReadme: true, path: 'document-paste', guide: null, apis: [], contributions: [] },
{ description: 'drop-on-document', excludeFromReadme: true, path: 'drop-on-document', guide: null, apis: [], contributions: [] },
{ description: 'uri-handler-sample', excludeFromReadme: true, path: 'uri-handler-sample', guide: null, apis: [], contributions: [] },
{ description: 'authenticationprovider-sample', excludeFromReadme: true, path: 'authenticationprovider-sample', guide: null, apis: [], contributions: [] },
{ description: 'fsconsumer-sample', excludeFromReadme: true, path: 'fsconsumer-sample', guide: null, apis: [], contributions: [] },
{ description: 'github-authentication-sample', excludeFromReadme: true, path: 'github-authentication-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-minimal-sample', excludeFromReadme: true, path: 'helloworld-minimal-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-sample', excludeFromReadme: true, path: 'helloworld-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-test-cli-sample', excludeFromReadme: true, path: 'helloworld-test-cli-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-test-sample', excludeFromReadme: true, path: 'helloworld-test-sample', guide: null, apis: [], contributions: [] },
{ description: 'helloworld-web-sample', excludeFromReadme: true, path: 'helloworld-web-sample', guide: null, apis: [], contributions: [] },
{ description: 'inline-completions', excludeFromReadme: true, path: 'inline-completions', guide: null, apis: [], contributions: [] },
{ description: 'jupyter-kernel-execution-sample', excludeFromReadme: true, path: 'jupyter-kernel-execution-sample', guide: null, apis: [], contributions: [] },
{ description: 'lm-api-tutorial', excludeFromReadme: true, path: 'lm-api-tutorial', guide: null, apis: [], contributions: [] },
{ description: 'mcp-extension-sample', excludeFromReadme: true, path: 'mcp-extension-sample', guide: null, apis: [], contributions: [] },
{ description: 'nodefs-provider-sample', excludeFromReadme: true, path: 'nodefs-provider-sample', guide: null, apis: [], contributions: [] },
{ description: 'notebook-format-code-action-sample', excludeFromReadme: true, path: 'notebook-format-code-action-sample', guide: null, apis: [], contributions: [] },
{ description: 'notebook-renderer-react-sample', excludeFromReadme: true, path: 'notebook-renderer-react-sample', guide: null, apis: [], contributions: [] },
{ description: 'notebook-serializer-sample', excludeFromReadme: true, path: 'notebook-serializer-sample', guide: null, apis: [], contributions: [] },
{ description: 'progress-sample', excludeFromReadme: true, path: 'progress-sample', guide: null, apis: [], contributions: [] },
{ description: 'proposed-api-sample', excludeFromReadme: true, path: 'proposed-api-sample', guide: null, apis: [], contributions: [] },
{ description: 'quickinput-sample', excludeFromReadme: true, path: 'quickinput-sample', guide: null, apis: [], contributions: [] },
{ description: 'shell-integration-sample', excludeFromReadme: true, path: 'shell-integration-sample', guide: null, apis: [], contributions: [] },
{ description: 'tabs-api-sample', excludeFromReadme: true, path: 'tabs-api-sample', guide: null, apis: [], contributions: [] },
{ description: 'telemetry-sample', excludeFromReadme: true, path: 'telemetry-sample', guide: null, apis: [], contributions: [] },
{ description: 'lm-api-tutorial', excludeFromReadme: true, path: 'lm-api-tutorial', guide: null, apis: [], contributions: [] },
{ description: 'wasm-component-model', excludeFromReadme: true, path: 'wasm-component-model', guide: null, apis: [], contributions: [] },
{ description: 'uri-handler-sample', excludeFromReadme: true, path: 'uri-handler-sample', guide: null, apis: [], contributions: [] },
{ description: 'virtual-document-sample', excludeFromReadme: true, path: 'virtual-document-sample', guide: null, apis: [], contributions: [] },
{ description: 'wasm-component-model-async', excludeFromReadme: true, path: 'wasm-component-model-async', guide: null, apis: [], contributions: [] },
{ description: 'wasm-component-model-resource', excludeFromReadme: true, path: 'wasm-component-model-resource', guide: null, apis: [], contributions: [] },
{ description: 'wasm-component-model', excludeFromReadme: true, path: 'wasm-component-model', guide: null, apis: [], contributions: [] },
{ description: 'welcome-view-content-sample', excludeFromReadme: true, path: 'welcome-view-content-sample', guide: null, apis: [], contributions: [] },
]
/**

View File

@ -2,9 +2,9 @@
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "Node",
"target": "ES2022",
"target": "ES2024",
"lib": [
"ES2022"
"ES2024"
],
"noEmit": true,
"strict": true

View File

@ -16,6 +16,9 @@ function validateSamplesAreListed() {
samplesByPath.set(sample.path, sample);
}
const errors: Error[] = [];
for (const fileName of fs.readdirSync(root)) {
if (fileName === 'node_modules'
|| fileName.startsWith('.')
@ -26,7 +29,15 @@ function validateSamplesAreListed() {
const sampleEntry = samplesByPath.get(fileName);
if (!sampleEntry) {
throw new Error(`Sample '${fileName}' is not listed in samples.js`);
errors.push(new Error(`Sample '${fileName}' is not listed in samples.js`));
}
}
if (errors.length > 0) {
if (errors.length === 1) {
throw errors[0];
} else {
throw new AggregateError(errors, 'Multiple samples are not listed in samples.js');
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,51 +1,49 @@
{
"name": "vscode-authenticationprovider-sample",
"displayName": "AuthenticationProvider API Sample",
"description": "AuthenticationProvider API Sample",
"version": "0.0.1",
"engines": {
"vscode": "^1.74.0"
},
"categories": [
"Other"
],
"activationEvents": [],
"main": "./out/extension.js",
"contributes": {
"commands": [
{
"command": "vscode-authenticationprovider-sample.login",
"title": "Login with Azure DevOps"
}
],
"authentication": [
{
"id": "azuredevopspat",
"label": "Azure DevOps PAT"
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ./",
"pretest": "npm run compile && npm run lint",
"lint": "eslint",
"test": "node ./out/test/runTest.js"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/glob": "^7.1.3",
"@types/isomorphic-fetch": "^0.0.35",
"@types/node": "^20",
"@types/vscode": "^1.60.0",
"eslint": "^9.13.0",
"glob": "^7.1.7",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
},
"dependencies": {
"isomorphic-fetch": "^3.0.0"
}
}
"name": "vscode-authenticationprovider-sample",
"displayName": "AuthenticationProvider API Sample",
"description": "AuthenticationProvider API Sample",
"version": "0.0.1",
"engines": {
"vscode": "^1.100.0"
},
"categories": [
"Other"
],
"activationEvents": [],
"main": "./out/extension.js",
"contributes": {
"commands": [
{
"command": "vscode-authenticationprovider-sample.login",
"title": "Login with Azure DevOps"
}
],
"authentication": [
{
"id": "azuredevopspat",
"label": "Azure DevOps PAT"
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ./",
"pretest": "npm run compile && npm run lint",
"lint": "eslint",
"test": "node ./out/test/runTest.js"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/isomorphic-fetch": "^0.0.35",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
},
"dependencies": {
"isomorphic-fetch": "^3.0.0"
}
}

View File

@ -1,5 +1,6 @@
import {
authentication,
AuthenticationGetSessionOptions,
AuthenticationProvider,
AuthenticationProviderAuthenticationSessionsChangeEvent,
AuthenticationSession,
@ -75,7 +76,7 @@ export class AzureDevOpsAuthenticationProvider implements AuthenticationProvider
const changed: AuthenticationSession[] = [];
const previousToken = await this.currentToken;
const session = (await this.getSessions())[0];
const session = (await this.getSessions(undefined))[0];
if (session?.accessToken && !previousToken) {
added.push(session);
@ -97,7 +98,7 @@ export class AzureDevOpsAuthenticationProvider implements AuthenticationProvider
}
// This function is called first when `vscode.authentication.getSessions` is called.
async getSessions(_scopes?: string[]): Promise<readonly AuthenticationSession[]> {
async getSessions(_scopes: string[] | undefined, _options?: AuthenticationGetSessionOptions): Promise<AuthenticationSession[]> {
this.ensureInitialized();
const token = await this.cacheTokenFromStorage();
return token ? [new AzureDevOpsPatSession(token)] : [];
@ -137,6 +138,10 @@ export class AzureDevOpsAuthenticationProvider implements AuthenticationProvider
return;
}
await this.secretStorage.delete(AzureDevOpsAuthenticationProvider.secretKey);
this._onDidChangeSessions.fire({ removed: [new AzureDevOpsPatSession(token)] });
this._onDidChangeSessions.fire({
removed: [new AzureDevOpsPatSession(token)],
added: [],
changed: [],
});
}
}

View File

@ -1,15 +1,15 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"target": "ES2024",
"outDir": "out",
"lib": [
"es6",
"ES2024",
"DOM"
],
"sourceMap": true,
"rootDir": "src",
"strict": true /* enable all strict type-checking options */
"strict": true /* enable all strict type-checking options */
/* Additional Checks */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
@ -19,4 +19,4 @@
"node_modules",
".vscode-test"
]
}
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -45,10 +45,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"rootDir": ".",
"strict": true
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -29,10 +29,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"rootDir": "src",
"strict": true
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

5
chat-model-provider-sample/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
out
dist
node_modules
.vscode-test/
*.vsix

View File

@ -0,0 +1,35 @@
// A launch configuration that compiles the extension and then opens it inside a new window
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
{
"version": "0.2.0",
"configurations": [
{
"name": "Run Extension",
"type": "extensionHost",
"request": "launch",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"outFiles": [
"${workspaceFolder}/out/**/*.js"
],
"preLaunchTask": "${defaultBuildTask}"
},
{
"name": "Extension Tests",
"type": "extensionHost",
"request": "launch",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}",
"--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
],
"outFiles": [
"${workspaceFolder}/out/**/*.js",
"${workspaceFolder}/dist/**/*.js"
],
"preLaunchTask": "tasks: watch-tests"
}
]
}

View File

@ -0,0 +1,9 @@
{
"search.exclude": {
"out": true
},
"git.branchProtection": [
"main"
],
"files.trimTrailingWhitespace": true
}

View File

@ -0,0 +1,40 @@
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"script": "watch",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"presentation": {
"reveal": "never",
"group": "watchers"
},
"group": {
"kind": "build",
"isDefault": true
}
},
{
"type": "npm",
"script": "watch-tests",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"presentation": {
"reveal": "never",
"group": "watchers"
},
"group": "build"
},
{
"label": "tasks: watch-tests",
"dependsOn": [
"npm: watch",
"npm: watch-tests"
],
"problemMatcher": []
}
]
}

View File

@ -0,0 +1,11 @@
.vscode/**
.vscode-test/**
src/**
.gitignore
.yarnrc
webpack.config.js
vsc-extension-quickstart.md
**/tsconfig.json
**/.eslintrc.json
**/*.map
**/*.ts

View File

@ -0,0 +1,101 @@
# Chat Model Provider Sample
This VS Code extension demonstrates how to implement a custom chat model provider using the Language Model (LM) API. It serves as a sample implementation for developers who want to integrate their own AI models with VS Code's chat functionality.
## Features
This extension provides:
- **Custom Chat Model Provider**: Implements the `LanguageModelChatProvider2` interface to register custom AI models
- **Multiple Model Support**: Demonstrates how to provide multiple models from a single provider
- **Sample Models**: Includes two example models:
- **Dog Model**: Responds with dog-themed messages ("Woof!")
- **Cat Model**: Responds with cat-themed messages ("Meow!")
## Architecture
The extension consists of two main components:
### Extension Activation (`src/extension.ts`)
- Registers the sample chat model provider with VS Code's LM API
- Uses the vendor ID `"sample"` to identify the provider
### Chat Model Provider (`src/provider.ts`)
- Implements `LanguageModelChatProvider2` interface
- Provides model information including capabilities (tool calling, vision support)
- Handles chat requests and returns appropriate responses
- Includes token counting functionality
## Model Capabilities
Each sample model declares the following capabilities:
- **Tool Calling**: ✅ Enabled
- **Vision**: ✅ Enabled
- **Max Input Tokens**: 120,000
- **Max Output Tokens**: 8,192
## Getting Started
### Prerequisites
- VS Code version 1.103.0 or higher
- Node.js and npm installed
### Installation and Development
1. Clone this repository
2. Navigate to the extension directory:
```bash
cd chat-model-provider-sample
```
3. Install dependencies:
```bash
npm install
```
4. Compile the extension:
```bash
npm run compile
```
5. Press `F5` to launch a new Extension Development Host window
6. The extension will be active and ready to provide chat models
### Building and Watching
- **Build once**: `npm run compile`
- **Watch mode**: `npm run watch` (automatically recompiles on file changes)
- **Lint code**: `npm run lint`
## Usage
Once the extension is active:
1. Open VS Code's chat interface
2. Click the model picker and click manage models
3. Select the sample provider
4. Check the models based on what you want in the model picker
5. Send a request to the model
## API Usage
This extension uses the proposed `chatProvider` API. The key components include:
- `vscode.lm.registerChatModelProvider()` - Registers the provider
- `LanguageModelChatProvider2` interface - Defines the provider contract
- `LanguageModelChatInformation` - Describes model capabilities
- `ChatResponseFragment2` - Handles streaming responses
## Customization
To create your own chat model provider:
1. Modify the `SampleChatModelProvider` class in `src/provider.ts`
2. Update the model information in `getChatModelInfo()`
3. Implement your custom logic in `provideLanguageModelChatResponse()`
4. Adjust the vendor ID and model IDs as needed
5. Update the `package.json` with your extension details
## Related
- [VS Code Extension API](https://code.visualstudio.com/api)
- [Language Model API Documentation](https://code.visualstudio.com/api/extension-guides/chat)
- [VS Code Extension Samples](https://github.com/Microsoft/vscode-extension-samples)

View File

@ -0,0 +1,49 @@
/**
* ESLint configuration for the project.
*
* See https://eslint.style and https://typescript-eslint.io for additional linting options.
*/
// @ts-check
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import stylistic from '@stylistic/eslint-plugin';
export default tseslint.config(
{
ignores: [
'.vscode-test',
'out',
'**/*.d.ts'
]
},
{
files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
},
js.configs.recommended,
...tseslint.configs.recommended,
...tseslint.configs.stylistic,
{
plugins: {
'@stylistic': stylistic
},
rules: {
'curly': 'warn',
'@stylistic/semi': ['warn', 'always'],
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/naming-convention': [
'warn',
{
'selector': 'import',
'format': ['camelCase', 'PascalCase']
}
],
'@typescript-eslint/no-unused-vars': [
'error',
{
'argsIgnorePattern': '^_'
}
]
}
}
);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,47 @@
{
"name": "chat-model-provider-sample",
"publisher": "vscode-samples",
"displayName": "Copilot Model Provider Sample",
"description": "Sample extension which provides chat models via the LM API.",
"repository": {
"type": "git",
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"version": "0.1.0",
"engines": {
"vscode": "^1.104.0-20250828"
},
"categories": [
"AI",
"Chat"
],
"contributes": {
"languageModelChatProviders": [
{
"vendor": "sample",
"displayName": "Sample Model Vendor"
}
]
},
"main": "./out/extension.js",
"scripts": {
"vscode:prepublish": "npm run compile",
"download-api": "dts dev",
"postdownload-api": "dts main",
"postinstall": "npm run download-api",
"compile": "tsc -p ./",
"lint": "eslint",
"watch": "tsc -watch -p ./"
},
"dependencies": { },
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^22",
"@vscode/dts": "^0.4.1",
"@types/vscode": "^1.103.0",
"eslint": "^9.13.0",
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}

View File

@ -0,0 +1,8 @@
import * as vscode from 'vscode';
import { SampleChatModelProvider } from './provider';
export function activate(_: vscode.ExtensionContext) {
vscode.lm.registerLanguageModelChatProvider('sample', new SampleChatModelProvider());
}
export function deactivate() { }

View File

@ -0,0 +1,39 @@
import { CancellationToken, LanguageModelChatInformation, LanguageModelChatMessage, LanguageModelChatProvider, LanguageModelResponsePart, LanguageModelTextPart, Progress, ProvideLanguageModelChatResponseOptions, ProviderResult } from "vscode";
function getChatModelInfo(id: string, name: string): LanguageModelChatInformation {
return {
id,
name,
tooltip: "A sample chat model for demonstration purposes.",
family: "sample-family",
maxInputTokens: 120000,
maxOutputTokens: 8192,
version: "1.0.0",
capabilities: {
toolCalling: true,
imageInput: true,
}
};
}
export class SampleChatModelProvider implements LanguageModelChatProvider {
provideLanguageModelChatInformation(_options: { silent: boolean; }, _token: CancellationToken): ProviderResult<LanguageModelChatInformation[]> {
return [
getChatModelInfo("sample-dog-model", "Dog Model"),
getChatModelInfo("sample-cat-model", "Cat Model"),
];
}
async provideLanguageModelChatResponse(model: LanguageModelChatInformation, _messages: Array<LanguageModelChatMessage>, _options: ProvideLanguageModelChatResponseOptions, progress: Progress<LanguageModelResponsePart>, _token: CancellationToken): Promise<void> {
if (model.id === "sample-dog-model") {
progress.report(new LanguageModelTextPart("Woof! This is a dog model response."));
} else if (model.id === "sample-cat-model") {
progress.report(new LanguageModelTextPart("Meow! This is a cat model response."));
} else {
progress.report(new LanguageModelTextPart("Unknown model."));
}
}
async provideTokenCount(_model: LanguageModelChatInformation, _text: string | LanguageModelChatMessage, _token: CancellationToken): Promise<number> {
return 42;
}
}

View File

@ -116,6 +116,24 @@ declare module 'vscode' {
*/
readonly languageId: string;
/**
* The file encoding of this document that will be used when the document is saved.
*
* Use the {@link workspace.onDidChangeTextDocument onDidChangeTextDocument}-event to
* get notified when the document encoding changes.
*
* Note that the possible encoding values are currently defined as any of the following:
* 'utf8', 'utf8bom', 'utf16le', 'utf16be', 'windows1252', 'iso88591', 'iso88593',
* 'iso885915', 'macroman', 'cp437', 'windows1256', 'iso88596', 'windows1257',
* 'iso88594', 'iso885914', 'windows1250', 'iso88592', 'cp852', 'windows1251',
* 'cp866', 'cp1125', 'iso88595', 'koi8r', 'koi8u', 'iso885913', 'windows1253',
* 'iso88597', 'windows1255', 'iso88598', 'iso885910', 'iso885916', 'windows1254',
* 'iso88599', 'windows1258', 'gbk', 'gb18030', 'cp950', 'big5hkscs', 'shiftjis',
* 'eucjp', 'euckr', 'windows874', 'iso885911', 'koi8ru', 'koi8t', 'gb2312',
* 'cp865', 'cp850'.
*/
readonly encoding: string;
/**
* The version number of this document (it will strictly increase after each
* change, including undo/redo).
@ -182,14 +200,14 @@ declare module 'vscode' {
* The position will be {@link TextDocument.validatePosition adjusted}.
*
* @param position A position.
* @returns A valid zero-based offset.
* @returns A valid zero-based offset in UTF-16 [code units](https://developer.mozilla.org/en-US/docs/Glossary/Code_unit).
*/
offsetAt(position: Position): number;
/**
* Converts a zero-based offset to a position.
*
* @param offset A zero-based offset.
* @param offset A zero-based offset into the document. This offset is in UTF-16 [code units](https://developer.mozilla.org/en-US/docs/Glossary/Code_unit).
* @returns A valid {@link Position}.
*/
positionAt(offset: number): Position;
@ -257,6 +275,8 @@ declare module 'vscode' {
/**
* The zero-based character value.
*
* Character offsets are expressed using UTF-16 [code units](https://developer.mozilla.org/en-US/docs/Glossary/Code_unit).
*/
readonly character: number;
@ -1875,6 +1895,9 @@ declare module 'vscode' {
/**
* A human-readable string which is rendered prominent. Supports rendering of {@link ThemeIcon theme icons} via
* the `$(<name>)`-syntax.
*
* Note: When {@link QuickPickItem.kind kind} is set to {@link QuickPickItemKind.Default} (so a regular item
* instead of a separator), it supports rendering of {@link ThemeIcon theme icons} via the `$(<name>)`-syntax.
*/
label: string;
@ -3110,12 +3133,12 @@ declare module 'vscode' {
*/
export class EvaluatableExpression {
/*
/**
* The range is used to extract the evaluatable expression from the underlying document and to highlight it.
*/
readonly range: Range;
/*
/**
* If specified the expression overrides the extracted expression.
*/
readonly expression?: string | undefined;
@ -7731,6 +7754,18 @@ declare module 'vscode' {
* https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
*/
readonly isInteractedWith: boolean;
/**
* The detected shell type of the {@link Terminal}. This will be `undefined` when there is
* not a clear signal as to what the shell is, or the shell is not supported yet. This
* value should change to the shell type of a sub-shell when launched (for example, running
* `bash` inside `zsh`).
*
* Note that the possible values are currently defined as any of the following:
* 'bash', 'cmd', 'csh', 'fish', 'gitbash', 'julia', 'ksh', 'node', 'nu', 'pwsh', 'python',
* 'sh', 'wsl', 'zsh'.
*/
readonly shell: string | undefined;
}
/**
@ -11980,6 +12015,8 @@ declare module 'vscode' {
* When the user starts dragging items from this `DragAndDropController`, `handleDrag` will be called.
* Extensions can use `handleDrag` to add their {@link DataTransferItem `DataTransferItem`} items to the drag and drop.
*
* Mime types added in `handleDrag` won't be available outside the application.
*
* When the items are dropped on **another tree item** in **the same tree**, your `DataTransferItem` objects
* will be preserved. Use the recommended mime type for the tree (`application/vnd.code.tree.<treeidlowercase>`) to add
* tree objects in a data transfer. See the documentation for `DataTransferItem` for how best to take advantage of this.
@ -12427,6 +12464,20 @@ declare module 'vscode' {
* This will only take effect when `terminal.integrated.enablePersistentSessions` is enabled.
*/
isTransient?: boolean;
/**
* The nonce to use to verify shell integration sequences are coming from a trusted source.
* An example impact of UX of this is if the command line is reported with a nonce, it will
* not need to verify with the user that the command line is correct before rerunning it
* via the [shell integration command decoration](https://code.visualstudio.com/docs/terminal/shell-integration#_command-decorations-and-the-overview-ruler).
*
* This should be used if the terminal includes [custom shell integration support](https://code.visualstudio.com/docs/terminal/shell-integration#_supported-escape-sequences).
* It should be set to a random GUID which will then set the `VSCODE_NONCE` environment
* variable. Inside the shell, this should then be removed from the environment so as to
* protect it from general access. Once that is done it can be passed through in the
* relevant sequences to make them trusted.
*/
shellIntegrationNonce?: string;
}
/**
@ -12466,6 +12517,18 @@ declare module 'vscode' {
* This will only take effect when `terminal.integrated.enablePersistentSessions` is enabled.
*/
isTransient?: boolean;
/**
* The nonce to use to verify shell integration sequences are coming from a trusted source.
* An example impact of UX of this is if the command line is reported with a nonce, it will
* not need to verify with the user that the command line is correct before rerunning it
* via the [shell integration command decoration](https://code.visualstudio.com/docs/terminal/shell-integration#_command-decorations-and-the-overview-ruler).
*
* This should be used if the terminal includes [custom shell integration support](https://code.visualstudio.com/docs/terminal/shell-integration#_supported-escape-sequences).
* It should be set to a random GUID. Inside the {@link Pseudoterminal} implementation, this value
* can be passed through in the relevant sequences to make them trusted.
*/
shellIntegrationNonce?: string;
}
/**
@ -13820,6 +13883,9 @@ declare module 'vscode' {
* In the same way, symbolic links are preserved, i.e. the file event will report the path of the
* symbolic link as it was provided for watching and not the target.
*
* *Note* that file events from deleting a folder may not include events for contained files. If possible
* events will be aggregated to reduce the overal number of emitted events.
*
* ### Examples
*
* The basic anatomy of a file watcher is as follows:
@ -13973,7 +14039,29 @@ declare module 'vscode' {
* @param uri Identifies the resource to open.
* @returns A promise that resolves to a {@link TextDocument document}.
*/
export function openTextDocument(uri: Uri): Thenable<TextDocument>;
export function openTextDocument(uri: Uri, options?: {
/**
* The {@link TextDocument.encoding encoding} of the document to use
* for decoding the underlying buffer to text. If omitted, the encoding
* will be guessed based on the file content and/or the editor settings
* unless the document is already opened.
*
* Opening a text document that was already opened with a different encoding
* has the potential of changing the text contents of the text document.
* Specifically, when the encoding results in a different set of characters
* than the previous encoding. As such, an error is thrown for dirty documents
* when the specified encoding is different from the encoding of the document.
*
* See {@link TextDocument.encoding} for more information about valid
* values for encoding. Using an unsupported encoding will fallback to the
* default encoding for the document.
*
* *Note* that if you open a document with an encoding that does not
* support decoding the underlying bytes, content may be replaced with
* substitution characters as appropriate.
*/
readonly encoding?: string;
}): Thenable<TextDocument>;
/**
* A short-hand for `openTextDocument(Uri.file(path))`.
@ -13982,7 +14070,29 @@ declare module 'vscode' {
* @param path A path of a file on disk.
* @returns A promise that resolves to a {@link TextDocument document}.
*/
export function openTextDocument(path: string): Thenable<TextDocument>;
export function openTextDocument(path: string, options?: {
/**
* The {@link TextDocument.encoding encoding} of the document to use
* for decoding the underlying buffer to text. If omitted, the encoding
* will be guessed based on the file content and/or the editor settings
* unless the document is already opened.
*
* Opening a text document that was already opened with a different encoding
* has the potential of changing the text contents of the text document.
* Specifically, when the encoding results in a different set of characters
* than the previous encoding. As such, an error is thrown for dirty documents
* when the specified encoding is different from the encoding of the document.
*
* See {@link TextDocument.encoding} for more information about valid
* values for encoding. Using an unsupported encoding will fallback to the
* default encoding for the document.
*
* *Note* that if you open a document with an encoding that does not
* support decoding the underlying bytes, content may be replaced with
* substitution characters as appropriate.
*/
readonly encoding?: string;
}): Thenable<TextDocument>;
/**
* Opens an untitled text document. The editor will prompt the user for a file
@ -14001,6 +14111,14 @@ declare module 'vscode' {
* The initial contents of the document.
*/
content?: string;
/**
* The {@link TextDocument.encoding encoding} of the document.
*
* See {@link TextDocument.encoding} for more information about valid
* values for encoding. Using an unsupported encoding will fallback to the
* default encoding for the document.
*/
readonly encoding?: string;
}): Thenable<TextDocument>;
/**
@ -14284,6 +14402,129 @@ declare module 'vscode' {
* Event that fires when the current workspace has been trusted.
*/
export const onDidGrantWorkspaceTrust: Event<void>;
/**
* Decodes the content from a `Uint8Array` to a `string`. You MUST
* provide the entire content at once to ensure that the encoding
* can properly apply. Do not use this method to decode content
* in chunks, as that may lead to incorrect results.
*
* Will pick an encoding based on settings and the content of the
* buffer (for example byte order marks).
*
* *Note* that if you decode content that is unsupported by the
* encoding, the result may contain substitution characters as
* appropriate.
*
* @throws This method will throw an error when the content is binary.
*
* @param content The text content to decode as a `Uint8Array`.
* @returns A thenable that resolves to the decoded `string`.
*/
export function decode(content: Uint8Array): Thenable<string>;
/**
* Decodes the content from a `Uint8Array` to a `string` using the
* provided encoding. You MUST provide the entire content at once
* to ensure that the encoding can properly apply. Do not use this
* method to decode content in chunks, as that may lead to incorrect
* results.
*
* *Note* that if you decode content that is unsupported by the
* encoding, the result may contain substitution characters as
* appropriate.
*
* @throws This method will throw an error when the content is binary.
*
* @param content The text content to decode as a `Uint8Array`.
* @param options Additional context for picking the encoding.
* @returns A thenable that resolves to the decoded `string`.
*/
export function decode(content: Uint8Array, options: {
/**
* Allows to explicitly pick the encoding to use.
* See {@link TextDocument.encoding} for more information
* about valid values for encoding.
* Using an unsupported encoding will fallback to the
* default configured encoding.
*/
readonly encoding: string;
}): Thenable<string>;
/**
* Decodes the content from a `Uint8Array` to a `string`. You MUST
* provide the entire content at once to ensure that the encoding
* can properly apply. Do not use this method to decode content
* in chunks, as that may lead to incorrect results.
*
* The encoding is picked based on settings and the content
* of the buffer (for example byte order marks).
*
* *Note* that if you decode content that is unsupported by the
* encoding, the result may contain substitution characters as
* appropriate.
*
* @throws This method will throw an error when the content is binary.
*
* @param content The content to decode as a `Uint8Array`.
* @param options Additional context for picking the encoding.
* @returns A thenable that resolves to the decoded `string`.
*/
export function decode(content: Uint8Array, options: {
/**
* The URI that represents the file if known. This information
* is used to figure out the encoding related configuration
* for the file if any.
*/
readonly uri: Uri;
}): Thenable<string>;
/**
* Encodes the content of a `string` to a `Uint8Array`.
*
* Will pick an encoding based on settings.
*
* @param content The content to decode as a `string`.
* @returns A thenable that resolves to the encoded `Uint8Array`.
*/
export function encode(content: string): Thenable<Uint8Array>;
/**
* Encodes the content of a `string` to a `Uint8Array` using the
* provided encoding.
*
* @param content The content to decode as a `string`.
* @param options Additional context for picking the encoding.
* @returns A thenable that resolves to the encoded `Uint8Array`.
*/
export function encode(content: string, options: {
/**
* Allows to explicitly pick the encoding to use.
* See {@link TextDocument.encoding} for more information
* about valid values for encoding.
* Using an unsupported encoding will fallback to the
* default configured encoding.
*/
readonly encoding: string;
}): Thenable<Uint8Array>;
/**
* Encodes the content of a `string` to a `Uint8Array`.
*
* The encoding is picked based on settings.
*
* @param content The content to decode as a `string`.
* @param options Additional context for picking the encoding.
* @returns A thenable that resolves to the encoded `Uint8Array`.
*/
export function encode(content: string, options: {
/**
* The URI that represents the file if known. This information
* is used to figure out the encoding related configuration
* for the file if any.
*/
readonly uri: Uri;
}): Thenable<Uint8Array>;
}
/**
@ -16278,7 +16519,7 @@ declare module 'vscode' {
}
/**
* Namespace for source control mangement.
* Namespace for source control management.
*/
export namespace scm {
@ -16592,7 +16833,7 @@ declare module 'vscode' {
export type DebugAdapterDescriptor = DebugAdapterExecutable | DebugAdapterServer | DebugAdapterNamedPipeServer | DebugAdapterInlineImplementation;
/**
* A debug adaper factory that creates {@link DebugAdapterDescriptor debug adapter descriptors}.
* A debug adapter factory that creates {@link DebugAdapterDescriptor debug adapter descriptors}.
*/
export interface DebugAdapterDescriptorFactory {
/**
@ -16646,7 +16887,7 @@ declare module 'vscode' {
}
/**
* A debug adaper factory that creates {@link DebugAdapterTracker debug adapter trackers}.
* A debug adapter factory that creates {@link DebugAdapterTracker debug adapter trackers}.
*/
export interface DebugAdapterTrackerFactory {
/**
@ -17183,7 +17424,7 @@ declare module 'vscode' {
* Whether the thread supports reply.
* Defaults to true.
*/
canReply: boolean;
canReply: boolean | CommentAuthorInformation;
/**
* Context value of the comment thread. This can be used to contribute thread specific actions.
@ -18623,7 +18864,7 @@ declare module 'vscode' {
* Creates a {@link FileCoverage} instance with counts filled in from
* the coverage details.
* @param uri Covered file URI
* @param detailed Detailed coverage information
* @param details Detailed coverage information
*/
static fromDetails(uri: Uri, details: readonly FileCoverageDetail[]): FileCoverage;
@ -19045,7 +19286,7 @@ declare module 'vscode' {
readonly value: T;
/**
* Creates a new telementry trusted value.
* Creates a new telemetry trusted value.
*
* @param value A value to trust
*/
@ -19053,7 +19294,7 @@ declare module 'vscode' {
}
/**
* A telemetry logger which can be used by extensions to log usage and error telementry.
* A telemetry logger which can be used by extensions to log usage and error telemetry.
*
* A logger wraps around an {@link TelemetrySender sender} but it guarantees that
* - user settings to disable or tweak telemetry are respected, and that
@ -19754,7 +19995,7 @@ declare module 'vscode' {
* A string or heterogeneous array of things that a message can contain as content. Some parts may be message-type
* specific for some models.
*/
content: Array<LanguageModelTextPart | LanguageModelToolResultPart | LanguageModelToolCallPart>;
content: Array<LanguageModelInputPart>;
/**
* The optional name of a user for this message.
@ -19768,7 +20009,7 @@ declare module 'vscode' {
* @param content The content of the message.
* @param name The optional name of a user for the message.
*/
constructor(role: LanguageModelChatMessageRole, content: string | Array<LanguageModelTextPart | LanguageModelToolResultPart | LanguageModelToolCallPart>, name?: string);
constructor(role: LanguageModelChatMessageRole, content: string | Array<LanguageModelInputPart>, name?: string);
}
/**
@ -19978,7 +20219,7 @@ declare module 'vscode' {
/**
* A set of options that control the behavior of the language model. These options are specific to the language model
* and need to be lookup in the respective documentation.
* and need to be looked up in the respective documentation.
*/
modelOptions?: { [name: string]: any };
@ -20001,6 +20242,317 @@ declare module 'vscode' {
toolMode?: LanguageModelChatToolMode;
}
/**
* McpStdioServerDefinition represents an MCP server available by running
* a local process and operating on its stdin and stdout streams. The process
* will be spawned as a child process of the extension host and by default
* will not run in a shell environment.
*/
export class McpStdioServerDefinition {
/**
* The human-readable name of the server.
*/
readonly label: string;
/**
* The working directory used to start the server.
*/
cwd?: Uri;
/**
* The command used to start the server. Node.js-based servers may use
* `process.execPath` to use the editor's version of Node.js to run the script.
*/
command: string;
/**
* Additional command-line arguments passed to the server.
*/
args: string[];
/**
* Optional additional environment information for the server. Variables
* in this environment will overwrite or remove (if null) the default
* environment variables of the editor's extension host.
*/
env: Record<string, string | number | null>;
/**
* Optional version identification for the server. If this changes, the
* editor will indicate that tools have changed and prompt to refresh them.
*/
version?: string;
/**
* @param label The human-readable name of the server.
* @param command The command used to start the server.
* @param args Additional command-line arguments passed to the server.
* @param env Optional additional environment information for the server.
* @param version Optional version identification for the server.
*/
constructor(label: string, command: string, args?: string[], env?: Record<string, string | number | null>, version?: string);
}
/**
* McpHttpServerDefinition represents an MCP server available using the
* Streamable HTTP transport.
*/
export class McpHttpServerDefinition {
/**
* The human-readable name of the server.
*/
readonly label: string;
/**
* The URI of the server. The editor will make a POST request to this URI
* to begin each session.
*/
uri: Uri;
/**
* Optional additional heads included with each request to the server.
*/
headers: Record<string, string>;
/**
* Optional version identification for the server. If this changes, the
* editor will indicate that tools have changed and prompt to refresh them.
*/
version?: string;
/**
* @param label The human-readable name of the server.
* @param uri The URI of the server.
* @param headers Optional additional heads included with each request to the server.
*/
constructor(label: string, uri: Uri, headers?: Record<string, string>, version?: string);
}
/**
* Definitions that describe different types of Model Context Protocol servers,
* which can be returned from the {@link McpServerDefinitionProvider}.
*/
export type McpServerDefinition = McpStdioServerDefinition | McpHttpServerDefinition;
/**
* A type that can provide Model Context Protocol server definitions. This
* should be registered using {@link lm.registerMcpServerDefinitionProvider}
* during extension activation.
*/
export interface McpServerDefinitionProvider<T extends McpServerDefinition = McpServerDefinition> {
/**
* Optional event fired to signal that the set of available servers has changed.
*/
readonly onDidChangeMcpServerDefinitions?: Event<void>;
/**
* Provides available MCP servers. The editor will call this method eagerly
* to ensure the availability of servers for the language model, and so
* extensions should not take actions which would require user
* interaction, such as authentication.
*
* @param token A cancellation token.
* @returns An array of MCP available MCP servers
*/
provideMcpServerDefinitions(token: CancellationToken): ProviderResult<T[]>;
/**
* This function will be called when the editor needs to start a MCP server.
* At this point, the extension may take any actions which may require user
* interaction, such as authentication. Any non-`readonly` property of the
* server may be modified, and the extension should return the resolved server.
*
* The extension may return undefined to indicate that the server
* should not be started, or throw an error. If there is a pending tool
* call, the editor will cancel it and return an error message to the
* language model.
*
* @param server The MCP server to resolve
* @param token A cancellation token.
* @returns The resolved server or thenable that resolves to such. This may
* be the given `server` definition with non-readonly properties filled in.
*/
resolveMcpServerDefinition?(server: T, token: CancellationToken): ProviderResult<T>;
}
/**
* The provider version of {@linkcode LanguageModelChatRequestOptions}
*/
export interface ProvideLanguageModelChatResponseOptions {
/**
* A set of options that control the behavior of the language model. These options are specific to the language model.
*/
readonly modelOptions?: { readonly [name: string]: any };
/**
* An optional list of tools that are available to the language model. These could be registered tools available via
* {@link lm.tools}, or private tools that are just implemented within the calling extension.
*
* If the LLM requests to call one of these tools, it will return a {@link LanguageModelToolCallPart} in
* {@link LanguageModelChatResponse.stream}. It's the caller's responsibility to invoke the tool. If it's a tool
* registered in {@link lm.tools}, that means calling {@link lm.invokeTool}.
*
* Then, the tool result can be provided to the LLM by creating an Assistant-type {@link LanguageModelChatMessage} with a
* {@link LanguageModelToolCallPart}, followed by a User-type message with a {@link LanguageModelToolResultPart}.
*/
readonly tools?: readonly LanguageModelChatTool[];
/**
* The tool-selecting mode to use. The provider must implement respecting this.
*/
readonly toolMode: LanguageModelChatToolMode;
}
/**
* Represents a language model provided by a {@linkcode LanguageModelChatProvider}.
*/
export interface LanguageModelChatInformation {
/**
* Unique identifier for the language model. Must be unique per provider, but not required to be globally unique.
*/
readonly id: string;
/**
* Human-readable name of the language model.
*/
readonly name: string;
/**
* Opaque family-name of the language model. Values might be `gpt-3.5-turbo`, `gpt4`, `phi2`, or `llama`
*/
readonly family: string;
/**
* The tooltip to render when hovering the model. Used to provide more information about the model.
*/
readonly tooltip?: string;
/**
* An optional, human-readable string which will be rendered alongside the model.
* Useful for distinguishing models of the same name in the UI.
*/
readonly detail?: string;
/**
* Opaque version string of the model.
* This is used as a lookup value in {@linkcode LanguageModelChatSelector.version}
* An example is how GPT 4o has multiple versions like 2024-11-20 and 2024-08-06
*/
readonly version: string;
/**
* The maximum number of tokens the model can accept as input.
*/
readonly maxInputTokens: number;
/**
* The maximum number of tokens the model is capable of producing.
*/
readonly maxOutputTokens: number;
/**
* Various features that the model supports such as tool calling or image input.
*/
readonly capabilities: {
/**
* Whether image input is supported by the model.
* Common supported images are jpg and png, but each model will vary in supported mimetypes.
*/
readonly imageInput?: boolean;
/**
* Whether tool calling is supported by the model.
* If a number is provided, that is the maximum number of tools that can be provided in a request to the model.
*/
readonly toolCalling?: boolean | number;
};
}
/**
* The provider version of {@linkcode LanguageModelChatMessage}.
*/
export interface LanguageModelChatRequestMessage {
/**
* The role of this message.
*/
readonly role: LanguageModelChatMessageRole;
/**
* A heterogeneous array of things that a message can contain as content. Some parts may be message-type
* specific for some models.
*/
readonly content: ReadonlyArray<LanguageModelInputPart | unknown>;
/**
* The optional name of a user for this message.
*/
readonly name: string | undefined;
}
/**
* The various message types which a {@linkcode LanguageModelChatProvider} can emit in the chat response stream
*/
export type LanguageModelResponsePart = LanguageModelTextPart | LanguageModelToolResultPart | LanguageModelToolCallPart;
/**
* The various message types which can be sent via {@linkcode LanguageModelChat.sendRequest } and processed by a {@linkcode LanguageModelChatProvider}
*/
export type LanguageModelInputPart = LanguageModelTextPart | LanguageModelToolResultPart | LanguageModelToolCallPart;
/**
* A LanguageModelChatProvider implements access to language models, which users can then use through the chat view, or through extension API by acquiring a LanguageModelChat.
* An example of this would be an OpenAI provider that provides models like gpt-5, o3, etc.
*/
export interface LanguageModelChatProvider<T extends LanguageModelChatInformation = LanguageModelChatInformation> {
/**
* An optional event fired when the available set of language models changes.
*/
readonly onDidChangeLanguageModelChatInformation?: Event<void>;
/**
* Get the list of available language models provided by this provider
* @param options Options which specify the calling context of this function
* @param token A cancellation token
* @returns The list of available language models
*/
provideLanguageModelChatInformation(options: PrepareLanguageModelChatModelOptions, token: CancellationToken): ProviderResult<T[]>;
/**
* Returns the response for a chat request, passing the results to the progress callback.
* The {@linkcode LanguageModelChatProvider} must emit the response parts to the progress callback as they are received from the language model.
* @param model The language model to use
* @param messages The messages to include in the request
* @param options Options for the request
* @param progress The progress to emit the streamed response chunks to
* @param token A cancellation token
* @returns A promise that resolves when the response is complete. Results are actually passed to the progress callback.
*/
provideLanguageModelChatResponse(model: T, messages: readonly LanguageModelChatRequestMessage[], options: ProvideLanguageModelChatResponseOptions, progress: Progress<LanguageModelResponsePart>, token: CancellationToken): Thenable<void>;
/**
* Returns the number of tokens for a given text using the model-specific tokenizer logic
* @param model The language model to use
* @param text The text to count tokens for
* @param token A cancellation token
* @returns The number of tokens
*/
provideTokenCount(model: T, text: string | LanguageModelChatRequestMessage, token: CancellationToken): Thenable<number>;
}
/**
* The list of options passed into {@linkcode LanguageModelChatProvider.provideLanguageModelChatInformation}
*/
export interface PrepareLanguageModelChatModelOptions {
/**
* Whether or not the user should be prompted via some UI flow, or if models should be attempted to be resolved silently.
* If silent is true, all models may not be resolved due to lack of info such as API keys.
*/
readonly silent: boolean;
}
/**
* Namespace for language model related functionality.
*/
@ -20060,7 +20612,7 @@ declare module 'vscode' {
* any custom flow.
*
* In the former case, the caller shall pass the
* {@link LanguageModelToolInvocationOptions.toolInvocationToken toolInvocationToken}, which comes with the a
* {@link LanguageModelToolInvocationOptions.toolInvocationToken toolInvocationToken}, which comes from a
* {@link ChatRequest.toolInvocationToken chat request}. This makes sure the chat UI shows the tool invocation for the
* correct conversation.
*
@ -20079,6 +20631,43 @@ declare module 'vscode' {
* @returns The result of the tool invocation.
*/
export function invokeTool(name: string, options: LanguageModelToolInvocationOptions<object>, token?: CancellationToken): Thenable<LanguageModelToolResult>;
/**
* Registers a provider that publishes Model Context Protocol servers for the editor to
* consume. This allows MCP servers to be dynamically provided to the editor in
* addition to those the user creates in their configuration files.
*
* Before calling this method, extensions must register the `contributes.mcpServerDefinitionProviders`
* extension point with the corresponding {@link id}, for example:
*
* ```js
* "contributes": {
* "mcpServerDefinitionProviders": [
* {
* "id": "cool-cloud-registry.mcp-servers",
* "label": "Cool Cloud Registry",
* }
* ]
* }
* ```
*
* When a new McpServerDefinitionProvider is available, the editor will present a 'refresh'
* action to the user to discover new servers. To enable this flow, extensions should
* call `registerMcpServerDefinitionProvider` during activation.
* @param id The ID of the provider, which is unique to the extension.
* @param provider The provider to register
* @returns A disposable that unregisters the provider when disposed.
*/
export function registerMcpServerDefinitionProvider(id: string, provider: McpServerDefinitionProvider): Disposable;
/**
* Registers a {@linkcode LanguageModelChatProvider}
* Note: You must also define the language model chat provider via the `languageModelChatProviders` contribution point in package.json
* @param vendor The vendor for this provider. Must be globally unique. An example is `copilot` or `openai`.
* @param provider The provider to register
* @returns A disposable that unregisters the provider when disposed
*/
export function registerLanguageModelChatProvider(vendor: string, provider: LanguageModelChatProvider): Disposable;
}
/**
@ -20222,7 +20811,7 @@ declare module 'vscode' {
/**
* Construct a prompt-tsx part with the given content.
* @param value The value of the part, the result of `renderPromptElementJSON` from `@vscode/prompt-tsx`.
* @param value The value of the part, the result of `renderElementJSON` from `@vscode/prompt-tsx`.
*/
constructor(value: unknown);
}
@ -20232,7 +20821,7 @@ declare module 'vscode' {
*/
export class LanguageModelToolResult {
/**
* A list of tool result content parts. Includes `unknown` becauses this list may be extended with new content types in
* A list of tool result content parts. Includes `unknown` because this list may be extended with new content types in
* the future.
* @see {@link lm.invokeTool}.
*/

View File

@ -0,0 +1,18 @@
{
"compilerOptions": {
"module": "Node16",
"target": "ES2024",
"lib": [
"ES2024"
],
"sourceMap": true,
"rootDir": "src",
"strict": true, /* enable all strict type-checking options */
"outDir": "out",
"skipLibCheck": true /* Skip type checking of declaration files */
/* Additional Checks */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
}
}

View File

@ -0,0 +1,5 @@
out
node_modules
.vscode-test/
*.vsix
vscode*.d.ts

View File

@ -0,0 +1,21 @@
// A launch configuration that compiles the extension and then opens it inside a new window
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
{
"version": "0.2.0",
"configurations": [{
"name": "Run Extension",
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"outFiles": [
"${workspaceFolder}/out/**/*.js"
],
"preLaunchTask": "npm: watch"
}
]
}

View File

@ -0,0 +1,20 @@
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"script": "watch",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"presentation": {
"reveal": "never"
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

View File

@ -0,0 +1,12 @@
# Chat Output Renderer sample
This VS Code extension sample demonstrates usage of the proposed chat output renderer API. This API allows extensions to
contribute custom rendered widgets into VS Code's chat interface. Language models can invoke tools to create these widgets. The widgets are rendered using VS Code's webview API.
## Running the Sample
- Make sure you are using VS Code 1.103 or newer.
- Run `npm install` in terminal to install dependencies
- Run the `Run Extension` target in the Debug View. This will:
- Start a task `npm: watch` to compile the code
- Run the extension in a new VS Code window

View File

@ -13,6 +13,7 @@ export default tseslint.config(
ignores: [
'.vscode-test',
'out',
'**/vscode*.d.ts'
]
},
js.configs.recommended,

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
{
"name": "chat-output-renderer-sample",
"displayName": "chat-output-renderer-sample",
"description": "Sample chat output renderer extension that renders Mermaid diagrams.",
"version": "0.0.1",
"publisher": "vscode-samples",
"repository": "https://github.com/Microsoft/vscode-extension-samples/helloworld-sample",
"engines": {
"vscode": "^1.103.0"
},
"categories": [
"Other"
],
"enabledApiProposals": [
"chatOutputRenderer"
],
"activationEvents": [],
"main": "./out/extension.js",
"contributes": {
"languageModelTools": [
{
"name": "renderMermaidDiagram",
"displayName": "Mermaid Renderer",
"toolReferenceName": "renderMermaidDiagram",
"canBeReferencedInPrompt": true,
"modelDescription": "Renders a Mermaid diagram from Mermaid.js markup.",
"userDescription": "Render a Mermaid.js diagrams from markup.",
"inputSchema": {
"type": "object",
"properties": {
"markup": {
"type": "string",
"description": "The mermaid diagram markup to render as a Mermaid diagram. This should only be the markup of the diagram. Do not include a wrapping code block."
}
}
}
},
{
"name": "createMermaidDiagram",
"displayName": "Mermaid Creator",
"toolReferenceName": "createMermaidDiagram",
"canBeReferencedInPrompt": true,
"modelDescription": "Creates a Mermaid diagram from a description and renders for the user.",
"userDescription": "Creates and renders Mermaid.js diagrams.",
"inputSchema": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "A plain text description of the Mermaid diagram to create. The description should be detailed enough for the model to generate a valid Mermaid diagram markup."
}
}
}
}
],
"chatOutputRenderers": [
{
"viewType": "vscode-samples.mermaid",
"mimeTypes": [
"application/vnd.chat-output-renderer.mermaid"
]
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"lint": "eslint",
"watch": "tsc -watch -p ./",
"download-api": "dts dev",
"postdownload-api": "dts main",
"postinstall": "npm run download-api"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/jsdom": "^21.1.7",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"@vscode/dts": "^0.4.0",
"eslint": "^9.13.0",
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
},
"dependencies": {
"dompurify": "^3.2.6",
"jsdom": "^26.1.0",
"mermaid": "^11.9.0"
}
}

View File

@ -0,0 +1,300 @@
import * as DOMPurify from 'dompurify';
import { JSDOM } from 'jsdom';
import * as vscode from 'vscode';
/**
* View type that uniquely identifies the Mermaid chat output renderer.
*/
const viewType = 'vscode-samples.mermaid';
/**
* Mime type used to identify Mermaid diagram data in chat output.
*/
const mime = 'application/vnd.chat-output-renderer.mermaid';
const maxFixAttempts = 3;
export function activate(context: vscode.ExtensionContext) {
// Register our tools
// The first tool takes mermaid markup as input
context.subscriptions.push(
vscode.lm.registerTool<{ markup: string }>('renderMermaidDiagram', {
invoke: async (options, token) => {
let sourceCode = options.input.markup;
sourceCode = await runMermaidMarkupFixLoop(sourceCode, token);
return writeMermaidToolOutput(sourceCode);
},
})
);
// The second tool generates mermaid markup based on a description
context.subscriptions.push(
vscode.lm.registerTool<{ description: string }>('createMermaidDiagram', {
invoke: async (options, token) => {
const description = options.input.description;
let sourceCode = await generateMermaidDiagram(description, token);
if (!sourceCode) {
throw new Error('Failed to generate Mermaid diagram from description');
}
sourceCode = await runMermaidMarkupFixLoop(sourceCode, token);
return writeMermaidToolOutput(sourceCode);
},
})
);
// Register the chat output renderer for Mermaid diagrams.
// This will be invoked with the data generated by the tools.
// It can also be invoked when rendering old Mermaid diagrams in the chat history.
context.subscriptions.push(
vscode.chat.registerChatOutputRenderer(viewType, {
async renderChatOutput({ value }, webview, _ctx, _token) {
const mermaidSource = new TextDecoder().decode(value);
// Set the options for the webview
const mermaidDist = vscode.Uri.joinPath(context.extensionUri, 'node_modules', 'mermaid', 'dist');
webview.options = {
enableScripts: true,
localResourceRoots: [mermaidDist],
};
// Set the HTML content for the webview
const nonce = getNonce();
const mermaidEsmUri = vscode.Uri.joinPath(mermaidDist, 'mermaid.esm.mjs');
webview.html = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mermaid Diagram</title>
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src ${webview.cspSource} 'nonce-${nonce}'; style-src 'self' 'unsafe-inline';" />
</head>
<body>
<pre class="mermaid">
${escapeHtmlText(mermaidSource)}
</pre>
<script type="module" nonce="${nonce}">
import mermaid from '${escapeForScriptBlock(webview.asWebviewUri(mermaidEsmUri).toString())}';
mermaid.initialize({ startOnLoad: true });
</script>
</body>
</html>`;
},
}));
}
/**
* Lazily load mermaid
*/
const getMermaidInstance = (() => {
const createMermaidInstance = async () => {
// Patch the global window object for mermaid
const { window } = new JSDOM("");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(global as any).window = window;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(global as any).DOMPurify = DOMPurify(window);
return import('mermaid');
};
let cached: Promise<typeof import('mermaid')> | undefined;
return async (): Promise<typeof import('mermaid').default> => {
cached ??= createMermaidInstance();
return (await cached).default;
};
})();
/**
* Tries to fix mermaid syntax errors in a set number of attempts.
*
* @returns The best effort to fix the Mermaid markup.
*/
async function runMermaidMarkupFixLoop(sourceCode: string, token: vscode.CancellationToken): Promise<string> {
let attempt = 0;
while (attempt < maxFixAttempts) {
const result = await validateMermaidMarkup(sourceCode);
if (token.isCancellationRequested) {
throw new Error('Operation cancelled');
}
if (result.type === 'success') {
return sourceCode;
}
attempt++;
sourceCode = await tryFixingUpMermaidMarkup(sourceCode, result.message, token);
if (token.isCancellationRequested) {
throw new Error('Operation cancelled');
}
}
// Return whatever we have after max attempts
return sourceCode;
}
/**
* Validates the syntax of the provided Mermaid markup.
*/
async function validateMermaidMarkup(sourceCode: string): Promise<{ type: 'success' } | { type: 'error', message: string }> {
try {
const mermaid = await getMermaidInstance();
await mermaid.parse(sourceCode);
return { type: 'success' };
} catch (error) {
if (!(error instanceof Error)) {
throw error;
}
return { type: 'error', message: error.message };
}
}
/**
* Uses a language model to try to fix Mermaid markup based on an error message.
*/
async function tryFixingUpMermaidMarkup(sourceCode: string, errorMessage: string, token: vscode.CancellationToken): Promise<string> {
const model = await getPreferredLm();
if (!model) {
console.warn('No suitable model found for fixing Mermaid markup');
return sourceCode;
}
if (token.isCancellationRequested) {
throw new Error('Operation cancelled');
}
const completion = await model.sendRequest([
vscode.LanguageModelChatMessage.Assistant(joinLines(
`The user will provide you with the source code for the Mermaid diagram and an error message.`,
`Your task is to fix the Mermaid source code based on the error message.`,
`Please return the fixed Mermaid source code inside a \`mermaid\` fenced code block. Do not add any comments or explanation.`,
`Make sure to return the entire source code.`
)),
vscode.LanguageModelChatMessage.User(joinLines(
`Here is my Mermaid source code:`,
``,
`\`\`\`mermaid`,
`${sourceCode}`,
`\`\`\``,
``,
`And here is the mermaid error message:`,
``,
errorMessage,
)),
], {}, token);
return await parseMermaidMarkupFromChatResponse(completion, token) ?? sourceCode;
}
async function parseMermaidMarkupFromChatResponse(chatResponse: vscode.LanguageModelChatResponse, token: vscode.CancellationToken): Promise<string | undefined> {
const parts: string[] = [];
for await (const line of chatResponse.text) {
if (token.isCancellationRequested) {
throw new Error('Operation cancelled');
}
parts.push(line);
}
const response = parts.join('');
const lines = response.split('\n');
if (!lines.at(0)?.startsWith('```') || !lines.at(-1)?.endsWith('```')) {
console.warn('Invalid response format from model, expected fenced code block');
return undefined;
}
return lines.slice(1, -1).join('\n').trim();
}
/**
* Uses a language model to generate Mermaid markup based on a description of the diagram.
*/
async function generateMermaidDiagram(description: string, token: vscode.CancellationToken): Promise<string | undefined> {
const model = await getPreferredLm();
if (!model) {
throw new Error('No suitable model found for generating Mermaid diagram');
}
const completion = await model.sendRequest([
vscode.LanguageModelChatMessage.Assistant(joinLines(
`The user will provide you with a description for a Mermaid diagram.`,
`Your task is to generate the Mermaid source code based on the description.`,
`Please return the Mermaid source code inside a \`mermaid\` fenced code block. Do not add any comments or explanation.`,
`Make sure to return the entire source code.`,
)),
vscode.LanguageModelChatMessage.User(joinLines(
`Please create a Mermaid diagram based on this description:`,
`${description}`,
)),
], {}, token);
return parseMermaidMarkupFromChatResponse(completion, token);
}
async function getPreferredLm(): Promise<vscode.LanguageModelChat | undefined> {
return (await vscode.lm.selectChatModels({ family: 'gpt-4o-mini' })).at(0)
?? (await vscode.lm.selectChatModels({ family: 'gpt-4o' })).at(0)
?? (await vscode.lm.selectChatModels({})).at(0);
}
function writeMermaidToolOutput(sourceCode: string): vscode.LanguageModelToolResult {
// Expose the source code as a tool result for the LM
const result = new vscode.LanguageModelToolResult([
new vscode.LanguageModelTextPart(sourceCode)
]);
// And store custom data in the tool result details to indicate that a custom renderer should be used for it.
// In this case we just store the source code as binary data.
// Add cast to use proposed API
(result as vscode.ExtendedLanguageModelToolResult2).toolResultDetails2 = {
mime,
value: new TextEncoder().encode(sourceCode),
};
return result;
}
function joinLines(...lines: string[]): string {
return lines.join('\n');
}
function escapeHtmlText(str: string): string {
return str
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;');
}
function escapeForScriptBlock(str: string): string {
return str
.replace(/\\/g, '\\\\')
.replace(/'/g, "\\'")
.replace(/"/g, '\\"')
.replace(/\r/g, '\\r')
.replace(/\n/g, '\\n')
.replace(/<\/script>/gi, '<\\/script>');
}
function getNonce() {
let text = '';
const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for (let i = 0; i < 64; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
}

View File

@ -0,0 +1,18 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src",
"skipLibCheck": true
},
"exclude": [
"node_modules",
".vscode-test"
]
}

View File

@ -15,15 +15,14 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/screenshot-desktop": "^1.12.3",
"@types/vscode": "^1.95.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
},
"engines": {
"vscode": "^1.95.0"
"vscode": "^1.100.0"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@ -36,16 +35,20 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
"integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
"integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^3.3.0"
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
},
"peerDependencies": {
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
@ -61,13 +64,13 @@
}
},
"node_modules/@eslint/config-array": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
"integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
"version": "0.21.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
"integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.4",
"@eslint/object-schema": "^2.1.6",
"debug": "^4.3.1",
"minimatch": "^3.1.2"
},
@ -75,20 +78,33 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
"integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
"node_modules/@eslint/config-helpers": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
"integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core": {
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
"integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/eslintrc": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
"integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -110,19 +126,22 @@
}
},
"node_modules/@eslint/js": {
"version": "9.15.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz",
"integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==",
"version": "9.31.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz",
"integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://eslint.org/donate"
}
},
"node_modules/@eslint/object-schema": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
"integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
"integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@ -130,12 +149,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz",
"integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==",
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
"integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.15.1",
"levn": "^0.4.1"
},
"engines": {
@ -287,12 +307,13 @@
"dev": true
},
"node_modules/@types/node": {
"version": "20.9.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
"integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
"version": "22.17.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.0.tgz",
"integrity": "sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
"undici-types": "~6.21.0"
}
},
"node_modules/@types/screenshot-desktop": {
@ -305,28 +326,28 @@
}
},
"node_modules/@types/vscode": {
"version": "1.95.0",
"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.95.0.tgz",
"integrity": "sha512-0LBD8TEiNbet3NvWsmn59zLzOFu/txSlGxnv5yAFHCrhG9WvAnR3IvfHzMOs2aeWqgvNjq9pO99IUw8d3n+unw==",
"version": "1.102.0",
"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.102.0.tgz",
"integrity": "sha512-V9sFXmcXz03FtYTSUsYsu5K0Q9wH9w9V25slddcxrh5JgORD14LpnOA7ov0L9ALi+6HrTjskLJ/tY5zeRF3TFA==",
"dev": true,
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz",
"integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz",
"integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
"@typescript-eslint/scope-manager": "8.26.0",
"@typescript-eslint/type-utils": "8.26.0",
"@typescript-eslint/utils": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0",
"@typescript-eslint/scope-manager": "8.39.0",
"@typescript-eslint/type-utils": "8.39.0",
"@typescript-eslint/utils": "8.39.0",
"@typescript-eslint/visitor-keys": "8.39.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"ignore": "^7.0.0",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.0.1"
"ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -336,22 +357,32 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
"@typescript-eslint/parser": "^8.39.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/@typescript-eslint/parser": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz",
"integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz",
"integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/scope-manager": "8.26.0",
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/typescript-estree": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0",
"@typescript-eslint/scope-manager": "8.39.0",
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/typescript-estree": "8.39.0",
"@typescript-eslint/visitor-keys": "8.39.0",
"debug": "^4.3.4"
},
"engines": {
@ -363,18 +394,40 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz",
"integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==",
"node_modules/@typescript-eslint/project-service": {
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz",
"integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0"
"@typescript-eslint/tsconfig-utils": "^8.39.0",
"@typescript-eslint/types": "^8.39.0",
"debug": "^4.3.4"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz",
"integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/visitor-keys": "8.39.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -384,17 +437,35 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz",
"integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/type-utils": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz",
"integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz",
"integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/typescript-estree": "8.26.0",
"@typescript-eslint/utils": "8.26.0",
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/typescript-estree": "8.39.0",
"@typescript-eslint/utils": "8.39.0",
"debug": "^4.3.4",
"ts-api-utils": "^2.0.1"
"ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -405,13 +476,13 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/types": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz",
"integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz",
"integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==",
"dev": true,
"license": "MIT",
"engines": {
@ -423,20 +494,22 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz",
"integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz",
"integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0",
"@typescript-eslint/project-service": "8.39.0",
"@typescript-eslint/tsconfig-utils": "8.39.0",
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/visitor-keys": "8.39.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
"minimatch": "^9.0.4",
"semver": "^7.6.0",
"ts-api-utils": "^2.0.1"
"ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -446,13 +519,13 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -476,16 +549,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz",
"integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz",
"integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@typescript-eslint/scope-manager": "8.26.0",
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/typescript-estree": "8.26.0"
"@eslint-community/eslint-utils": "^4.7.0",
"@typescript-eslint/scope-manager": "8.39.0",
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/typescript-estree": "8.39.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -496,18 +569,18 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz",
"integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz",
"integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.0",
"eslint-visitor-keys": "^4.2.0"
"@typescript-eslint/types": "8.39.0",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -518,9 +591,9 @@
}
},
"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@ -546,9 +619,9 @@
"license": "MIT"
},
"node_modules/acorn": {
"version": "8.14.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"bin": {
@ -612,9 +685,10 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@ -735,32 +809,33 @@
}
},
"node_modules/eslint": {
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
"integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
"version": "9.31.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz",
"integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.11.0",
"@eslint/config-array": "^0.18.0",
"@eslint/core": "^0.7.0",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "9.13.0",
"@eslint/plugin-kit": "^0.2.0",
"@humanfs/node": "^0.16.5",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.21.0",
"@eslint/config-helpers": "^0.3.0",
"@eslint/core": "^0.15.0",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "9.31.0",
"@eslint/plugin-kit": "^0.3.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.3.1",
"@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
"@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^8.1.0",
"eslint-visitor-keys": "^4.1.0",
"espree": "^10.2.0",
"eslint-scope": "^8.4.0",
"eslint-visitor-keys": "^4.2.1",
"espree": "^10.4.0",
"esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@ -774,8 +849,7 @@
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3",
"text-table": "^0.2.0"
"optionator": "^0.9.3"
},
"bin": {
"eslint": "bin/eslint.js"
@ -796,9 +870,9 @@
}
},
"node_modules/eslint-scope": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
"integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@ -824,20 +898,24 @@
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/@eslint/js": {
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
"integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
"node_modules/eslint/node_modules/@humanwhocodes/retry": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"dev": true,
"license": "MIT",
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
"node": ">=18.18"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/nzakas"
}
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@ -848,15 +926,15 @@
}
},
"node_modules/espree": {
"version": "10.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.14.0",
"acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^4.2.0"
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -866,9 +944,9 @@
}
},
"node_modules/espree/node_modules/eslint-visitor-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@ -1117,9 +1195,9 @@
}
},
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -1555,9 +1633,9 @@
}
},
"node_modules/semver": {
"version": "7.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@ -1613,25 +1691,6 @@
"node": ">=8"
}
},
"node_modules/temp": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz",
"integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==",
"dependencies": {
"mkdirp": "^0.5.1",
"rimraf": "~2.6.2"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true,
"license": "MIT"
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@ -1646,9 +1705,9 @@
}
},
"node_modules/ts-api-utils": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz",
"integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
"integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
"dev": true,
"license": "MIT",
"engines": {
@ -1671,9 +1730,9 @@
}
},
"node_modules/typescript": {
"version": "5.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
"version": "5.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@ -1685,15 +1744,16 @@
}
},
"node_modules/typescript-eslint": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.0.tgz",
"integrity": "sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.0.tgz",
"integrity": "sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "8.26.0",
"@typescript-eslint/parser": "8.26.0",
"@typescript-eslint/utils": "8.26.0"
"@typescript-eslint/eslint-plugin": "8.39.0",
"@typescript-eslint/parser": "8.39.0",
"@typescript-eslint/typescript-estree": "8.39.0",
"@typescript-eslint/utils": "8.39.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -1704,14 +1764,15 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"dev": true,
"license": "MIT"
},
"node_modules/uri-js": {
"version": "4.4.1",

View File

@ -9,7 +9,7 @@
},
"version": "0.1.0",
"engines": {
"vscode": "^1.95.0"
"vscode": "^1.100.0"
},
"categories": [
"AI",
@ -202,11 +202,11 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/screenshot-desktop": "^1.12.3",
"@types/vscode": "^1.95.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,13 +1,13 @@
{
"compilerOptions": {
"module": "Node16",
"target": "ES2022",
"target": "ES2024",
"lib": [
"ES2022"
"ES2024"
],
"sourceMap": true,
"rootDir": "src",
"strict": true, /* enable all strict type-checking options */
"strict": true, /* enable all strict type-checking options */
"outDir": "out",
"jsx": "react",
"jsxFactory": "vscpp",
@ -17,4 +17,4 @@
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,53 +1,47 @@
{
"name": "code-tutor",
"displayName": "Code Tutor",
"description": "",
"version": "0.0.1",
"engines": {
"vscode": "^1.93.0"
},
"categories": [
"AI",
"Chat"
],
"activationEvents": [],
"main": "./out/extension.js",
"contributes": {
"chatParticipants": [
{
"id": "chat-tutorial.code-tutor",
"fullName": "Code Tutor",
"name": "tutor",
"description": "What can I teach you?",
"isSticky": true,
"commands": [
{
"name": "exercise",
"description": "Provide exercises to practice a concept."
}
]
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ./",
"pretest": "npm run compile && npm run lint",
"lint": "eslint",
"test": "node ./out/test/runTest.js"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/mocha": "^10.0.3",
"@types/node": "18.x",
"@types/vscode": "^1.94.0",
"@vscode/test-electron": "^2.3.6",
"eslint": "^9.13.0",
"glob": "^10.3.10",
"mocha": "^10.2.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
}
}
"name": "code-tutor",
"displayName": "Code Tutor",
"description": "",
"version": "0.0.1",
"engines": {
"vscode": "^1.100.0"
},
"categories": [
"AI",
"Chat"
],
"activationEvents": [],
"main": "./out/extension.js",
"contributes": {
"chatParticipants": [
{
"id": "chat-tutorial.code-tutor",
"fullName": "Code Tutor",
"name": "tutor",
"description": "What can I teach you?",
"isSticky": true,
"commands": [
{
"name": "exercise",
"description": "Provide exercises to practice a concept."
}
]
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ./",
"lint": "eslint"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^22.17.0",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}

View File

@ -1,17 +1,17 @@
{
"compilerOptions": {
"module": "Node16",
"target": "ES2022",
"target": "ES2024",
"outDir": "out",
"lib": [
"ES2022"
"ES2024"
],
"sourceMap": true,
"rootDir": "src",
"strict": true /* enable all strict type-checking options */
"strict": true /* enable all strict type-checking options */
/* Additional Checks */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples/issues"
},
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -30,10 +30,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,8 +1,10 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
@ -12,4 +14,4 @@
"node_modules",
".vscode-test"
]
}
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -51,10 +51,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,13 +1,15 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"rootDir": "src",
/* Strict Type-Checking Option */
"strict": true, /* enable all strict type-checking options */
"strict": true, /* enable all strict type-checking options */
/* Additional Checks */
"noUnusedLocals": true /* Report errors on unused locals. */
},

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -161,10 +161,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src"
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -28,10 +28,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,8 +1,10 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
@ -12,4 +14,4 @@
"node_modules",
".vscode-test"
]
}
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -161,10 +161,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,8 +1,10 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -62,10 +62,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,16 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src"
},
"exclude": ["node_modules"]
}
"exclude": [
"node_modules"
]
}

View File

@ -5,7 +5,7 @@
"publisher": "vscode-samples",
"repository": "https://github.com/Microsoft/vscode-extension-samples",
"engines": {
"vscode": "^1.38.0"
"vscode": "^1.100.0"
},
"contributes": {
"html": {
@ -19,4 +19,4 @@
]
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -56,10 +56,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,13 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src",
},
"exclude": ["node_modules", ".vscode-test"],
}
"exclude": [
"node_modules",
".vscode-test"
],
}

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
"publisher": "vscode-samples",
"license": "MIT",
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"repository": {
"url": "https://github.com/Microsoft/vscode-extension-samples"
@ -39,10 +39,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src"
},
"exclude": ["node_modules", ".vscode-test"]
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -29,10 +29,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,8 +1,10 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -35,10 +35,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src"
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.97.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -30,10 +30,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.97.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"rootDir": "src",
"strict": true
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.71.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -30,10 +30,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.71.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"rootDir": "src",
"strict": true
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

View File

@ -10,17 +10,15 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/mocha": "^10.0.6",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/vscode": "^1.100.0",
"esbuild": "^0.25.0",
"eslint": "^9.13.0",
"npm-run-all": "^4.1.5",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
}
},
"node_modules/@esbuild/aix-ppc64": {
@ -449,35 +447,42 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
"integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^3.3.0"
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
},
"peerDependencies": {
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
"node_modules/@eslint-community/regexpp": {
"version": "4.11.1",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz",
"integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==",
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
"integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/config-array": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
"integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
"version": "0.21.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
"integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/object-schema": "^2.1.4",
"@eslint/object-schema": "^2.1.6",
"debug": "^4.3.1",
"minimatch": "^3.1.2"
},
@ -485,20 +490,35 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
"integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
"node_modules/@eslint/config-helpers": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
"integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core": {
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
"integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/eslintrc": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
"integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@ -518,30 +538,36 @@
}
},
"node_modules/@eslint/js": {
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
"integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
"version": "9.31.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz",
"integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://eslint.org/donate"
}
},
"node_modules/@eslint/object-schema": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
"integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
"integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/plugin-kit": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz",
"integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==",
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
"integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@eslint/core": "^0.15.1",
"levn": "^0.4.1"
},
"engines": {
@ -549,27 +575,43 @@
}
},
"node_modules/@humanfs/core": {
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz",
"integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==",
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18.18.0"
}
},
"node_modules/@humanfs/node": {
"version": "0.16.5",
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz",
"integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==",
"version": "0.16.6",
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
"integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@humanfs/core": "^0.19.0",
"@humanfs/core": "^0.19.1",
"@humanwhocodes/retry": "^0.3.0"
},
"engines": {
"node": ">=18.18.0"
}
},
"node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18.18"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/nzakas"
}
},
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"dev": true,
@ -583,10 +625,11 @@
}
},
"node_modules/@humanwhocodes/retry": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
"integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18.18"
},
@ -688,41 +731,29 @@
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
"node_modules/@types/mocha": {
"version": "10.0.6",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "20.16.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz",
"integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==",
"dev": true,
"dependencies": {
"undici-types": "~6.19.2"
}
},
"node_modules/@types/vscode": {
"version": "1.89.0",
"version": "1.102.0",
"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.102.0.tgz",
"integrity": "sha512-V9sFXmcXz03FtYTSUsYsu5K0Q9wH9w9V25slddcxrh5JgORD14LpnOA7ov0L9ALi+6HrTjskLJ/tY5zeRF3TFA==",
"dev": true,
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz",
"integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz",
"integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
"@typescript-eslint/scope-manager": "8.26.0",
"@typescript-eslint/type-utils": "8.26.0",
"@typescript-eslint/utils": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0",
"@typescript-eslint/scope-manager": "8.39.0",
"@typescript-eslint/type-utils": "8.39.0",
"@typescript-eslint/utils": "8.39.0",
"@typescript-eslint/visitor-keys": "8.39.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"ignore": "^7.0.0",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.0.1"
"ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -732,22 +763,32 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
"@typescript-eslint/parser": "^8.39.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/@typescript-eslint/parser": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz",
"integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz",
"integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/scope-manager": "8.26.0",
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/typescript-estree": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0",
"@typescript-eslint/scope-manager": "8.39.0",
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/typescript-estree": "8.39.0",
"@typescript-eslint/visitor-keys": "8.39.0",
"debug": "^4.3.4"
},
"engines": {
@ -759,18 +800,40 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz",
"integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==",
"node_modules/@typescript-eslint/project-service": {
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz",
"integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0"
"@typescript-eslint/tsconfig-utils": "^8.39.0",
"@typescript-eslint/types": "^8.39.0",
"debug": "^4.3.4"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz",
"integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/visitor-keys": "8.39.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -780,17 +843,35 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz",
"integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/type-utils": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz",
"integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz",
"integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/typescript-estree": "8.26.0",
"@typescript-eslint/utils": "8.26.0",
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/typescript-estree": "8.39.0",
"@typescript-eslint/utils": "8.39.0",
"debug": "^4.3.4",
"ts-api-utils": "^2.0.1"
"ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -801,13 +882,13 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/types": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz",
"integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz",
"integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==",
"dev": true,
"license": "MIT",
"engines": {
@ -819,20 +900,22 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz",
"integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz",
"integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/visitor-keys": "8.26.0",
"@typescript-eslint/project-service": "8.39.0",
"@typescript-eslint/tsconfig-utils": "8.39.0",
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/visitor-keys": "8.39.0",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
"minimatch": "^9.0.4",
"semver": "^7.6.0",
"ts-api-utils": "^2.0.1"
"ts-api-utils": "^2.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -842,7 +925,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
@ -862,16 +945,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz",
"integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz",
"integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@typescript-eslint/scope-manager": "8.26.0",
"@typescript-eslint/types": "8.26.0",
"@typescript-eslint/typescript-estree": "8.26.0"
"@eslint-community/eslint-utils": "^4.7.0",
"@typescript-eslint/scope-manager": "8.39.0",
"@typescript-eslint/types": "8.39.0",
"@typescript-eslint/typescript-estree": "8.39.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -882,18 +965,18 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz",
"integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz",
"integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.26.0",
"eslint-visitor-keys": "^4.2.0"
"@typescript-eslint/types": "8.39.0",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -904,9 +987,9 @@
}
},
"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@ -917,10 +1000,11 @@
}
},
"node_modules/acorn": {
"version": "8.13.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz",
"integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==",
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@ -942,6 +1026,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@ -971,7 +1056,8 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
"dev": true,
"license": "Python-2.0"
},
"node_modules/array-buffer-byte-length": {
"version": "1.0.1",
@ -1029,9 +1115,9 @@
"license": "MIT"
},
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -1074,6 +1160,7 @@
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
@ -1409,31 +1496,33 @@
}
},
"node_modules/eslint": {
"version": "9.13.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
"integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
"version": "9.31.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz",
"integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.11.0",
"@eslint/config-array": "^0.18.0",
"@eslint/core": "^0.7.0",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "9.13.0",
"@eslint/plugin-kit": "^0.2.0",
"@humanfs/node": "^0.16.5",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.21.0",
"@eslint/config-helpers": "^0.3.0",
"@eslint/core": "^0.15.0",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "9.31.0",
"@eslint/plugin-kit": "^0.3.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.3.1",
"@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
"@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
"eslint-scope": "^8.1.0",
"eslint-visitor-keys": "^4.1.0",
"espree": "^10.2.0",
"eslint-scope": "^8.4.0",
"eslint-visitor-keys": "^4.2.1",
"espree": "^10.4.0",
"esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@ -1447,8 +1536,7 @@
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3",
"text-table": "^0.2.0"
"optionator": "^0.9.3"
},
"bin": {
"eslint": "bin/eslint.js"
@ -1469,10 +1557,11 @@
}
},
"node_modules/eslint-scope": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz",
"integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==",
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@ -1496,10 +1585,11 @@
}
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
"integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@ -1519,14 +1609,15 @@
}
},
"node_modules/espree": {
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz",
"integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==",
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.12.0",
"acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^4.1.0"
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -1536,10 +1627,11 @@
}
},
"node_modules/espree/node_modules/eslint-visitor-keys": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
"integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@ -1563,6 +1655,7 @@
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
@ -1591,7 +1684,8 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
"dev": true,
"license": "MIT"
},
"node_modules/fast-glob": {
"version": "3.3.3",
@ -1614,7 +1708,8 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
"dev": true,
"license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
@ -1783,6 +1878,7 @@
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
},
@ -1916,10 +2012,11 @@
}
},
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@ -2194,6 +2291,7 @@
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@ -2216,7 +2314,8 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
"dev": true,
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
@ -2320,7 +2419,9 @@
}
},
"node_modules/minimatch/node_modules/brace-expansion": {
"version": "1.1.11",
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -2595,6 +2696,7 @@
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
@ -2699,6 +2801,7 @@
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
@ -2775,6 +2878,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
@ -2853,9 +2957,9 @@
}
},
"node_modules/semver": {
"version": "7.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@ -3043,6 +3147,7 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
@ -3072,11 +3177,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/text-table": {
"version": "0.2.0",
"dev": true,
"license": "MIT"
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@ -3091,9 +3191,9 @@
}
},
"node_modules/ts-api-utils": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz",
"integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
"integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
"dev": true,
"license": "MIT",
"engines": {
@ -3184,9 +3284,9 @@
}
},
"node_modules/typescript": {
"version": "5.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
"version": "5.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@ -3198,15 +3298,16 @@
}
},
"node_modules/typescript-eslint": {
"version": "8.26.0",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.0.tgz",
"integrity": "sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==",
"version": "8.39.0",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.0.tgz",
"integrity": "sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "8.26.0",
"@typescript-eslint/parser": "8.26.0",
"@typescript-eslint/utils": "8.26.0"
"@typescript-eslint/eslint-plugin": "8.39.0",
"@typescript-eslint/parser": "8.39.0",
"@typescript-eslint/typescript-estree": "8.39.0",
"@typescript-eslint/utils": "8.39.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -3217,7 +3318,7 @@
},
"peerDependencies": {
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <5.9.0"
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/unbox-primitive": {
@ -3234,17 +3335,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"dev": true
},
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}

View File

@ -10,7 +10,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -39,13 +39,11 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/mocha": "^10.0.6",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/vscode": "^1.100.0",
"esbuild": "^0.25.0",
"eslint": "^9.13.0",
"npm-run-all": "^4.1.5",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src"
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -39,10 +39,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.74.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src"
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -46,10 +46,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -2,12 +2,17 @@
"compilerOptions": {
"strictNullChecks": true,
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "."
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
"url": "https://github.com/Microsoft/vscode-extension-samples"
},
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -82,10 +82,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -2,12 +2,17 @@
"compilerOptions": {
"strictNullChecks": true,
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "."
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@
"license": "MIT",
"repository": "https://github.com/Microsoft/vscode-extension-samples/getting-started-sample",
"engines": {
"vscode": "^1.73.0"
"vscode": "^1.100.0"
},
"categories": [
"Other"
@ -207,10 +207,10 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "^1.73.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
}
}
}

View File

@ -1,12 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"lib": ["es2020"],
"target": "ES2024",
"lib": [
"ES2024"
],
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src"
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
"version": "0.0.1",
"publisher": "vscode-samples",
"engines": {
"vscode": "^1.74.0"
"vscode": "^1.100.0"
},
"private": true,
"license": "MIT",
@ -36,13 +36,13 @@
"devDependencies": {
"@eslint/js": "^9.13.0",
"@stylistic/eslint-plugin": "^2.9.0",
"@types/node": "^20",
"@types/vscode": "1.74.0",
"@types/node": "^22",
"@types/vscode": "^1.100.0",
"eslint": "^9.13.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.26.0"
"typescript": "^5.9.2",
"typescript-eslint": "^8.39.0"
},
"dependencies": {
"@octokit/rest": "^18.0.0"
}
}
}

View File

@ -1,11 +1,14 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es2020",
"target": "ES2024",
"outDir": "out",
"sourceMap": true,
"rootDir": "src",
"strict": true
},
"exclude": ["node_modules", ".vscode-test"]
}
"exclude": [
"node_modules",
".vscode-test"
]
}

Some files were not shown because too many files have changed in this diff Show More