Compare commits

...

6 commits

Author SHA1 Message Date
igardev
f7525ce0f1 Update documentation 2026-04-29 20:55:16 +03:00
igardev
0c3908876d Refactor the generated code to comply with the standard approach.
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 20:19:25 +03:00
igardev
78bafe0f8f Use Tools model from llama.cpp instead of chat mode, fix the authentication problem
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 19:00:17 +03:00
copilot-swe-agent[bot]
582f16fb88 Add llama.cpp model provider for GitHub Copilot Chat
Co-authored-by: ggerganov <1991296+ggerganov@users.noreply.github.com>
2026-03-04 12:00:42 +00:00
copilot-swe-agent[bot]
fe1b58886a Initial plan for llama.cpp model provider for GitHub Copilot Chat
Co-authored-by: ggerganov <1991296+ggerganov@users.noreply.github.com>
2026-03-04 11:55:39 +00:00
copilot-swe-agent[bot]
a582118c6f Initial plan 2026-03-04 11:20:05 +00:00
10 changed files with 398 additions and 29 deletions

16
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "llama-vscode",
"version": "0.0.39",
"version": "0.0.45",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "llama-vscode",
"version": "0.0.39",
"version": "0.0.45",
"hasInstallScript": true,
"dependencies": {
"axios": "^1.1.2",
@ -24,7 +24,7 @@
"@types/mocha": "^10.0.10",
"@types/node": "^18.0.0",
"@types/picomatch": "^4.0.0",
"@types/vscode": "^1.100.0",
"@types/vscode": "^1.109.0",
"@vscode/test-cli": "^0.0.11",
"@vscode/test-electron": "^2.5.2",
"esbuild": "^0.27.0",
@ -829,9 +829,9 @@
"license": "MIT"
},
"node_modules/@types/vscode": {
"version": "1.103.0",
"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.103.0.tgz",
"integrity": "sha512-o4hanZAQdNfsKecexq9L3eHICd0AAvdbLk6hA60UzGXbGH/q8b/9xv2RgR7vV3ZcHuyKVq7b37IGd/+gM4Tu+Q==",
"version": "1.109.0",
"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.109.0.tgz",
"integrity": "sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==",
"dev": true,
"license": "MIT"
},
@ -1182,7 +1182,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@ -1231,7 +1230,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@ -1432,7 +1430,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001669",
"electron-to-chromium": "^1.5.41",
@ -5516,7 +5513,6 @@
"integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
"@webpack-cli/configtest": "^1.2.0",

View file

@ -6,7 +6,7 @@
"publisher": "ggml-org",
"repository": "https://github.com/ggml-org/llama.vscode",
"engines": {
"vscode": "^1.100.0"
"vscode": "^1.109.0"
},
"icon": "llama.png",
"activationEvents": [
@ -17,6 +17,13 @@
],
"main": "./dist/extension.js",
"contributes": {
"languageModelChatProviders": [
{
"vendor": "llama-vscode",
"displayName": "llama.vscode",
"managementCommand": "extension.showMenu"
}
],
"viewsContainers": {
"activitybar": [
{
@ -691,7 +698,6 @@
"create_agent"
]
}
],
"description": "The list of the agents, which could be selected"
},
@ -2264,7 +2270,7 @@
"@types/mocha": "^10.0.10",
"@types/node": "^18.0.0",
"@types/picomatch": "^4.0.0",
"@types/vscode": "^1.100.0",
"@types/vscode": "^1.109.0",
"@vscode/test-cli": "^0.0.11",
"@vscode/test-electron": "^2.5.2",
"esbuild": "^0.27.0",

View file

@ -51,7 +51,21 @@ https://github.com/user-attachments/assets/97bb1418-dcea-4a49-8332-13b2ab4da661
![Code completion](https://private-user-images.githubusercontent.com/1991296/405712196-b19499d9-f50d-49d4-9dff-ff3e8ba23757.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDY5NDc1NDEsIm5iZiI6MTc0Njk0NzI0MSwicGF0aCI6Ii8xOTkxMjk2LzQwNTcxMjE5Ni1iMTk0OTlkOS1mNTBkLTQ5ZDQtOWRmZi1mZjNlOGJhMjM3NTcuZ2lmP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDUxMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTA1MTFUMDcwNzIxWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NmZiMmI0NGYzNTkyZGZkMTM5Njk3M2NjZDFhMjFiNTFkMjVkMmY4MGQ5ZDQ2ZDQ0MDgzOWI2YjM5NTY0NzM2OSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.P150YJh87_y1pin20aWIuKoPzivmDjZF0iAemQlk_ok)## Custom eval tool
![Code completion](https://private-user-images.githubusercontent.com/1991296/405712196-b19499d9-f50d-49d4-9dff-ff3e8ba23757.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDY5NDc1NDEsIm5iZiI6MTc0Njk0NzI0MSwicGF0aCI6Ii8xOTkxMjk2LzQwNTcxMjE5Ni1iMTk0OTlkOS1mNTBkLTQ5ZDQtOWRmZi1mZjNlOGJhMjM3NTcuZ2lmP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDUxMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTA1MTFUMDcwNzIxWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NmZiMmI0NGYzNTkyZGZkMTM5Njk3M2NjZDFhMjFiNTFkMjVkMmY4MGQ5ZDQ2ZDQ0MDgzOWI2YjM5NTY0NzM2OSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.P150YJh87_y1pin20aWIuKoPzivmDjZF0iAemQlk_ok)## Copilot Chat Model Provider
### Overview
Llama-vscode could be used as a VS Code copilot chat model provider. With other words llama-vscode could provide models for the copilot. The provided models could be from local models or openrouter.com or other appliation, which servers the tools models for llama-vscode. This way you could automatically download and start locally models by llama.cpp and llama-vscode and use them with Copilot for free.
### How to use it
1. Select/Start tools model from llama-vscode (local or external)
<img width="485" height="875" alt="copilotSelectToolsModel" src="https://github.com/user-attachments/assets/caa33531-22f4-46dd-b429-7498c45c93e9" />
2. In VS Code Copilot show the models list -> Other Models -> Manage Models
<img width="1404" height="754" alt="CopilotManageModels" src="https://github.com/user-attachments/assets/dc861aa1-db86-46ff-83c1-98c7a435ad06" />
3. Make the models (all models available by the application serving the tools model are shown) you want to use visible (click on the left of the model name)
4. Select the desired model from Copilot and start using it
## Custom eval tool
### Overview
llama-vscode provides to the users the posibility to partially create their own tool. Custom eval tool is a simple one - has one parameters and and uses the provided by the user javascript function to calculate the result.
@ -204,14 +218,28 @@ Settings:
<img width="580" height="779" alt="image" src="https://github.com/user-attachments/assets/bb29e0c8-85b4-4e7a-a3d9-f2d9a1679d3d" />
## Version 0.0.40 is released (05.01.2025)
## Version 0.0.45 is released (04.03.2026)
## What is new
Generation of multiple completions in parallel:
- Setting max_parallel_completions determines how many completions to generate in parallel (default 3)
- Shortcuts - Alt+] - next completion, Alt+[ - previous completion
- Requires llama.cpp after December, 6, 2025 (commit c42712b) but is backword compatible (generates one completion for older versions)
- [More details](https://github.com/ggml-org/llama.vscode/wiki/Parallel-completions)
- Configurable debounce for inline completion requests - setting debounce_ms.
llama-vscode will wait debounce_ms after a keystroke before sending a request to the LLM for inline code completion. If in the meantime there is another keystroke, the request for the previous keystroke is cancelled. Useful on low end hardware to avoid triggering code completion on every keystroke.
- Notification "Extension is updated" is shown only on version change, not on every setting change (as was before)
## Version 0.0.44 is released (03.03.2026)
## What is new
- Subagents implemented (with tool delegate_task) - now each agent, which has "Available as Subagent" checked could be used as a subagent
- new agent - Unit Test Writer
- new tool create_agent
- new agent "Agent creator"
- Files SOUL.md and USER.md (if available in the project root) will be added to the context
## Setup instructions for llama.cpp server

View file

@ -30,6 +30,7 @@ import { Agent, Chat, Env, LlmModel } from "./types";
import { ModelType, PERSISTENCE_KEYS } from "./constants";
import { ApiKeyService } from "./services/api-key-service";
import { OpenAiCompModelStrategy } from "./services/openai-comp-model-strategy";
import { LlamaChatModelProvider } from "./llama-chat-model-provider";
export class Application {
public static readonly emptyModel = {name: ""};
@ -63,6 +64,7 @@ export class Application {
public agentCommandService: AgentCommandService
public chatService: ChatService
public apiKeyService: ApiKeyService
public llamaChatModelProvider: LlamaChatModelProvider
private selectedComplModel: LlmModel = Application.emptyModel
private selectedChatModel: LlmModel = Application.emptyModel
@ -105,6 +107,7 @@ export class Application {
this.agentCommandService = new AgentCommandService(this)
this.chatService = new ChatService(this)
this.apiKeyService = new ApiKeyService(this)
this.llamaChatModelProvider = new LlamaChatModelProvider(this);
}
public static getInstance(context: vscode.ExtensionContext): Application {

View file

@ -9,6 +9,7 @@ import { Utils } from './utils';
import { Env, LlmModel } from './types';
import { env } from 'process';
import { PERSISTENCE_KEYS, SETTING_NAME_FOR_LIST, UiView } from './constants';
import {LlamaChatModelProvider} from "./llama-chat-model-provider";
export class Architect {
private app: Application
@ -211,6 +212,22 @@ export class Architect {
);
}
registerLlavaVscodeModelProvider = (context: vscode.ExtensionContext) => {
// Register the llama.vscode language model chat provider for GitHub Copilot Chat
context.subscriptions.push(vscode.lm.registerLanguageModelChatProvider(
'llama-vscode',
this.app.llamaChatModelProvider
));
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration((event) => {
if (event.affectsConfiguration('llama-vscode.endpoint_chat')
|| event.affectsConfiguration('llama-vscode.endpoint_tools')
|| event.affectsConfiguration('llama-vscode.ai_api_version')) {
this.app.llamaChatModelProvider.notifyModelsChanged();
}
}));
}
registerGenarateCommitMsg = (context: vscode.ExtensionContext) => {
const generateCommitCommand = vscode.commands.registerCommand(
'extension.generateGitCommitMessage',

View file

@ -32,7 +32,10 @@ export function activate(context: vscode.ExtensionContext) {
app.architect.registerWebviewProvider(context)
app.architect.registerCommandSelectNextSuggestion(context)
app.architect.registerCommandSelectPreviousSuggestion(context)
app.architect.registerLlavaVscodeModelProvider(context)
app.architect.init()
}
export async function deactivate() {

View file

@ -0,0 +1,237 @@
import * as vscode from 'vscode';
import axios from 'axios';
import { Application } from './application';
import { Utils } from './utils';
const VENDOR = 'llama-vscode';
// Default token limits used when the server does not report them
const DEFAULT_MAX_INPUT_TOKENS = 8192;
const DEFAULT_MAX_OUTPUT_TOKENS = 4096;
interface OpenAIModel {
id: string;
object?: string;
}
interface OpenAIModelsResponse {
data: OpenAIModel[];
}
export class LlamaChatModelProvider implements vscode.LanguageModelChatProvider {
private readonly _onDidChangeLanguageModelChatInformation = new vscode.EventEmitter<void>();
readonly onDidChangeLanguageModelChatInformation: vscode.Event<void> =
this._onDidChangeLanguageModelChatInformation.event;
constructor(private readonly app: Application) {}
/** Called by the configuration change handler to notify VS Code that models may have changed. */
notifyModelsChanged(): void {
this._onDidChangeLanguageModelChatInformation.fire();
}
async provideLanguageModelChatInformation(
_options: vscode.PrepareLanguageModelChatModelOptions,
_token: vscode.CancellationToken
): Promise<vscode.LanguageModelChatInformation[]> {
const endpoint = this.getChatEndpoint();
if (!endpoint) {
return [];
}
try {
const requestConfig = this.app.configuration.axiosRequestConfigChat;
const response = await axios.get<OpenAIModelsResponse>(
`${Utils.trimTrailingSlash(endpoint)}/${this.app.configuration.ai_api_version}/models`,
requestConfig
);
if (!response.data?.data?.length) {
return [];
}
return response.data.data.map((model) => ({
id: model.id,
name: model.id,
family: VENDOR,
version: '1',
maxInputTokens: DEFAULT_MAX_INPUT_TOKENS,
maxOutputTokens: DEFAULT_MAX_OUTPUT_TOKENS,
capabilities: {
toolCalling: true,
imageInput: false,
},
}));
} catch {
return [];
}
}
async provideLanguageModelChatResponse(
model: vscode.LanguageModelChatInformation,
messages: readonly vscode.LanguageModelChatRequestMessage[],
options: vscode.ProvideLanguageModelChatResponseOptions,
progress: vscode.Progress<vscode.LanguageModelResponsePart>,
token: vscode.CancellationToken
): Promise<void> {
const endpoint = this.getChatEndpoint();
if (!endpoint) {
throw new Error('No chat endpoint configured');
}
const openaiMessages = messages.map((msg) => ({
role: msg.role === vscode.LanguageModelChatMessageRole.User ? 'user' : 'assistant',
content: msg.content
.map((part: unknown) =>
part instanceof vscode.LanguageModelTextPart ? part.value : ''
)
.join(''),
}));
const tools = options.tools?.map((t: vscode.LanguageModelToolInformation) => ({
type: 'function',
function: {
name: t.name,
description: t.description,
parameters: t.inputSchema,
},
}));
const requestBody: Record<string, unknown> = {
model: model.id,
messages: openaiMessages,
stream: true,
max_tokens: DEFAULT_MAX_OUTPUT_TOKENS,
...(options.modelOptions?.temperature !== undefined && {
temperature: options.modelOptions.temperature,
}),
...(tools?.length && { tools }),
};
const abortController = new AbortController();
token.onCancellationRequested(() => abortController.abort());
const requestConfig = this.app.configuration.axiosRequestConfigTools;
const streamResponse = await axios.post<NodeJS.ReadableStream>(
`${Utils.trimTrailingSlash(endpoint)}/${this.app.configuration.ai_api_version}/chat/completions`,
requestBody,
{ ...requestConfig, responseType: 'stream' as const, signal: abortController.signal }
);
await new Promise<void>((resolve, reject) => {
const readable = streamResponse.data;
let buffer = '';
// Accumulated tool call data indexed by call index
const toolCalls: { id: string; name: string; arguments: string }[] = [];
const finalize = () => {
// Emit any completed tool calls that weren't emitted yet
for (const tc of toolCalls) {
if (tc.id && tc.name) {
try {
progress.report(
new vscode.LanguageModelToolCallPart(tc.id, tc.name, JSON.parse(tc.arguments || '{}'))
);
} catch (e) {
console.warn('[llama-vscode] Failed to parse tool call arguments:', e);
}
}
}
resolve();
};
token.onCancellationRequested(() => {
(readable as any).destroy?.();
resolve();
});
readable.on('data', (chunk: Buffer) => {
buffer += chunk.toString('utf8');
const lines = buffer.split(/\r?\n/);
buffer = lines.pop() ?? '';
for (const line of lines) {
const trimmed = line.trim();
if (!trimmed || !trimmed.startsWith('data:')) {
continue;
}
const payload = trimmed.slice(5).trim();
if (payload === '[DONE]') {
finalize();
readable.removeAllListeners();
return;
}
try {
const json = JSON.parse(payload);
const choice = json.choices?.[0];
if (!choice) {
continue;
}
const delta = choice.delta ?? {};
if (typeof delta.content === 'string' && delta.content) {
progress.report(new vscode.LanguageModelTextPart(delta.content));
}
if (Array.isArray(delta.tool_calls)) {
for (const tc of delta.tool_calls) {
const idx: number = typeof tc.index === 'number' ? tc.index : 0;
if (!toolCalls[idx]) {
toolCalls[idx] = { id: '', name: '', arguments: '' };
}
if (tc.id) {
toolCalls[idx].id = tc.id;
}
if (tc.function?.name) {
toolCalls[idx].name = tc.function.name;
}
if (tc.function?.arguments) {
toolCalls[idx].arguments += tc.function.arguments;
}
}
}
} catch {
// Skip malformed SSE chunks
}
}
});
readable.on('end', () => {
finalize();
});
readable.on('error', (err: Error) => {
reject(err);
});
});
}
provideTokenCount(
_model: vscode.LanguageModelChatInformation,
text: string | vscode.LanguageModelChatRequestMessage,
_token: vscode.CancellationToken
): Thenable<number> {
const content =
typeof text === 'string'
? text
: text.content
.map((p: unknown) => (p instanceof vscode.LanguageModelTextPart ? p.value : ''))
.join('');
// Rough approximation: 1 token ≈ 4 characters. The llama.cpp server does not expose a
// tokenization endpoint via the standard OpenAI API, so we use this heuristic.
// Actual token counts may differ depending on the model's tokenizer.
return Promise.resolve(Math.ceil(content.length / 4));
}
private getChatEndpoint(): string {
const selectedModel = this.app.getToolsModel();
if (selectedModel?.endpoint) {
return selectedModel.endpoint;
}
if (this.app.configuration.endpoint_chat) {
return this.app.configuration.endpoint_chat;
}
if (this.app.configuration.endpoint_tools) {
return this.app.configuration.endpoint_tools;
}
return '';
}
}

View file

@ -195,6 +195,17 @@ export class ModelService {
await details.killCmd();
if (model.localStartCommand) await details.shellCmd(this.sanitizeCommand(model.localStartCommand ?? ""));
await this.app.persistence.setValue(this.getSelectedProp(type), model);
if (type == ModelType.Tools && model?.isKeyRequired !== undefined && model.isKeyRequired){
const apiKey = this.app.persistence.getApiKey(model.endpoint??"");
if (apiKey){
this.app.configuration.axiosRequestConfigTools = {
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
}
}
}
}
public async addModel(type: ModelType, kind: 'local' | 'external' | 'hf' | 'oaiComp'): Promise<void> {

77
src/vscode-lm-chat-shim.d.ts vendored Normal file
View file

@ -0,0 +1,77 @@
// Temporary shim for VS Code LM chat-provider typings.
// Some @types/vscode versions ship parts of the LM API behind proposal typings.
// This keeps `tsc` happy while still targeting the runtime VS Code API.
import type * as vscode from 'vscode';
declare module 'vscode' {
// eslint-disable-next-line @typescript-eslint/no-namespace
export namespace lm {
function registerLanguageModelChatProvider(
vendor: string,
provider: LanguageModelChatProvider
): vscode.Disposable;
}
export interface PrepareLanguageModelChatModelOptions {}
export interface LanguageModelChatCapabilities {
toolCalling?: boolean;
imageInput?: boolean;
}
export interface LanguageModelChatInformation {
id: string;
name: string;
family?: string;
version?: string;
maxInputTokens?: number;
maxOutputTokens?: number;
capabilities?: LanguageModelChatCapabilities;
}
export type LanguageModelChatMessagePart = unknown | LanguageModelTextPart;
export interface LanguageModelChatRequestMessage {
role: LanguageModelChatMessageRole;
content: readonly LanguageModelChatMessagePart[];
}
export interface ProvideLanguageModelChatResponseOptions {
tools?: readonly LanguageModelToolInformation[];
modelOptions?: {
temperature?: number;
[key: string]: unknown;
};
[key: string]: unknown;
}
export type LanguageModelResponsePart =
| LanguageModelTextPart
| LanguageModelToolCallPart
| unknown;
export interface LanguageModelChatProvider {
onDidChangeLanguageModelChatInformation?: vscode.Event<void>;
provideLanguageModelChatInformation(
options: PrepareLanguageModelChatModelOptions,
token: vscode.CancellationToken
): vscode.ProviderResult<LanguageModelChatInformation[]>;
provideLanguageModelChatResponse(
model: LanguageModelChatInformation,
messages: readonly LanguageModelChatRequestMessage[],
options: ProvideLanguageModelChatResponseOptions,
progress: vscode.Progress<LanguageModelResponsePart>,
token: vscode.CancellationToken
): vscode.ProviderResult<void>;
provideTokenCount(
model: LanguageModelChatInformation,
text: string | LanguageModelChatRequestMessage,
token: vscode.CancellationToken
): vscode.ProviderResult<number>;
}
}

9
ui/package-lock.json generated
View file

@ -326,7 +326,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz",
"integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@ -666,7 +665,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@ -693,7 +691,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@ -920,7 +917,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001726",
"electron-to-chromium": "^1.5.173",
@ -4085,7 +4081,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@ -4288,7 +4283,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@ -5321,7 +5315,6 @@
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@ -5579,7 +5572,6 @@
"integrity": "sha512-YJB/ESPUe2Locd0NKXmw72Dx8fZQk1gTzI6rc9TAT4+Sypbnhl8jd8RywB1bDsDF9Dy1RUR7gn3q/ZJTd0OZZg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8",
@ -5629,7 +5621,6 @@
"integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
"@webpack-cli/configtest": "^2.1.1",