diff --git a/ts/packages/agentServer/client/src/agentServerClient.ts b/ts/packages/agentServer/client/src/agentServerClient.ts index af6def6e12..3b76f5d31e 100644 --- a/ts/packages/agentServer/client/src/agentServerClient.ts +++ b/ts/packages/agentServer/client/src/agentServerClient.ts @@ -557,18 +557,90 @@ export async function connectAgentServer( ); } +// Candidate locations for the production agent-server install, matching the +// layout install-typeagent.ps1 / install-typeagent.sh lay down (a deployed +// artifact dir whose root holds the typeagent-serve.mjs launcher). We target +// the launcher rather than dist/server.js because a deployed artifact can be +// profile-pruned: the launcher reads the .typeagent-profile marker and starts +// the daemon with the matching --config, which the pruned artifact needs to +// load its agents. Kept in sync with those installers' InstallDir. +function getProductionServerCandidates(): string[] { + const candidates: string[] = []; + const server = (dir: string) => path.join(dir, "typeagent-serve.mjs"); + if (process.platform === "win32") { + const localAppData = + process.env.LOCALAPPDATA ?? + (process.env.USERPROFILE + ? path.join(process.env.USERPROFILE, "AppData", "Local") + : undefined); + if (localAppData) { + candidates.push( + server(path.join(localAppData, "TypeAgent", "agent-server")), + ); + } + } else if (process.platform === "darwin") { + candidates.push( + server( + path.join( + os.homedir(), + "Library", + "Application Support", + "TypeAgent", + "agent-server", + ), + ), + ); + } else { + const xdg = + process.env.XDG_DATA_HOME ?? + path.join(os.homedir(), ".local", "share"); + candidates.push(server(path.join(xdg, "typeagent", "agent-server"))); + } + return candidates; +} + +// Locate the agent-server entry point to spawn. Resolution order: +// 1. TYPEAGENT_SERVER_PATH env override (explicit full path to the entry to +// run with node — a deployed typeagent-serve.mjs or a dist/server.js). +// 2. The production install dir used by the installers (per-platform): the +// deployed typeagent-serve.mjs launcher. +// 3. The local workspace build, relative to this client package +// (client/dist -> server/dist/server.js), for repo/dev use. +// Returns the first that exists. This lets a client (shell, CLI, plugin) that no +// longer bundles the agent-server still find a separately installed one. The +// spawn path runs `node --port [--idle-timeout ]`, which both +// the launcher (defaults to its `start` command) and dist/server.js accept. function getAgentServerEntryPoint(): string { + const probed: string[] = []; + + const envOverride = process.env.TYPEAGENT_SERVER_PATH; + if (envOverride) { + probed.push(`${envOverride} (TYPEAGENT_SERVER_PATH)`); + if (fs.existsSync(envOverride)) { + return envOverride; + } + } + + for (const candidate of getProductionServerCandidates()) { + probed.push(`${candidate} (install dir)`); + if (fs.existsSync(candidate)) { + return candidate; + } + } + const thisDir = path.dirname(fileURLToPath(import.meta.url)); // From client/dist/ -> server/dist/server.js - const serverPath = path.resolve(thisDir, "../../server/dist/server.js"); - if (!fs.existsSync(serverPath)) { - throw new Error( - `Agent server entry point not found at ${serverPath}. ` + - `The expected relative path from the client package may have changed. ` + - `Ensure the agent-server package is built.`, - ); + const workspacePath = path.resolve(thisDir, "../../server/dist/server.js"); + probed.push(`${workspacePath} (workspace)`); + if (fs.existsSync(workspacePath)) { + return workspacePath; } - return serverPath; + + throw new Error( + `Agent server entry point not found. Probed:\n ${probed.join("\n ")}\n` + + `Install the TypeAgent agent service, set TYPEAGENT_SERVER_PATH to the ` + + `agent-server's dist/server.js, or build the agent-server package.`, + ); } export function isServerRunning(url: string): Promise { @@ -758,7 +830,7 @@ function spawnAgentServer( async function waitForServer( url: string, - timeoutMs: number = 60000, + timeoutMs: number = 120000, pollIntervalMs: number = 500, ): Promise { const start = Date.now(); diff --git a/ts/packages/agentServer/server/src/server.ts b/ts/packages/agentServer/server/src/server.ts index abc99eb6d3..b4c4ef8e08 100644 --- a/ts/packages/agentServer/server/src/server.ts +++ b/ts/packages/agentServer/server/src/server.ts @@ -200,6 +200,10 @@ async function main() { }, collectCommandResult: true, portRegistrar, + // Grant the browser agent permission to read other agents' + // local-view ports so inline-browser embedding works in + // connect mode, matching the standalone (in-process) shell. + allowSharedLocalView: ["browser"], }, instanceDir, ); diff --git a/ts/packages/agents/browser/src/agent/browserActionHandler.mts b/ts/packages/agents/browser/src/agent/browserActionHandler.mts index a58f68f2fe..862d740042 100644 --- a/ts/packages/agents/browser/src/agent/browserActionHandler.mts +++ b/ts/packages/agents/browser/src/agent/browserActionHandler.mts @@ -120,7 +120,6 @@ import { defaultSearchProviders, } from "../common/browserControl.mjs"; import { openai } from "@typeagent/aiclient"; -import { urlResolver } from "azure-ai-foundry"; import { SearchProviderCommandHandlerTable, SetCommandHandler, @@ -516,8 +515,15 @@ async function initializeBrowserContext( sessionId: "default", clientBrowserControl, useExternalBrowserControl: clientBrowserControl === undefined, + // With no in-process control (connect mode, or extension-only), leave + // the preferred client type unset so selectActiveClientForSession uses + // its default priority (electron > extension > any). This lets the + // shell's inline browser (an "electron" client, clientId + // "inlineBrowser") drive control in connect mode while still selecting + // the extension when it's the only client. Standalone keeps "electron" + // because it provides the control in-process. preferredClientType: - clientBrowserControl === undefined ? "extension" : "electron", + clientBrowserControl === undefined ? undefined : "electron", index: undefined, localHostPort, // Shared WebSocket server is created lazily on the first @@ -595,31 +601,47 @@ async function updateBrowserContext( } if (!context.agentContext.viewProcess) { - const viewProcess = await createViewServiceHost(context); - if (viewProcess) { - context.agentContext.viewProcess = viewProcess; - // Defensive cleanup if the child crashes mid-session. - // The dispatcher's PortRegistrar leaves stale entries - // bounded to "until respawn or session end", but a - // crashed child should release its registration eagerly - // so the entry doesn't shadow a fresh bind. The - // identity guard prevents a late-firing `exit` event on - // a previously-replaced process from clobbering a newer - // registration; the explicit disable path (which also - // releases) is naturally idempotent under `?.release()`. - viewProcess.once("exit", () => { - if (context.agentContext.viewProcess !== viewProcess) { + // Fork the express view service (static file host) in the + // background rather than blocking agent enable — and therefore + // agent-server startup — on it. Nothing on the enable path awaits + // the process object; its port is registered independently inside + // createViewServiceHost when the child reports ready. This keeps a + // slow/cold view-service fork (up to the 10s timeout) off the + // launch critical path. + void createViewServiceHost(context) + .then((viewProcess) => { + if (!viewProcess) { return; } - context.agentContext.viewPortRegistration?.release(); - context.agentContext.viewPortRegistration = undefined; - context.agentContext.viewProcess = undefined; - // Reset cached port so respawn forks with arg "0" - // (OS-assigned) instead of trying to re-bind the - // stale port — mirrors the disable/close paths. - context.agentContext.localHostPort = 0; + context.agentContext.viewProcess = viewProcess; + // Defensive cleanup if the child crashes mid-session. + // The dispatcher's PortRegistrar leaves stale entries + // bounded to "until respawn or session end", but a + // crashed child should release its registration eagerly + // so the entry doesn't shadow a fresh bind. The + // identity guard prevents a late-firing `exit` event on + // a previously-replaced process from clobbering a newer + // registration; the explicit disable path (which also + // releases) is naturally idempotent under `?.release()`. + viewProcess.once("exit", () => { + if (context.agentContext.viewProcess !== viewProcess) { + return; + } + context.agentContext.viewPortRegistration?.release(); + context.agentContext.viewPortRegistration = undefined; + context.agentContext.viewProcess = undefined; + // Reset cached port so respawn forks with arg "0" + // (OS-assigned) instead of trying to re-bind the + // stale port — mirrors the disable/close paths. + context.agentContext.localHostPort = 0; + }); + }) + .catch((e) => { + debug( + "Browser view service background start failed:", + e?.message ?? e, + ); }); - } } if (context.agentContext.browserSchemaEnabled) { @@ -1376,6 +1398,7 @@ async function resolveWebPage( context.agentContext.resolverSettings.keywordResolver || fastResolution ) { + const { urlResolver } = await import("azure-ai-foundry"); const cachehitUrls = urlResolver.resolveURLByKeyword(site); if (cachehitUrls && cachehitUrls.length > 0) { debug(`Resolved URLs from cache: ${cachehitUrls}`); diff --git a/ts/packages/agents/browser/src/agent/rpc/externalBrowserControlClient.mts b/ts/packages/agents/browser/src/agent/rpc/externalBrowserControlClient.mts index 38661c1b9f..f5cc222e78 100644 --- a/ts/packages/agents/browser/src/agent/rpc/externalBrowserControlClient.mts +++ b/ts/packages/agents/browser/src/agent/rpc/externalBrowserControlClient.mts @@ -14,10 +14,7 @@ export function createExternalBrowserClient( sessionId: string, ): ExternalBrowserClient { function getActiveRpc() { - const client = agentWebSocketServer.getActiveClient( - sessionId, - "extension", - ); + const client = agentWebSocketServer.getActiveClient(sessionId); if (!client?.browserControlRpc) { throw new Error("No browser control connection available"); } diff --git a/ts/packages/agents/markdown/src/agent/markdownActionHandler.ts b/ts/packages/agents/markdown/src/agent/markdownActionHandler.ts index 4db1503955..6882347c46 100644 --- a/ts/packages/agents/markdown/src/agent/markdownActionHandler.ts +++ b/ts/packages/agents/markdown/src/agent/markdownActionHandler.ts @@ -304,32 +304,55 @@ async function updateMarkdownContext( const fullPath = await getFullMarkdownFilePath(fileName, storage!); if (fullPath) { process.env.MARKDOWN_FILE = fullPath; - const result = await createViewServiceHost( + // Fork the express view service in the background instead of + // blocking agent enable (and therefore agent-server startup) + // on it. The view is only needed once the user actually opens + // the markdown view; every action handler guards on + // `viewProcess` presence, so early actions simply skip the + // view until it's ready. This keeps a slow/cold view-service + // fork (up to the 10s timeout) off the launch critical path. + void createViewServiceHost( fullPath, context.agentContext.localHostPort, - ); - if (result) { - const viewProcess = result.process; - context.agentContext.viewProcess = viewProcess; - context.agentContext.localHostPort = result.port; - context.agentContext.viewPortRegistration?.release(); - context.agentContext.viewPortRegistration = - context.registerPort("view", result.port); - // Defensive cleanup if the child crashes mid-session. - // The identity guard prevents a late-firing `exit` - // event on a previously-replaced process from - // clobbering a newer registration; the explicit - // disable path (which also releases) is naturally - // idempotent under `?.release()`. - viewProcess.once("exit", () => { - if (context.agentContext.viewProcess !== viewProcess) { + ) + .then((result) => { + if (!result) { return; } + const viewProcess = result.process; + context.agentContext.viewProcess = viewProcess; + context.agentContext.localHostPort = result.port; context.agentContext.viewPortRegistration?.release(); - context.agentContext.viewPortRegistration = undefined; - context.agentContext.viewProcess = undefined; + context.agentContext.viewPortRegistration = + context.registerPort("view", result.port); + // Defensive cleanup if the child crashes mid-session. + // The identity guard prevents a late-firing `exit` + // event on a previously-replaced process from + // clobbering a newer registration; the explicit + // disable path (which also releases) is naturally + // idempotent under `?.release()`. + viewProcess.once("exit", () => { + if ( + context.agentContext.viewProcess !== viewProcess + ) { + return; + } + context.agentContext.viewPortRegistration?.release(); + context.agentContext.viewPortRegistration = + undefined; + context.agentContext.viewProcess = undefined; + }); + // Re-wire the UI-command message handler now that the + // view process exists (the earlier call below ran + // before it was forked). + setCurrentAgentContext(context.agentContext); + }) + .catch((e) => { + console.warn( + "[AGENT] Markdown view service background start failed:", + e?.message ?? e, + ); }); - } } } diff --git a/ts/packages/aiclient/package.json b/ts/packages/aiclient/package.json index 9f3b7fb47f..03c170ce29 100644 --- a/ts/packages/aiclient/package.json +++ b/ts/packages/aiclient/package.json @@ -35,7 +35,6 @@ "dependencies": { "@azure/identity": "^4.10.0", "@github/copilot-sdk": "1.0.5", - "@huggingface/transformers": "^3.8.1", "@typeagent/common-utils": "workspace:*", "@typeagent/config": "workspace:*", "async": "^3.2.5", @@ -51,6 +50,9 @@ "rimraf": "^6.0.1", "typescript": "~5.4.5" }, + "optionalDependencies": { + "@huggingface/transformers": "^3.8.1" + }, "engines": { "node": ">=22" } diff --git a/ts/packages/shell/electron-builder.config.js b/ts/packages/shell/electron-builder.config.js index 1812d4b4ab..f60d0dcd4e 100644 --- a/ts/packages/shell/electron-builder.config.js +++ b/ts/packages/shell/electron-builder.config.js @@ -3,6 +3,21 @@ // Configuration used for 'electron-builder build' step, and not 'install-app-deps' step. +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +// The Electron browser extension ships as a resource. Its source +// (browser-typeagent/dist/electron) is resolved from the shell package's own +// node_modules rather than the deploy tree: browser-typeagent is a +// devDependency (build/package-time only), so it is intentionally excluded +// from `pnpm deploy --prod` and its (large) runtime closure never lands in the +// packaged app. Only the prebuilt extension assets are copied. +const shellDir = path.dirname(fileURLToPath(import.meta.url)); +const browserExtensionDir = path.join( + shellDir, + "node_modules/browser-typeagent/dist/electron", +); + const name = "typeagentshell"; const fullName = "TypeAgent Shell"; const account = process.env.AZURESTORAGEACCOUNTNAME; @@ -55,7 +70,7 @@ export default { // electron can't load the browser extension from the ASAR extraResources: [ { - from: "node_modules/browser-typeagent/dist/electron", + from: browserExtensionDir, to: "browser-typeagent-extension", }, ], diff --git a/ts/packages/shell/electron.vite.config.mts b/ts/packages/shell/electron.vite.config.mts index dcaefea5df..ae6f028fa7 100644 --- a/ts/packages/shell/electron.vite.config.mts +++ b/ts/packages/shell/electron.vite.config.mts @@ -23,7 +23,16 @@ function copySchemaPlugin() { export default defineConfig({ main: { - plugins: [externalizeDepsPlugin(), copySchemaPlugin()], + plugins: [ + externalizeDepsPlugin({ + include: [ + "agent-server", + "default-agent-provider", + "dispatcher-node-providers", + ], + }), + copySchemaPlugin(), + ], build: { sourcemap: true, }, diff --git a/ts/packages/shell/package.json b/ts/packages/shell/package.json index b9c18555b3..db24f249ac 100644 --- a/ts/packages/shell/package.json +++ b/ts/packages/shell/package.json @@ -23,7 +23,7 @@ "build:electron:cjs": "electron-vite build src/preload --config electron.vite.preload-cjs.config.mts --logLevel error", "build:electron:esm": "electron-vite build", "clean": "rimraf --glob out dist deploy *.tsbuildinfo *.done.build.log", - "deploy:app": "rimraf ./deploy && pnpm --filter=agent-shell deploy --prod ./deploy --ignore-scripts && pnpm -C deploy run postinstall ", + "deploy:app": "rimraf ./deploy && pnpm --filter=agent-shell deploy --prod ./deploy --ignore-scripts && pnpm -C deploy run postinstall && node ../../tools/scripts/prune-shell-deploy.mjs ./deploy", "dev": "npm run prepare-vite && cross-env NODE_OPTIONS=--disable-warning=DEP0190 electron-vite dev --", "dev:noenv": "npm run prepare-vite && electron-vite dev", "postinstall": "run-script-os", @@ -71,13 +71,9 @@ "@typeagent/dispatcher-types": "workspace:*", "@typeagent/websocket-utils": "workspace:*", "agent-dispatcher": "workspace:*", - "agent-server": "workspace:*", "ansi_up": "^6.0.2", - "browser-typeagent": "workspace:*", "chat-ui": "workspace:*", "debug": "^4.4.0", - "default-agent-provider": "workspace:*", - "dispatcher-node-providers": "workspace:*", "dompurify": "^3.4.11", "dotenv": "^16.3.1", "electron-updater": "^6.6.2", @@ -99,8 +95,12 @@ "@types/debug": "^4.1.12", "@types/jest": "^29.5.7", "@types/js-yaml": "^4.0.9", + "agent-server": "workspace:*", + "browser-typeagent": "workspace:*", "concurrently": "^9.1.2", "cross-env": "^7.0.3", + "default-agent-provider": "workspace:*", + "dispatcher-node-providers": "workspace:*", "electron": "40.8.5", "electron-builder": "26.8.1", "electron-builder-squirrel-windows": "26.8.1", diff --git a/ts/packages/shell/src/main/args.ts b/ts/packages/shell/src/main/args.ts index ead65d4dc8..76b834ac88 100644 --- a/ts/packages/shell/src/main/args.ts +++ b/ts/packages/shell/src/main/args.ts @@ -18,6 +18,7 @@ type ShellCommandLineArgs = { hidden?: boolean; idleTimeout?: number; resume?: boolean; + standalone?: boolean; }; export function parseShellCommandLine() { @@ -143,6 +144,11 @@ export function parseShellCommandLine() { continue; } + if (arg === "--standalone") { + result.standalone = true; + continue; + } + if (arg === "--connect") { i++; if ( @@ -174,6 +180,9 @@ export function parseShellCommandLine() { } if (result.connect !== undefined) { + if (result.standalone) { + debugShell("--standalone ignored with --connect"); + } if (result.data !== undefined) { debugShell("--data ignored with --connect"); } diff --git a/ts/packages/shell/src/main/browserIpc.ts b/ts/packages/shell/src/main/browserIpc.ts index bd908dbc4a..9d8cabcf5b 100644 --- a/ts/packages/shell/src/main/browserIpc.ts +++ b/ts/packages/shell/src/main/browserIpc.ts @@ -8,12 +8,27 @@ import { import WebSocket from "ws"; import { discoverPort } from "@typeagent/agent-server-client/discovery"; +import { + createChannelProviderAdapter, + type ChannelProviderAdapter, +} from "@typeagent/agent-rpc/channel"; +import { createRpc } from "@typeagent/agent-rpc/rpc"; +import type { + BrowserControlInvokeFunctions, + BrowserControlCallFunctions, +} from "browser-typeagent/agent/types"; import registerDebug from "debug"; const debugBrowserIPC = registerDebug("typeagent:browser:ipc"); const debugBrowserIPCError = registerDebug("typeagent:browser:ipc:error"); const AGENT_SERVER_DEFAULT_URL = "ws://localhost:8999/"; +// Connect-mode override for the agent-server discovery base URL. In connect +// mode the shell talks to a remote/standalone agent-server on a specific +// port, so browser-agent discovery must target that server rather than the +// default localhost:8999. Set via BrowserAgentIpc.setAgentServerUrl(). +let agentServerDiscoveryUrlOverride: string | undefined; + export class BrowserAgentIpc { private static instance: BrowserAgentIpc; public onMessageReceived: ((message: WebSocketMessageV2) => void) | null; @@ -27,6 +42,17 @@ export class BrowserAgentIpc { private reconnectAttempts: number = 0; private hasShownRestoringNotification: boolean = false; + // Connect-mode inline browser control: when set, the shell serves its + // in-process BrowserControl to the (remote) browser agent over the + // inlineBrowser socket's `browserControl` RPC channel. In standalone the + // control is provided in-process via agentInitOptions.browser and this + // stays undefined. + private browserControlHandlers?: { + invokeFunctions: BrowserControlInvokeFunctions; + callFunctions: BrowserControlCallFunctions; + }; + private browserControlProvider?: ChannelProviderAdapter; + private constructor() { this.webSocket = null; this.onMessageReceived = null; @@ -42,6 +68,16 @@ export class BrowserAgentIpc { return BrowserAgentIpc.instance; }; + /** + * Set the agent-server discovery base URL for the inline browser socket. + * Used in connect mode so browser-agent port discovery targets the + * connected agent-server (which hosts discovery on its main port) instead + * of the default localhost:8999. + */ + public setAgentServerUrl(url: string | undefined) { + agentServerDiscoveryUrlOverride = url; + } + public async ensureWebsocketConnected(): Promise { // if there's a pending websocket promise, return it if (this.webSocketPromise) { @@ -79,6 +115,15 @@ export class BrowserAgentIpc { try { const data = JSON.parse(text) as any; + // Browser control channel: served in-process (main) + // by the shell's inline BrowserControl so the remote + // browser agent can drive the shell's own tabs in + // connect mode. + if (data.name === "browserControl") { + this.browserControlProvider?.notifyMessage(data); + return; + } + // Channel-multiplexed messages: forward agentService replies to renderer if (data.name === "agentService") { if (this.onRpcReply) { @@ -109,10 +154,16 @@ export class BrowserAgentIpc { this.webSocket.onclose = () => { debugBrowserIPC("websocket connection closed"); + this.browserControlProvider?.notifyDisconnected(); + this.browserControlProvider = undefined; this.webSocket = undefined; this.reconnectWebSocket(); }; + // Serve the inline BrowserControl over this socket if enabled + // (connect mode). Re-served on every (re)connect. + this.serveBrowserControl(); + this.webSocketPromise = null; // Reset reconnection attempts on successful connection @@ -243,6 +294,51 @@ export class BrowserAgentIpc { public isConnected(): boolean { return this.webSocket && this.webSocket.readyState === WebSocket.OPEN; } + + /** + * Enable serving the shell's inline BrowserControl to the (remote) browser + * agent over the inlineBrowser socket's `browserControl` RPC channel. Used + * in connect mode, where the browser agent runs out-of-process and cannot + * receive the control in-process via `agentInitOptions.browser`. Safe to + * call before the socket connects; the channel is (re)served on each + * connect. Standalone must NOT call this (the in-process control is used). + */ + public enableInlineBrowserControl(handlers: { + invokeFunctions: BrowserControlInvokeFunctions; + callFunctions: BrowserControlCallFunctions; + }) { + this.browserControlHandlers = handlers; + if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) { + this.serveBrowserControl(); + } + } + + private serveBrowserControl() { + if (!this.browserControlHandlers || !this.webSocket) { + return; + } + // Drop any provider bound to a superseded socket before rebinding. + this.browserControlProvider?.notifyDisconnected(); + const provider = createChannelProviderAdapter( + "browser:inline-control", + (message) => { + if ( + this.webSocket && + this.webSocket.readyState === WebSocket.OPEN + ) { + this.webSocket.send(JSON.stringify(message)); + } + }, + ); + const channel = provider.createChannel("browserControl"); + createRpc( + "shell:inlineBrowserControl", + channel, + this.browserControlHandlers.invokeFunctions, + this.browserControlHandlers.callFunctions, + ); + this.browserControlProvider = provider; + } } /** @@ -265,7 +361,9 @@ export class BrowserAgentIpc { */ async function createInlineBrowserWebSocket(): Promise { const agentServerUrl = - process.env["WEBSOCKET_HOST"] || AGENT_SERVER_DEFAULT_URL; + agentServerDiscoveryUrlOverride || + process.env["WEBSOCKET_HOST"] || + AGENT_SERVER_DEFAULT_URL; const sessionId = "default"; const result = await discoverPort("browser", sessionId, { diff --git a/ts/packages/shell/src/main/index.ts b/ts/packages/shell/src/main/index.ts index 039eefb0a6..a564d10a47 100644 --- a/ts/packages/shell/src/main/index.ts +++ b/ts/packages/shell/src/main/index.ts @@ -28,12 +28,7 @@ import { getShellWindowForMainWindowIpcEvent, fatal, } from "./instance.js"; -import { - isServerRunning, - connectAgentServer, - AGENT_SERVER_DEFAULT_PORT, - type AgentServerConnection, -} from "@typeagent/agent-server-client"; +import { AGENT_SERVER_DEFAULT_PORT } from "@typeagent/agent-server-client"; import { debugShell, @@ -41,7 +36,12 @@ import { debugShellError, debugShellInit, } from "./debug.js"; -import { loadKeys, loadKeysFromEnvFile, tryLoadYamlConfig } from "./keys.js"; +import { + loadKeys, + loadKeysFromEnvFile, + tryLoadYamlConfig, + warmupRuntimeConfig, +} from "./keys.js"; import { parseShellCommandLine } from "./args.js"; import { setUpdateConfigPath, @@ -107,75 +107,33 @@ if (process.platform === "win32") { ); } -/** - * Probe `port` for an already-running *full* agent-server. - * - * `isServerRunning` only confirms that something accepts WebSocket - * connections there — a standalone shell also listens on this port to serve - * its discovery channel. To avoid that false positive we additionally issue a - * connection-level control RPC (`listConversations`); a discovery-only host - * won't answer, so the probe times out and we report "no server". - */ -async function detectRunningAgentServer(port: number): Promise { - const url = `ws://localhost:${port}`; - if (!(await isServerRunning(url))) { - return false; - } - let connection: AgentServerConnection | undefined; - try { - connection = await connectAgentServer(url); - await Promise.race([ - connection.listConversations(), - new Promise((_, reject) => - setTimeout( - () => reject(new Error("agent-server probe timed out")), - 3000, - ), - ), - ]); - return true; - } catch (e: any) { - debugShell(`No full agent-server on port ${port}: ${e?.message ?? e}`); - return false; - } finally { - try { - await connection?.close(); - } catch { - // Best effort — probe connection cleanup. - } - } -} - -// Resolve the effective connect target. An explicit --connect always wins. -// Otherwise, for a dev launch on the default profile (no --data/--clean/--reset), -// probe the default agent-server port: if a real agent-server is already -// running we connect to it instead of hosting an in-process server — the -// latter would fail to acquire the shared instance-directory lock and abort -// startup with "Another agent-server (or shell) is already using the instance -// directory". -// -// Never probe in test mode (--test). The smoke/e2e harness launches its own -// isolated instance (per-worker INSTANCE_NAME/PORT, --mock-greetings) and must -// stay hermetic: if the probe found any agent-server on the default port — e.g. -// the detached background server the CLI smoke step leaves on 8999, or a -// developer's dogfooding session — the test shell would connect to that foreign -// server instead of hosting its own, never reach the expected ready state, and -// time out. -let effectiveConnect = parsedArgs.connect; -if ( - effectiveConnect === undefined && - !isProd && - !isTest && - parsedArgs.data === undefined && - !parsedArgs.clean && - !parsedArgs.reset && - (await detectRunningAgentServer(AGENT_SERVER_DEFAULT_PORT)) -) { - debugShell( - `Detected running agent-server on port ${AGENT_SERVER_DEFAULT_PORT}; connecting instead of hosting in-process.`, - ); +// Connect mode is the default: the shell connects to a running agent-server, +// auto-spawning one via ensureAgentServer if none is running (see the connect +// branch in instance.ts, which uses the generalized server locator to find a +// separately installed agent-server). The in-process host is opt-in via +// --standalone (dev boxes). It is also used for the test harness (which needs +// an isolated per-worker instance) and whenever a custom data dir (--data) or +// --clean is requested, since those operate on an in-process instance +// directory. An explicit --connect always selects connect mode. +const standalone = + parsedArgs.standalone || + isTest || + parsedArgs.data !== undefined || + parsedArgs.clean; + +let effectiveConnect: number | undefined; +if (parsedArgs.connect !== undefined) { + effectiveConnect = parsedArgs.connect; +} else if (standalone) { + effectiveConnect = undefined; +} else { effectiveConnect = AGENT_SERVER_DEFAULT_PORT; } +debugShell( + effectiveConnect !== undefined + ? `Connect mode (port ${effectiveConnect})` + : "Standalone mode (hosting agent-server in-process)", +); const instanceDir = effectiveConnect !== undefined @@ -245,6 +203,12 @@ async function initialize() { const appPath = app.getAppPath(); await initializeKeys(appPath); + // Standalone hosts the agent-server in-process, so warm up the aiclient + // runtime config locally. The connect-only shell delegates all model work + // to the remote server and never imports aiclient here. + if (standalone) { + void warmupRuntimeConfig(); + } protocol.handle("typeagent-browser", (request) => { const url = new URL(request.url); const pathname = url.pathname; diff --git a/ts/packages/shell/src/main/inlineBrowserControl.ts b/ts/packages/shell/src/main/inlineBrowserControl.ts index b6ad0ce431..be1918c4b2 100644 --- a/ts/packages/shell/src/main/inlineBrowserControl.ts +++ b/ts/packages/shell/src/main/inlineBrowserControl.ts @@ -5,6 +5,8 @@ import { createChannelAdapter } from "@typeagent/agent-rpc/channel"; import { ShellWindow } from "./shellWindow.js"; import type { BrowserControl, + BrowserControlCallFunctions, + BrowserControlInvokeFunctions, SearchProvider, } from "browser-typeagent/agent/types"; import { createContentScriptRpcClient } from "browser-typeagent/contentScriptRpc/client"; @@ -593,3 +595,71 @@ export function createInlineBrowserControl( }, }; } + +/** + * Adapt a {@link BrowserControl} into the `{ invokeFunctions, callFunctions }` + * split that `createRpc` expects, so the shell can *serve* browser control over + * the browser agent's `browserControl` RPC channel (connect mode). This is the + * out-of-process equivalent of passing the control in-process via + * `agentInitOptions.browser` in standalone mode. + * + * `createRpc` dispatches handlers as `const f = handlers[name]; f(...args)` — + * i.e. the function is detached from the object, so `this` is lost. Some inline + * control methods (`zoomIn`/`zoomOut`) call `this.getPageUrl()`, so every method + * is wrapped to delegate back through the `control` object, preserving binding. + */ +export function createInlineBrowserControlRpcHandlers( + control: BrowserControl, +): { + invokeFunctions: BrowserControlInvokeFunctions; + callFunctions: BrowserControlCallFunctions; +} { + const invokeFunctions: BrowserControlInvokeFunctions = { + openWebPage: (url, options) => control.openWebPage(url, options), + closeWebPage: () => control.closeWebPage(), + closeAllWebPages: () => control.closeAllWebPages(), + goForward: () => control.goForward(), + goBack: () => control.goBack(), + reload: () => control.reload(), + getPageUrl: () => control.getPageUrl(), + scrollUp: () => control.scrollUp(), + scrollDown: () => control.scrollDown(), + zoomIn: () => control.zoomIn(), + zoomOut: () => control.zoomOut(), + zoomReset: () => control.zoomReset(), + followLinkByText: (keywords, openInNewTab) => + control.followLinkByText(keywords, openInNewTab), + followLinkByPosition: (position, openInNewTab) => + control.followLinkByPosition(position, openInNewTab), + closeWindow: () => control.closeWindow(), + search: (query, sites, searchProvider, options) => + control.search(query, sites, searchProvider, options), + switchTabs: (tabDescription, tabIndex) => + control.switchTabs(tabDescription, tabIndex), + readPageContent: () => control.readPageContent(), + stopReadPageContent: () => control.stopReadPageContent(), + captureScreenshot: () => control.captureScreenshot(), + getPageTextContent: () => control.getPageTextContent(), + getAutoIndexSetting: () => control.getAutoIndexSetting(), + getBrowserSettings: () => control.getBrowserSettings(), + getHtmlFragments: (useTimestampIds, compressionMode) => + control.getHtmlFragments(useTimestampIds, compressionMode), + clickOn: (cssSelector) => control.clickOn(cssSelector), + setDropdown: (cssSelector, optionLabel) => + control.setDropdown(cssSelector, optionLabel), + enterTextIn: (textValue, cssSelector, submitForm) => + control.enterTextIn(textValue, cssSelector, submitForm), + awaitPageLoad: (timeout) => control.awaitPageLoad(timeout), + awaitPageInteraction: (timeout) => + control.awaitPageInteraction(timeout), + downloadImage: (cssSelector, imageDescription, filename) => + control.downloadImage(cssSelector, imageDescription, filename), + runBrowserAction: (actionName, parameters, schemaName) => + control.runBrowserAction(actionName, parameters, schemaName), + }; + const callFunctions: BrowserControlCallFunctions = { + setAgentStatus: (isBusy, message) => + control.setAgentStatus(isBusy, message), + }; + return { invokeFunctions, callFunctions }; +} diff --git a/ts/packages/shell/src/main/instance.ts b/ts/packages/shell/src/main/instance.ts index 3c2c1778e1..c9ea17d1ed 100644 --- a/ts/packages/shell/src/main/instance.ts +++ b/ts/packages/shell/src/main/instance.ts @@ -16,15 +16,12 @@ import { createDispatcherRpcServer } from "@typeagent/dispatcher-rpc/dispatcher/ import { ShellWindow } from "./shellWindow.js"; import { createChannelAdapter } from "@typeagent/agent-rpc/channel"; import { getConsolePrompt } from "agent-dispatcher/helpers/console"; -import { - getDefaultAppAgentSource, - getDefaultAppAgentProviders, - getDefaultConstructionProvider, - getIndexingServiceRegistry, -} from "default-agent-provider"; import { getTraceId } from "agent-dispatcher/helpers/data"; import { createShellAgent, createShellAgentProvider } from "./agent.js"; -import { createInlineBrowserControl } from "./inlineBrowserControl.js"; +import { + createInlineBrowserControl, + createInlineBrowserControlRpcHandlers, +} from "./inlineBrowserControl.js"; import { BrowserAgentIpc } from "./browserIpc.js"; import { createLocalConversationBackend, @@ -39,10 +36,7 @@ import { QueueSnapshot, RequestId, } from "agent-dispatcher"; -import { - createInProcessAgentServer, - type InProcessAgentServer, -} from "agent-server/in-process"; +import type { InProcessAgentServer } from "agent-server/in-process"; import type { SubmitResult } from "@typeagent/dispatcher-types"; import { awaitCommand } from "@typeagent/dispatcher-types"; import { randomUUID } from "node:crypto"; @@ -50,7 +44,6 @@ import { getStatusSummary } from "agent-dispatcher/helpers/status"; import { setPendingUpdateCallback } from "./commands/update.js"; import { createClientIORpcClient } from "@typeagent/dispatcher-rpc/clientio/client"; import { isTest } from "./index.js"; -import { getFsStorageProvider } from "dispatcher-node-providers"; import { ensureAgentServer, connectAgentServer, @@ -280,6 +273,18 @@ async function initializeDispatcher( ); const url = `ws://localhost:${connect}`; + // Connect mode: the browser agent runs out-of-process in the + // agent-server and cannot receive the shell's BrowserControl via + // agentInitOptions.browser (as standalone does). Instead, serve the + // inline control over the inlineBrowser socket's browserControl RPC + // channel and point browser-agent discovery at the connected + // server so the shell's own tabs remain drivable. + const browserIpc = BrowserAgentIpc.getinstance(); + browserIpc.setAgentServerUrl(url); + browserIpc.enableInlineBrowserControl( + createInlineBrowserControlRpcHandlers(browserControl.control), + ); + // Register the shell's own agent (@shell commands) with the remote // dispatcher. The agent's handlers run here in the Electron main // process (against the live ShellWindow) via agent-rpc over the @@ -547,6 +552,22 @@ async function initializeDispatcher( "instanceDir is required when not in connect mode", ); } + + const [ + { + getDefaultAppAgentSource, + getDefaultAppAgentProviders, + getDefaultConstructionProvider, + getIndexingServiceRegistry, + }, + { createInProcessAgentServer }, + { getFsStorageProvider }, + ] = await Promise.all([ + import("default-agent-provider"), + import("agent-server/in-process"), + import("dispatcher-node-providers"), + ]); + const configName = isTest ? "test" : undefined; const indexingServiceRegistry = await getIndexingServiceRegistry( instanceDir, diff --git a/ts/packages/shell/src/main/keys.ts b/ts/packages/shell/src/main/keys.ts index b067439f8f..7b2a20546a 100644 --- a/ts/packages/shell/src/main/keys.ts +++ b/ts/packages/shell/src/main/keys.ts @@ -13,10 +13,6 @@ import { loadConfigSync, type ConfigTree, } from "@typeagent/config"; -import { - initRuntimeConfigFromProcessEnv, - warmupCopilotFromConfig, -} from "@typeagent/aiclient"; import yaml from "js-yaml"; import { debugShell, debugShellError } from "./debug.js"; @@ -108,16 +104,31 @@ async function saveKeysToPersistence(dir: string | undefined, keys: string) { function populateKeys(parsed: ParsedKeys) { dotenv.populate(process.env as any, parsed, { override: true }); - // After process.env is populated, build the typed runtime Config - // once so all aiclient consumers can read it via getRuntimeConfig(). - // Legacy callers still see the same values via process.env. - initRuntimeConfigFromProcessEnv(); - debugShell("Runtime Config initialized from process.env"); - // Pre-warm the Copilot CLI/session/endpoint when it's the active provider - // (no-op otherwise) so the first request avoids the cold-start cost. This - // lives with the hosts rather than in runtimeConfig to avoid an aiclient - // import cycle. Fire-and-forget so startup is never blocked. - void warmupCopilotFromConfig(); + debugShell("Service keys populated into process.env"); +} + +/** + * Initialize the aiclient runtime Config from `process.env` and pre-warm the + * Copilot provider. Only meaningful for the standalone (in-process + * agent-server) shell; the connect-only shell delegates all model work to the + * remote agent-server, so this is skipped and `@typeagent/aiclient` stays out + * of its dependency closure (loaded here via dynamic import). Fire-and-forget. + */ +export async function warmupRuntimeConfig(): Promise { + try { + const { initRuntimeConfigFromProcessEnv, warmupCopilotFromConfig } = + await import("@typeagent/aiclient"); + // Build the typed runtime Config once so all aiclient consumers can + // read it via getRuntimeConfig(); legacy callers still see process.env. + initRuntimeConfigFromProcessEnv(); + debugShell("Runtime Config initialized from process.env"); + // Pre-warm the Copilot CLI/session/endpoint when it's the active + // provider (no-op otherwise) so the first request avoids the cold-start + // cost. Fire-and-forget so startup is never blocked. + void warmupCopilotFromConfig(); + } catch (e) { + debugShellError("Failed to initialize aiclient runtime config", e); + } } function parsedKeysEqual(a: ParsedKeys, b: ParsedKeys) { @@ -286,8 +297,6 @@ export function tryLoadYamlConfig(envFile?: string): boolean { const keyCount = Object.keys(result.env).length; if (keyCount > 0) { debugShell("Loaded " + keyCount + " config keys from YAML"); - initRuntimeConfigFromProcessEnv(); - void warmupCopilotFromConfig(); return true; } } catch (err) { diff --git a/ts/packages/shell/src/main/speech.ts b/ts/packages/shell/src/main/speech.ts index 088a5fe723..84f2943d84 100644 --- a/ts/packages/shell/src/main/speech.ts +++ b/ts/packages/shell/src/main/speech.ts @@ -10,7 +10,10 @@ import { getShellWindow, getShellWindowForChatViewIpcEvent, } from "./instance.js"; -import { SpeechProcessing } from "./speechProcessing.js"; +import { + SpeechProcessing, + isLocalSpeechProcessingSupported, +} from "./speechProcessing.js"; const debugShell = registerDebug("typeagent:shell:speech"); const debugShellError = registerDebug("typeagent:shell:speech:error"); @@ -128,6 +131,13 @@ export function initializeSpeech() { console.log("Continuous speech processing: " + text); + if (!isLocalSpeechProcessingSupported()) { + debugShell( + "Continuous speech processing skipped: Copilot provider not supported in the connect-only shell", + ); + return undefined; + } + const shellWindow = getShellWindow(); if (shellWindow === undefined) { return; diff --git a/ts/packages/shell/src/main/speechProcessing.ts b/ts/packages/shell/src/main/speechProcessing.ts index 303f86a5ec..e089272027 100644 --- a/ts/packages/shell/src/main/speechProcessing.ts +++ b/ts/packages/shell/src/main/speechProcessing.ts @@ -11,6 +11,22 @@ import { const debug = registerDebug("typeagent:shell:speechProcessing"); +/** + * Continuous-speech classification runs a local chat model. When the + * configured chat provider is Copilot, the connect-only (pruned) shell has no + * bundled Copilot native to run it, so local processing must be skipped and + * the request left to the (future) server-side path. Reads the configured + * provider from `process.env` (`TYPEAGENT_MODEL_PROVIDER`, populated from YAML + * config by keys.ts) rather than the active aiclient provider, because the + * connect-only shell never initializes the aiclient runtime config. + */ +export function isLocalSpeechProcessingSupported(): boolean { + const provider = process.env["TYPEAGENT_MODEL_PROVIDER"] + ?.trim() + .toLowerCase(); + return provider !== "copilot"; +} + export class SpeechProcessing { // Singleton private static instance: SpeechProcessing; diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index 2c1ee2076b..cf722badb5 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -173,7 +173,7 @@ importers: version: 8.18.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.19.19)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + version: 29.7.0(@types/node@22.20.1)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -182,7 +182,7 @@ importers: version: 6.0.1 ts-loader: specifier: ^9.5.1 - version: 9.5.2(typescript@5.4.5)(webpack@5.105.0) + version: 9.5.2(typescript@5.4.5)(webpack@5.105.0(postcss@8.5.16)) typescript: specifier: ~5.4.5 version: 5.4.5 @@ -568,7 +568,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -595,7 +595,7 @@ importers: version: 24.37.5(typescript@5.4.5) ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@22.19.21)(typescript@5.4.5) + version: 10.9.2(@types/node@22.20.1)(typescript@5.4.5) xml2js: specifier: ^0.6.2 version: 0.6.2 @@ -809,7 +809,7 @@ importers: version: 12.0.2(webpack@5.105.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -824,7 +824,7 @@ importers: version: 5.4.5 webpack: specifier: ^5.104.1 - version: 5.105.0(webpack-cli@5.1.4) + version: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) @@ -953,7 +953,7 @@ importers: version: 12.0.2(webpack@5.105.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -968,7 +968,7 @@ importers: version: 5.4.5 webpack: specifier: ^5.104.1 - version: 5.105.0(webpack-cli@5.1.4) + version: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) @@ -1002,7 +1002,7 @@ importers: version: 9.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1036,7 +1036,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1092,7 +1092,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1129,7 +1129,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1218,7 +1218,7 @@ importers: version: 7.0.15 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1316,7 +1316,7 @@ importers: version: 5.4.5 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@25.9.3)(less@4.3.0)(terser@5.39.2) + version: 5.4.21(@types/node@26.1.1)(less@4.3.0)(terser@5.49.0) packages/actionGrammar: dependencies: @@ -1359,7 +1359,7 @@ importers: version: 5.6.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1409,7 +1409,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -1447,7 +1447,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -1472,7 +1472,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1503,7 +1503,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1610,7 +1610,7 @@ importers: version: 8.18.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1723,7 +1723,7 @@ importers: version: 8.18.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1811,7 +1811,7 @@ importers: version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2113,10 +2113,10 @@ importers: version: 29.3.3(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(esbuild@0.28.1)(jest@29.7.0(@types/node@22.15.18)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)))(typescript@5.4.5) ts-loader: specifier: ^9.5.1 - version: 9.5.2(typescript@5.4.5)(webpack@5.105.0(esbuild@0.28.1)) + version: 9.5.2(typescript@5.4.5)(webpack@5.105.0(esbuild@0.28.1)(postcss@8.5.16)) vite: specifier: ^6.4.3 - version: 6.4.3(@types/node@22.15.18)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.3(@types/node@22.15.18)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.8.3) packages/agents/calendar: dependencies: @@ -2156,7 +2156,7 @@ importers: version: 9.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2254,7 +2254,7 @@ importers: version: 9.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2345,7 +2345,7 @@ importers: version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2447,7 +2447,7 @@ importers: version: 9.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -2710,7 +2710,7 @@ importers: version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -2725,7 +2725,7 @@ importers: version: 5.4.5 vite: specifier: ^6.4.3 - version: 6.4.3(@types/node@25.9.3)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.9.0) + version: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.9.0) packages/agents/montage: dependencies: @@ -2804,7 +2804,7 @@ importers: version: 12.0.2(webpack@5.105.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.2.5 version: 3.5.3 @@ -2819,7 +2819,7 @@ importers: version: 5.4.5 webpack: specifier: ^5.104.1 - version: 5.105.0(webpack-cli@5.1.4) + version: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) @@ -2917,7 +2917,7 @@ importers: version: 9.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3006,7 +3006,7 @@ importers: version: 9.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -3129,7 +3129,7 @@ importers: version: 9.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3339,7 +3339,7 @@ importers: version: 12.0.2(webpack@5.105.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3354,7 +3354,7 @@ importers: version: 5.4.5 webpack: specifier: ^5.104.1 - version: 5.105.0(webpack-cli@5.1.4) + version: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) @@ -3406,7 +3406,7 @@ importers: version: 9.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3539,7 +3539,7 @@ importers: version: 5.4.5 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@25.9.3)(less@4.3.0)(terser@5.39.2) + version: 5.4.21(@types/node@26.1.1)(less@4.3.0)(terser@5.49.0) packages/agents/weather: dependencies: @@ -3596,9 +3596,6 @@ importers: '@github/copilot-sdk': specifier: 1.0.5 version: 1.0.5 - '@huggingface/transformers': - specifier: ^3.8.1 - version: 3.8.1 '@typeagent/common-utils': specifier: workspace:* version: link:../utils/commonUtils @@ -3629,13 +3626,17 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: specifier: ~5.4.5 version: 5.4.5 + optionalDependencies: + '@huggingface/transformers': + specifier: ^3.8.1 + version: 3.8.1 packages/api: dependencies: @@ -3717,7 +3718,7 @@ importers: version: 8.18.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3781,7 +3782,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -3842,7 +3843,7 @@ importers: version: 2.0.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3882,7 +3883,7 @@ importers: version: 5.6.3(webpack@5.105.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3897,7 +3898,7 @@ importers: version: 5.4.5 webpack: specifier: ^5.104.1 - version: 5.105.0(webpack-cli@5.1.4) + version: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) @@ -3934,7 +3935,7 @@ importers: version: 14.1.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0(supports-color@8.1.1) @@ -4015,7 +4016,7 @@ importers: version: link:../telemetry ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@22.19.21)(typescript@5.4.5) + version: 10.9.2(@types/node@22.20.1)(typescript@5.4.5) typechat-utils: specifier: workspace:* version: link:../utils/typechatUtils @@ -4034,7 +4035,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + version: 29.7.0(@types/node@22.20.1)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4043,7 +4044,7 @@ importers: version: 6.0.1 ts-jest: specifier: ^29.4.9 - version: 29.4.9(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.4.9(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)))(typescript@5.4.5) typescript: specifier: ~5.4.5 version: 5.4.5 @@ -4218,7 +4219,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.2.5 version: 3.5.3 @@ -4227,7 +4228,7 @@ importers: version: 5.0.10 ts-jest: specifier: ^29.1.2 - version: 29.3.3(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest@29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.3.3(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest@29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)))(typescript@5.4.5) typescript: specifier: ~5.4.5 version: 5.4.5 @@ -4279,7 +4280,7 @@ importers: version: 4.0.9 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -4530,7 +4531,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4681,7 +4682,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4724,7 +4725,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -4818,7 +4819,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -4852,7 +4853,7 @@ importers: version: 0.11.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -4861,7 +4862,7 @@ importers: version: 5.4.5 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@25.9.3)(less@4.3.0)(terser@5.39.2) + version: 5.4.21(@types/node@26.1.1)(less@4.3.0)(terser@5.49.0) packages/interactiveApp: dependencies: @@ -4920,7 +4921,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5018,7 +5019,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5058,7 +5059,7 @@ importers: version: 12.0.2(webpack@5.105.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5073,7 +5074,7 @@ importers: version: 5.4.5 webpack: specifier: ^5.104.1 - version: 5.105.0(webpack-cli@5.1.4) + version: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) @@ -5208,7 +5209,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5278,7 +5279,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5330,7 +5331,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.2.5 version: 3.5.3 @@ -5424,7 +5425,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5557,27 +5558,15 @@ importers: agent-dispatcher: specifier: workspace:* version: link:../dispatcher/dispatcher - agent-server: - specifier: workspace:* - version: link:../agentServer/server ansi_up: specifier: ^6.0.2 version: 6.0.5 - browser-typeagent: - specifier: workspace:* - version: link:../agents/browser chat-ui: specifier: workspace:* version: link:../chat-ui debug: specifier: ^4.4.0 version: 4.4.1 - default-agent-provider: - specifier: workspace:* - version: link:../defaultAgentProvider - dispatcher-node-providers: - specifier: workspace:* - version: link:../dispatcher/nodeProviders dompurify: specifier: ^3.4.11 version: 3.4.11 @@ -5617,7 +5606,7 @@ importers: devDependencies: '@electron-toolkit/tsconfig': specifier: ^1.0.1 - version: 1.0.1(@types/node@22.19.21) + version: 1.0.1(@types/node@22.20.1) '@fontsource/lato': specifier: ^5.2.5 version: 5.2.5 @@ -5636,12 +5625,24 @@ importers: '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 + agent-server: + specifier: workspace:* + version: link:../agentServer/server + browser-typeagent: + specifier: workspace:* + version: link:../agents/browser concurrently: specifier: ^9.1.2 version: 9.1.2 cross-env: specifier: ^7.0.3 version: 7.0.3 + default-agent-provider: + specifier: workspace:* + version: link:../defaultAgentProvider + dispatcher-node-providers: + specifier: workspace:* + version: link:../dispatcher/nodeProviders electron: specifier: 40.8.5 version: 40.8.5(supports-color@8.1.1) @@ -5653,10 +5654,10 @@ importers: version: 26.8.1(dmg-builder@26.8.1)(supports-color@8.1.1) electron-vite: specifier: ^4.0.1 - version: 4.0.1(vite@6.4.3(@types/node@22.19.21)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 4.0.1(vite@6.4.3(@types/node@22.20.1)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.9.0)) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + version: 29.7.0(@types/node@22.20.1)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) less: specifier: ^4.2.0 version: 4.3.0 @@ -5674,7 +5675,7 @@ importers: version: 5.4.5 vite: specifier: ^6.4.3 - version: 6.4.3(@types/node@22.19.21)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.9.0) + version: 6.4.3(@types/node@22.20.1)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.9.0) packages/studio-service: dependencies: @@ -5754,7 +5755,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5788,7 +5789,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5859,7 +5860,7 @@ importers: version: 16.5.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5893,7 +5894,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -5976,7 +5977,7 @@ importers: version: 0.28.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -6004,7 +6005,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -6053,7 +6054,7 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -6096,7 +6097,7 @@ importers: version: 8.18.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + version: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -6902,6 +6903,10 @@ packages: resolution: {integrity: sha1-3bL4dlNP+AE+bCspm/TTmzxR1Ew=} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha1-wKB2bxoTYX2KF0B9erj51IYiXqQ=} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha1-fwhx2Zgk0jE31g+G/PYTD9WhtR8=} engines: {node: '>=6.9.0'} @@ -6948,8 +6953,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.27.1': - resolution: {integrity: sha1-NMAX1USW+bEbYUdOfqPf1VY//gc=} + '@babel/plugin-syntax-import-attributes@7.29.7': + resolution: {integrity: sha1-YRUmRRbpXq0PNaQXEJBmEuRH9gU=} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -7028,6 +7033,10 @@ packages: resolution: {integrity: sha1-++58+XxwlRjswfWQmESB1UYNR2I=} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.7': + resolution: {integrity: sha1-EgIkUMRaTabY2Ch7GKT/Ldsj92g=} + engines: {node: '>=6.9.0'} + '@babel/template@7.29.7': resolution: {integrity: sha1-TZ1ABPZFzdME3pWMclFieE7KxwA=} engines: {node: '>=6.9.0'} @@ -7269,8 +7278,8 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - '@electron/rebuild@4.0.3': - resolution: {integrity: sha1-8CL35mh0kg/Rak2AK4YFiFy1SdM=} + '@electron/rebuild@4.2.0': + resolution: {integrity: sha1-7nQpqXE00T6ze39RfXN+AtHeqHc=} engines: {node: '>=22.12.0'} hasBin: true @@ -7976,41 +7985,41 @@ packages: '@fontsource/lato@5.2.5': resolution: {integrity: sha1-z1UvE6Vpr/KGJdnTfbNcomvn1ZQ=} - '@github/copilot-darwin-arm64@1.0.70': - resolution: {integrity: sha1-a++8R/8ywfJGyVmS3eSvyg5EFXY=} + '@github/copilot-darwin-arm64@1.0.69': + resolution: {integrity: sha1-kNIn7K8Qh/LeBLWWGloPDMsZqc8=} cpu: [arm64] os: [darwin] hasBin: true - '@github/copilot-darwin-x64@1.0.70': - resolution: {integrity: sha1-cniNbh3UEEpdYuUcoWixBXVwIC0=} + '@github/copilot-darwin-x64@1.0.69': + resolution: {integrity: sha1-2YJvB5/7imW621ygcju3G1bsuDg=} cpu: [x64] os: [darwin] hasBin: true - '@github/copilot-linux-arm64@1.0.70': - resolution: {integrity: sha1-CC0twbGPuSbuPQF5J8QMn0tUNF0=} + '@github/copilot-linux-arm64@1.0.69': + resolution: {integrity: sha1-ZpLeYjWbYZrWjabxU1ZB1YAWZEc=} cpu: [arm64] os: [linux] libc: [glibc] hasBin: true - '@github/copilot-linux-x64@1.0.70': - resolution: {integrity: sha1-oqU2h9sYafFeM6hEA6+3rvB2wWo=} + '@github/copilot-linux-x64@1.0.69': + resolution: {integrity: sha1-fAlDxPhvlGSb1qd8L7uoFgfKqoQ=} cpu: [x64] os: [linux] libc: [glibc] hasBin: true - '@github/copilot-linuxmusl-arm64@1.0.70': - resolution: {integrity: sha1-GBDVmhv4wbopdNxFJHqaeNKV6fc=} + '@github/copilot-linuxmusl-arm64@1.0.69': + resolution: {integrity: sha1-61lchlSHZKii1/g0H0qneTt9FCQ=} cpu: [arm64] os: [linux] libc: [musl] hasBin: true - '@github/copilot-linuxmusl-x64@1.0.70': - resolution: {integrity: sha1-67W11PTO3uE3mEVWDSzLMTivBRw=} + '@github/copilot-linuxmusl-x64@1.0.69': + resolution: {integrity: sha1-9/lIMVBp2XxtMetsizMFlQsP/Ws=} cpu: [x64] os: [linux] libc: [musl] @@ -8020,20 +8029,20 @@ packages: resolution: {integrity: sha1-ov0xdFEekFOqPdVPhFDgWdZ0LsE=} engines: {node: ^20.19.0 || >=22.12.0} - '@github/copilot-win32-arm64@1.0.70': - resolution: {integrity: sha1-QMzrmlebPAOUNbCTMNk6TBQRmuU=} + '@github/copilot-win32-arm64@1.0.69': + resolution: {integrity: sha1-xO/hI91RvyW8gXMLdESZUxVaEtw=} cpu: [arm64] os: [win32] hasBin: true - '@github/copilot-win32-x64@1.0.70': - resolution: {integrity: sha1-GxOGU2eCSxWt2TUWxy8f+9/ODVU=} + '@github/copilot-win32-x64@1.0.69': + resolution: {integrity: sha1-G5E+QYyQAT1orQcNrlfB8NolDso=} cpu: [x64] os: [win32] hasBin: true - '@github/copilot@1.0.70': - resolution: {integrity: sha1-ZXwZ/95WrolCJp3qxmhGeJm+i48=} + '@github/copilot@1.0.69': + resolution: {integrity: sha1-rILueCbIPnVDqzJI4RhDthM/Vs4=} hasBin: true '@hapi/bourne@3.0.0': @@ -8494,6 +8503,10 @@ packages: resolution: {integrity: sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg=} engines: {node: '>=8'} + '@istanbuljs/schema@0.1.6': + resolution: {integrity: sha1-jcmvoqwVBssaWPiZQPHBJERsjfM=} + engines: {node: '>=8'} + '@jest/console@29.7.0': resolution: {integrity: sha1-zUgi29uEUpJlxaK9tSmjycyVD/w=} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8570,12 +8583,12 @@ packages: resolution: {integrity: sha1-eg7mAfYPmaIMfHxf8MgDiMEYm9Y=} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha1-shg1y9Nttla4V8KtAuvUE8wTqbo=} + '@jridgewell/source-map@0.3.5': resolution: {integrity: sha1-o7tNXGglqrDSgSaPR/atWFNDHpE=} - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha1-nXHKiG4yUC65NiyadKRnh8Nt+Bo=} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha1-MYi8snOkFLDSFf0ipYVAuYm5QJo=} @@ -9650,8 +9663,8 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha1-1bXimnum05WKGXLHvhb0ssGIxRc=} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha1-Zmf6wWxDa1Q0o4ejTe2wExmPbm4=} + '@sinclair/typebox@0.27.10': + resolution: {integrity: sha1-vu/mdfGFP3NnauzJFbK9KsmMT8Y=} '@sindresorhus/is@4.6.0': resolution: {integrity: sha1-PHycRuZ4/u/nouW7YJ09vWZf+z8=} @@ -9928,8 +9941,8 @@ packages: resolution: {integrity: sha1-IYXjkJkAOLJnojQcPbHO82gLvug=} engines: {node: '>=18'} - '@tsconfig/node10@1.0.9': - resolution: {integrity: sha1-30kH/AeohpImN7FeAtTOvEwAIbI=} + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha1-vlfOrB5GkrQb6d5r6MMqEGY226Q=} '@tsconfig/node12@1.0.11': resolution: {integrity: sha1-7j3vHyfZ7WbaxuRqKVz/sBUuBY0=} @@ -9955,14 +9968,14 @@ packages: '@types/babel__core@7.20.5': resolution: {integrity: sha1-PfFfJ7qFMZyqB7oI0HIYibs5wBc=} - '@types/babel__generator@7.6.8': - resolution: {integrity: sha1-+DbGH0ixNG59Kw2TxtrMW5U106s=} + '@types/babel__generator@7.27.0': + resolution: {integrity: sha1-tYGSlMUReZV6+uw0FEL5NB5BCKk=} '@types/babel__template@7.4.4': resolution: {integrity: sha1-VnJRNwHBshmbxtrWNqnXSRWGdm8=} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha1-jcnwrg8gLAjY1Nq2SJEsjWA44/c=} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha1-B9cT1szg0mXJhJ2wy+YtP2Hzb3Q=} '@types/better-sqlite3@7.6.11': resolution: {integrity: sha1-lazyL89Vd2JO6iAgWOJrojl2C58=} @@ -10132,6 +10145,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha1-oVXyFpCHGVNBDfS2tvUxh/BQCRc=} + '@types/debug@4.1.13': + resolution: {integrity: sha1-ItHMnVQtNZPK6nZPl0MGqzYobuc=} + '@types/deep-eql@4.0.2': resolution: {integrity: sha1-M0MRlx06BxIefrkbaEpgXn7qnL0=} @@ -10147,6 +10163,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha1-lYuRyZGxhnztMYvt6g4hXuBQcm4=} + '@types/estree@1.0.9': + resolution: {integrity: sha1-zz8Oh2177hWpOrkluCv1cKOQSiQ=} + '@types/express-serve-static-core@4.17.41': resolution: {integrity: sha1-UHfe+mMMLo0oqp/8LAHBV8MFvvY=} @@ -10195,8 +10214,8 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha1-vBtb86qS8lvV3TnzXFc2G9zlsus=} - '@types/graceful-fs@4.1.8': - resolution: {integrity: sha1-QX5GHk3HnZV9wxB/Rf5Jc7CcKRU=} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha1-Kga8D2iiCrN7PjaqI4vmq99J6LQ=} '@types/har-format@1.2.15': resolution: {integrity: sha1-81JJNjjC+J1wZDihmp6zALSTtQY=} @@ -10231,9 +10250,15 @@ packages: '@types/istanbul-lib-report@3.0.2': resolution: {integrity: sha1-OUeY1fcnQC617Jnrlhj/zSt2RaE=} + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha1-UwR2FK5y4Z/AQB2HLeOuK0zjUL8=} + '@types/istanbul-reports@3.0.3': resolution: {integrity: sha1-AxPiYI5taVXRlfVTYd3uvUt0xuc=} + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha1-DwPj0vZw+9rFhuNLQzeDBwzBb1Q=} + '@types/jest@29.5.14': resolution: {integrity: sha1-K5EJEvodaFbK3NDB+Vr33x1gSeU=} @@ -10318,6 +10343,9 @@ packages: '@types/ms@0.7.33': resolution: {integrity: sha1-gL8dpksV8h/Ywdw4fDGSkxfZnuk=} + '@types/ms@2.1.0': + resolution: {integrity: sha1-BSqmekjszEMJ1/AZG35BQ0uQu3g=} + '@types/node-fetch@2.6.12': resolution: {integrity: sha1-irXD74Mw8TEAp0eeLNVtM4aDCgM=} @@ -10333,14 +10361,14 @@ packages: '@types/node@22.19.19': resolution: {integrity: sha1-MSS/Jt7VQWi3aBODIf75m0IMYRI=} - '@types/node@22.19.21': - resolution: {integrity: sha1-XJ2EPqOFsx7pN6n3Q0Q4MGIKMt4=} + '@types/node@22.20.1': + resolution: {integrity: sha1-hOfN9jzaogwTSqMXzMkBqiHhbw4=} '@types/node@24.12.2': resolution: {integrity: sha1-NTyxYdvxeF6iXogpun7FdMXGKaw=} - '@types/node@25.9.3': - resolution: {integrity: sha1-Ed/noz5o+lxWDwqnbMVZViHvJrk=} + '@types/node@26.1.1': + resolution: {integrity: sha1-utdY1gHpfWz0V9IE7najX8570Rk=} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha1-VuLMJsOXwDj6sOOpF6EtXFkJ6QE=} @@ -10441,8 +10469,8 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha1-rKqw+RnOaczmKcLU7S60rcG2wgw=} - '@types/verror@1.10.9': - resolution: {integrity: sha1-Qgwyrbmi3VCz20yPllAeBaDnKUE=} + '@types/verror@1.10.11': + resolution: {integrity: sha1-09a0GJeMiqIC1B5bs0gyJ7bswbs=} '@types/vscode@1.100.0': resolution: {integrity: sha1-Nc1iioaxFYeFbflL6UBUqrAfLxc=} @@ -10471,11 +10499,11 @@ packages: '@types/xml2js@0.4.14': resolution: {integrity: sha1-XUYqKnMwNF4jCca1SaGDo3bej5o=} - '@types/yargs-parser@21.0.2': - resolution: {integrity: sha1-e9BMXaN4SW7xaVoQCL+PcYR6i4s=} + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha1-gV4wt4bS6PDc2F/VvPXhoE0AjxU=} - '@types/yargs@17.0.29': - resolution: {integrity: sha1-Bqq8ckl7eYxkPIEqi1YVN/6nYM8=} + '@types/yargs@17.0.35': + resolution: {integrity: sha1-BwE+RqpNfX1QpJ4VYEwcU0DU6yQ=} '@types/yauzl@2.10.3': resolution: {integrity: sha1-6bKAi08QlQSgPNqVglmHb2EBeZk=} @@ -10837,8 +10865,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.0: - resolution: {integrity: sha1-IJdmWvUP0M96LfzNK5Nolk5mVA8=} + acorn-walk@8.3.5: + resolution: {integrity: sha1-imuMqPxbNGha8V2rtEEYZjwpZJY=} engines: {node: '>=0.4.0'} acorn@7.4.1: @@ -11161,6 +11189,14 @@ packages: bare-events@2.5.4: resolution: {integrity: sha1-FhQ9Q14e2er9GrhfEribM1ekF0U=} + bare-events@2.9.1: + resolution: {integrity: sha1-XIZhaWY0O8sDobMVX+qyU+rb80k=} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-fs@4.1.5: resolution: {integrity: sha1-HQbAduaMyL+XAQ0pr546w4CM3Pc=} engines: {bare: '>=1.16.0'} @@ -11191,8 +11227,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=} - baseline-browser-mapping@2.10.37: - resolution: {integrity: sha1-PmNkdbaykyROKyPixxoqudnmun0=} + baseline-browser-mapping@2.10.42: + resolution: {integrity: sha1-GV3MdrqiaaSX8LB97Kzhaf7prFg=} engines: {node: '>=6.0.0'} hasBin: true @@ -11284,8 +11320,8 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=} - browserslist@4.28.2: - resolution: {integrity: sha1-9QtlNi70iXTKn1CzaAVm14a4EdI=} + browserslist@4.28.5: + resolution: {integrity: sha1-Q4t9OMDUtHdAu7NneNW9ygGzeDg=} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -11405,8 +11441,8 @@ packages: resolution: {integrity: sha1-VoW5XrIJrJwMF3Rnd4ychN9Yupo=} engines: {node: '>=10'} - caniuse-lite@1.0.30001799: - resolution: {integrity: sha1-XJCROMJ/GmEhnT4JIHHBzH0y3FU=} + caniuse-lite@1.0.30001803: + resolution: {integrity: sha1-sqXWluBCvIME3NSULDn+Mw+7yyQ=} caseless@0.12.0: resolution: {integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=} @@ -11480,8 +11516,8 @@ packages: engines: {node: '>=12.13.0'} hasBin: true - chrome-trace-event@1.0.3: - resolution: {integrity: sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=} + chrome-trace-event@1.0.4: + resolution: {integrity: sha1-Bb/9f/koRlCTMUcIyTvfqb0fD1s=} engines: {node: '>=6.0'} chromium-bidi@0.11.0: @@ -11785,6 +11821,10 @@ packages: resolution: {integrity: sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=} engines: {node: '>= 0.10'} + cors@2.8.6: + resolution: {integrity: sha1-/13Wm9leVHUDgg0pq6T4+vjf7JY=} + engines: {node: '>= 0.10'} + cose-base@1.0.3: resolution: {integrity: sha1-ZQM0tBuGlXilQzWLgM2n4Kvgpgo=} @@ -12424,6 +12464,10 @@ packages: resolution: {integrity: sha1-CStJ8l+AjwIAUAUdH/JY5ATHhpI=} engines: {node: '>=12'} + dotenv@16.6.1: + resolution: {integrity: sha1-dz8OaVJ6gxXHKF1e5zxEWdIKgCA=} + engines: {node: '>=12'} + dotenv@17.4.2: resolution: {integrity: sha1-wH5Up0bhHroCHdnhBHztWv3BwDQ=} engines: {node: '>=12'} @@ -12460,8 +12504,8 @@ packages: electron-publish@26.8.1: resolution: {integrity: sha1-ajL6ju0NQZcd2lMHK+oGuZMr5YM=} - electron-to-chromium@1.5.375: - resolution: {integrity: sha1-VKmmFtwrN2XnJj2Y0UwhNUCJVNk=} + electron-to-chromium@1.5.389: + resolution: {integrity: sha1-U4vp6+x4Am1Nq6a+Mhq4VN+sKo8=} electron-updater@6.6.2: resolution: {integrity: sha1-PmXgRPGpmwDWHiAOJN6OcJxpzpk=} @@ -12534,8 +12578,8 @@ packages: resolution: {integrity: sha1-ZodEahXpaeqmPC+iaUUQ4Xrm2Xw=} engines: {node: '>=10.13.0'} - enhanced-resolve@5.24.1: - resolution: {integrity: sha1-skOa310x1+R2TeH57PlC1s0/yHQ=} + enhanced-resolve@5.24.2: + resolution: {integrity: sha1-8l1wOiRDHLHgL5RK23Su+k/LjX4=} engines: {node: '>=10.13.0'} entities@2.2.0: @@ -12594,8 +12638,8 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha1-kVlgFWGICoXyc0VgqQmbLDHlNyo=} - es-module-lexer@2.0.0: - resolution: {integrity: sha1-9lfNepRI3N2pwHCjy3Xl3B6F9bE=} + es-module-lexer@2.3.0: + resolution: {integrity: sha1-/adwI0w0UGTBIuuQXhxCAP+kzn4=} es-object-atoms@1.1.1: resolution: {integrity: sha1-HE8sSDcydZfOadLKGQp/3RcjOME=} @@ -12760,6 +12804,10 @@ packages: resolution: {integrity: sha1-KS4WXjTKy8k2w8knGe8ybUrrTpA=} engines: {node: '>=18.0.0'} + eventsource-parser@3.1.0: + resolution: {integrity: sha1-ThmOuRzTM9Co3cwDZQKzYYol9Ek=} + engines: {node: '>=18.0.0'} + eventsource@3.0.7: resolution: {integrity: sha1-EVdiLi9Td7tq7yEUNycougwVaYk=} engines: {node: '>=18.0.0'} @@ -12806,6 +12854,12 @@ packages: peerDependencies: express: '>= 4.11' + express-rate-limit@8.5.2: + resolution: {integrity: sha1-WSLb923yEkYRzqlV2TQys3UUsvM=} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + express@4.22.1: resolution: {integrity: sha1-HeI6CXRaT//bOSR7NEu16v84IGk=} engines: {node: '>= 0.10.0'} @@ -12856,6 +12910,9 @@ packages: fast-uri@3.1.2: resolution: {integrity: sha1-ivPU/J0+cbEVcswmc7UUp9GoyOw=} + fast-uri@3.1.3: + resolution: {integrity: sha1-9pWkDwBqulBWMVc6ACHdshGUrRE=} + fast-xml-builder@1.2.0: resolution: {integrity: sha1-q9I2MUWnYl2Xia2W2jdfq+PP8ow=} @@ -13041,6 +13098,10 @@ packages: resolution: {integrity: sha1-q2k07Ki89vf2uCdC4zWR+GMB1vw=} engines: {node: '>=14.14'} + fs-extra@11.3.6: + resolution: {integrity: sha1-98uA6d9VDNHbb1N/pc3VaNPnDRA=} + engines: {node: '>=14.14'} + fs-extra@7.0.1: resolution: {integrity: sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=} engines: {node: '>=6 <7 || >=8'} @@ -13107,6 +13168,10 @@ packages: resolution: {integrity: sha1-IbQHHuWO0E7g22UzcbVbQpmHU4k=} engines: {node: '>=18'} + get-east-asian-width@1.6.0: + resolution: {integrity: sha1-IWkA+R3xGossGYw+HZPWwDWndrk=} + engines: {node: '>=18'} + get-folder-size@5.0.0: resolution: {integrity: sha1-VUokjsgxWHH4nUZyRPUrTJ+UzeE=} engines: {node: '>=18.11.0'} @@ -13384,6 +13449,10 @@ packages: resolution: {integrity: sha1-8tmZalToycDF9d4cjzqWLkOpjE4=} engines: {node: '>=16.9.0'} + hono@4.12.29: + resolution: {integrity: sha1-VUGKdlMd0m3w8xA1M/Ss1p41Z4c=} + engines: {node: '>=16.9.0'} + hosted-git-info@4.1.0: resolution: {integrity: sha1-gnuChn6f8cjQxNnVOIA5fSyG0iQ=} engines: {node: '>=10'} @@ -13743,8 +13812,8 @@ packages: resolution: {integrity: sha1-+uMWfHKedGP4RhzlErCApJJoqog=} engines: {node: '>=12'} - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha1-lgnvztfC+X2ntgFF70gceHx7pwQ=} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha1-BGsqbU9rFWsiM9MgfUtal4OZm5g=} engines: {node: '>=18'} is-generator-fn@2.1.0: @@ -13941,12 +14010,16 @@ packages: resolution: {integrity: sha1-A0t+VJidq4mGWYy86kH2ZmPGUjQ=} engines: {node: '>= 14.0.0'} + isbinaryfile@5.0.7: + resolution: {integrity: sha1-Gac/IoG3No3KnTs6yKBDQHRnCXk=} + engines: {node: '>= 18.0.0'} + isexe@2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} - isexe@3.1.1: - resolution: {integrity: sha1-SkB+K9eN37FL6gwnxvcHLd53Xw0=} - engines: {node: '>=16'} + isexe@3.1.5: + resolution: {integrity: sha1-QuNo9o1eENrf7k/ae1ULwtiJLck=} + engines: {node: '>=18'} isexe@4.0.0: resolution: {integrity: sha1-SPZXavjoehj+t5a37V4uWQO0Pco=} @@ -13968,6 +14041,10 @@ packages: resolution: {integrity: sha1-GJ55CdCjn6Wj361bA/cZR3cBkdM=} engines: {node: '>=8'} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha1-LRZsSwZE1Do58Ev2wu3R5YXzF1Y=} + engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: resolution: {integrity: sha1-0QyIhcISVXThwjHKyt+VVnXhzj0=} engines: {node: '>=8'} @@ -14164,6 +14241,9 @@ packages: jose@6.1.3: resolution: {integrity: sha1-hFPXvoive7fWSgSB1qNaAUW6PqU=} + jose@6.2.3: + resolution: {integrity: sha1-CXUZetlzJRIhxlijzdxLlRolDC0=} + js-stringify@1.0.2: resolution: {integrity: sha1-Fzb939lyTyijaCrcYjCufk6Weds=} @@ -14264,6 +14344,9 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha1-fCZb0bZd5pd0eDAAh8mfHIQ4P2I=} + jsonfile@6.2.1: + resolution: {integrity: sha1-tuMXF/Isw3MwsIHOAFHtXeU68vY=} + jsonpath@1.3.0: resolution: {integrity: sha1-YjGXlw+0M4RcaAJL+eK4ZPU3arI=} @@ -14454,8 +14537,8 @@ packages: lit@3.3.2: resolution: {integrity: sha1-2SMOu/I3v9PSCRvAtWxXakcKxNc=} - loader-runner@4.3.1: - resolution: {integrity: sha1-bHbtKbDMzprzeSCCmfB/h23nN+M=} + loader-runner@4.3.2: + resolution: {integrity: sha1-mRPToVlx+PY1kV5gH7XJ1JXZGOk=} engines: {node: '>=6.11.5'} locate-path@5.0.0: @@ -15085,6 +15168,11 @@ packages: engines: {node: '>= 4.4.x'} hasBin: true + needle@3.5.0: + resolution: {integrity: sha1-qiAjZCy0GxGhG6u3M/2PqVKRkRI=} + engines: {node: '>= 4.4.x'} + hasBin: true + negotiator@0.6.3: resolution: {integrity: sha1-WOMjpy/twNb5zU0x/kn1FHlZDM0=} engines: {node: '>= 0.6'} @@ -15114,8 +15202,8 @@ packages: resolution: {integrity: sha1-OtkNXJ1FZjQg5apP9Y2/TjYlQZo=} engines: {node: '>=10'} - node-abi@4.24.0: - resolution: {integrity: sha1-/MG0xkX/tMDzni2/ucQWmLp+eC4=} + node-abi@4.33.0: + resolution: {integrity: sha1-zOm3vODL+h1dWptpCLxe7WmJacw=} engines: {node: '>=22.12.0'} node-addon-api@1.7.2: @@ -15152,8 +15240,8 @@ packages: encoding: optional: true - node-gyp@12.3.0: - resolution: {integrity: sha1-oODZNkd5RR6vQUi2+ac2b5gACz8=} + node-gyp@12.4.0: + resolution: {integrity: sha1-LQF7bqHKkpTbvudb5TNyj0klcCQ=} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true @@ -15163,8 +15251,8 @@ packages: node-pty@1.1.0: resolution: {integrity: sha1-Fhk21FpHdRwuO2lMNl5zAXQXqIc=} - node-releases@2.0.47: - resolution: {integrity: sha1-UhuyeG2o6xQLdIhBwLOzp1M0/8Q=} + node-releases@2.0.51: + resolution: {integrity: sha1-zcCEM1d/WzKtAWlEgXJuIu61Su8=} engines: {node: '>=18'} node-rsa@1.1.1: @@ -15625,6 +15713,10 @@ packages: resolution: {integrity: sha1-eXpRapPmL1veVeC5zJyWf4YIk8k=} engines: {node: '>=10.4.0'} + plist@3.1.1: + resolution: {integrity: sha1-+mCZ4ePPbqGAJY6+Y3jqOHjCyEE=} + engines: {node: '>=10.4.0'} + pluralize@2.0.0: resolution: {integrity: sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=} @@ -16311,6 +16403,9 @@ packages: sanitize-filename@1.6.3: resolution: {integrity: sha1-dV69dSBFkxl34wsgJdNA18kJA3g=} + sanitize-filename@1.6.4: + resolution: {integrity: sha1-trOevtm9GhiYuFxcAwidp0WQ1vg=} + sass-lookup@6.1.2: resolution: {integrity: sha1-7vzJDr6uRR0lKkqdjQkP7xpionk=} engines: {node: '>=18'} @@ -16319,6 +16414,10 @@ packages: sax@1.3.0: resolution: {integrity: sha1-pdvnfbO+BcnR7neF29PqneUVk9A=} + sax@1.6.0: + resolution: {integrity: sha1-2lljdikwe5fnxMso4ICnvDhWDVs=} + engines: {node: '>=11.0.0'} + saxes@6.0.0: resolution: {integrity: sha1-/ltKR2jfTxSiAbG6amXB89mYjMU=} engines: {node: '>=v12.22.7'} @@ -16636,6 +16735,10 @@ packages: resolution: {integrity: sha1-qbvnBcnYhG9OCP9nZazw8bCJhlY=} engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha1-o2WKuH5bZCnIofO6AIPUxhyj7wI=} + engines: {node: '>= 12'} + spark-md5@3.0.2: resolution: {integrity: sha1-eVLEoweENHq87nMmjkc7nAFn4/w=} @@ -16882,6 +16985,10 @@ packages: resolution: {integrity: sha1-8R4GOv7UVU91gEnQgpCeN9a1PO0=} engines: {node: '>=18'} + tar@7.5.19: + resolution: {integrity: sha1-2JFea3F/gDannYOcqUSBmLACsKc=} + engines: {node: '>=18'} + temp-file@3.4.0: resolution: {integrity: sha1-dm6iiRHGg5lsJI7xog7qBNUWUsc=} @@ -16893,19 +17000,46 @@ packages: resolution: {integrity: sha1-FKZKJ6s8Dfkz6lRvulXy0HjtyZQ=} engines: {node: '>=8'} - terser-webpack-plugin@5.3.16: - resolution: {integrity: sha1-dB5EjMP5PYAm6+T3755K+s/VYzA=} + terser-webpack-plugin@5.6.1: + resolution: {integrity: sha1-R7xBvYuPq4ODti7HY7c5SCkJfns=} engines: {node: '>= 10.13.0'} peerDependencies: + '@minify-html/node': '*' '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' uglify-js: '*' webpack: ^5.1.0 peerDependenciesMeta: + '@minify-html/node': + optional: true '@swc/core': optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true esbuild: optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true uglify-js: optional: true @@ -16914,8 +17048,8 @@ packages: engines: {node: '>=10'} hasBin: true - terser@5.39.2: - resolution: {integrity: sha1-WhYmAwckpnLi5bXJzZBwMIwg6Pk=} + terser@5.49.0: + resolution: {integrity: sha1-MLNB/fcM/JhIaWUSWuZg/ahANnA=} engines: {node: '>=10'} hasBin: true @@ -17265,6 +17399,9 @@ packages: typed-query-selector@2.12.0: resolution: {integrity: sha1-krZdvApCZV/M9K6xoIsd3c6K9fI=} + typed-query-selector@2.12.2: + resolution: {integrity: sha1-ZeJGKsawrs+uG/rBpPMCcHDbq6o=} + typed-rest-client@1.8.11: resolution: {integrity: sha1-aQbwLjyR6NhRV58lWr8P1ggAoE0=} @@ -17330,8 +17467,8 @@ packages: undici-types@7.24.4: resolution: {integrity: sha1-ZC2sDLZaKuOJ+MIo/aknMIxlVDs=} - undici-types@7.24.6: - resolution: {integrity: sha1-YSdbSF1/1OnSacfPBOwoc8nMD5E=} + undici-types@8.3.0: + resolution: {integrity: sha1-ROn8nzJEZIzeo15Pm7LWgelBCAk=} undici@6.27.0: resolution: {integrity: sha1-Qfnkj3xaQNJzdsqurYyan8e8qcQ=} @@ -17611,8 +17748,8 @@ packages: walker@1.0.8: resolution: {integrity: sha1-vUmNtHev5XPcBBhfAR06uKjXZT8=} - watchpack@2.5.1: - resolution: {integrity: sha1-3Ti2AfZp4Mv1Z8uALnXOrYLN4QI=} + watchpack@2.5.2: + resolution: {integrity: sha1-4S6C2EZ0Jm/Bxtv+OIkbkv8FIuw=} engines: {node: '>=10.13.0'} wbuf@1.7.3: @@ -17682,8 +17819,8 @@ packages: resolution: {integrity: sha1-o61ddzJB6caCgDq/Yo1M1iuKQXc=} engines: {node: '>=10.0.0'} - webpack-sources@3.3.3: - resolution: {integrity: sha1-1L9/mQlnXXoHD/FNDvKk88mCxyM=} + webpack-sources@3.5.1: + resolution: {integrity: sha1-dsJBhIbcwCsqoGlMEEF2woWP6Eo=} engines: {node: '>=10.13.0'} webpack@5.105.0: @@ -18029,6 +18166,11 @@ packages: peerDependencies: zod: ^3.25 || ^4 + zod-to-json-schema@3.25.2: + resolution: {integrity: sha1-P6eZp7rdVUVBRy+2WEP9xGCy5ao=} + peerDependencies: + zod: ^3.25.28 || ^4 + zod@3.23.8: resolution: {integrity: sha1-43uVe11SB5dp+4CXCZtZLw70Bn0=} @@ -19109,7 +19251,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.7 '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.2 + browserslist: 4.28.5 lru-cache: 5.1.1 semver: 6.3.1 @@ -19133,6 +19275,8 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.29.7': {} + '@babel/helper-string-parser@7.29.7': {} '@babel/helper-validator-identifier@7.27.1': {} @@ -19153,87 +19297,87 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.29.7)': + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.7)': dependencies: @@ -19244,6 +19388,8 @@ snapshots: dependencies: regenerator-runtime: 0.14.0 + '@babel/runtime@7.29.7': {} + '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 @@ -19619,9 +19765,9 @@ snapshots: dependencies: electron: 40.8.5(supports-color@8.1.1) - '@electron-toolkit/tsconfig@1.0.1(@types/node@22.19.21)': + '@electron-toolkit/tsconfig@1.0.1(@types/node@22.20.1)': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@electron/asar@3.4.1': dependencies: @@ -19678,25 +19824,18 @@ snapshots: fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 - plist: 3.1.0 + plist: 3.1.1 transitivePeerDependencies: - supports-color - '@electron/rebuild@4.0.3': + '@electron/rebuild@4.2.0': dependencies: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3(supports-color@8.1.1) - detect-libc: 2.1.2 - got: 11.8.6 - graceful-fs: 4.2.11 - node-abi: 4.24.0 + node-abi: 4.33.0 node-api-version: 0.2.1 - node-gyp: 12.3.0 - ora: 5.4.1 + node-gyp: 12.4.0 read-binary-file-arch: 1.0.6 - semver: 7.8.4 - tar: 7.5.16 - yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -19706,9 +19845,9 @@ snapshots: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3(supports-color@8.1.1) dir-compare: 4.2.0 - fs-extra: 11.3.4 + fs-extra: 11.3.6 minimatch: 9.0.9 - plist: 3.1.0 + plist: 3.1.1 transitivePeerDependencies: - supports-color @@ -19716,7 +19855,7 @@ snapshots: dependencies: cross-dirname: 0.1.0 debug: 4.4.3(supports-color@8.1.1) - fs-extra: 11.3.4 + fs-extra: 11.3.6 minimist: 1.2.8 postject: 1.0.0-alpha.6 transitivePeerDependencies: @@ -20166,48 +20305,48 @@ snapshots: '@fontsource/lato@5.2.5': {} - '@github/copilot-darwin-arm64@1.0.70': + '@github/copilot-darwin-arm64@1.0.69': optional: true - '@github/copilot-darwin-x64@1.0.70': + '@github/copilot-darwin-x64@1.0.69': optional: true - '@github/copilot-linux-arm64@1.0.70': + '@github/copilot-linux-arm64@1.0.69': optional: true - '@github/copilot-linux-x64@1.0.70': + '@github/copilot-linux-x64@1.0.69': optional: true - '@github/copilot-linuxmusl-arm64@1.0.70': + '@github/copilot-linuxmusl-arm64@1.0.69': optional: true - '@github/copilot-linuxmusl-x64@1.0.70': + '@github/copilot-linuxmusl-x64@1.0.69': optional: true '@github/copilot-sdk@1.0.5': dependencies: - '@github/copilot': 1.0.70 + '@github/copilot': 1.0.69 vscode-jsonrpc: 8.2.1 zod: 4.3.6 - '@github/copilot-win32-arm64@1.0.70': + '@github/copilot-win32-arm64@1.0.69': optional: true - '@github/copilot-win32-x64@1.0.70': + '@github/copilot-win32-x64@1.0.69': optional: true - '@github/copilot@1.0.70': + '@github/copilot@1.0.69': dependencies: detect-libc: 2.1.2 optionalDependencies: - '@github/copilot-darwin-arm64': 1.0.70 - '@github/copilot-darwin-x64': 1.0.70 - '@github/copilot-linux-arm64': 1.0.70 - '@github/copilot-linux-x64': 1.0.70 - '@github/copilot-linuxmusl-arm64': 1.0.70 - '@github/copilot-linuxmusl-x64': 1.0.70 - '@github/copilot-win32-arm64': 1.0.70 - '@github/copilot-win32-x64': 1.0.70 + '@github/copilot-darwin-arm64': 1.0.69 + '@github/copilot-darwin-x64': 1.0.69 + '@github/copilot-linux-arm64': 1.0.69 + '@github/copilot-linux-x64': 1.0.69 + '@github/copilot-linuxmusl-arm64': 1.0.69 + '@github/copilot-linuxmusl-x64': 1.0.69 + '@github/copilot-win32-arm64': 1.0.69 + '@github/copilot-win32-x64': 1.0.69 '@hapi/bourne@3.0.0': {} @@ -20215,7 +20354,12 @@ snapshots: dependencies: hono: 4.12.25 - '@huggingface/jinja@0.5.9': {} + '@hono/node-server@1.19.14(hono@4.12.29)': + dependencies: + hono: 4.12.29 + + '@huggingface/jinja@0.5.9': + optional: true '@huggingface/transformers@3.8.1': dependencies: @@ -20223,6 +20367,7 @@ snapshots: onnxruntime-node: 1.21.0 onnxruntime-web: 1.22.0-dev.20250409-89f8206ba4 sharp: 0.34.5 + optional: true '@humanfs/core@0.19.2': dependencies: @@ -20248,7 +20393,8 @@ snapshots: '@iconify/types': 2.0.0 import-meta-resolve: 4.2.0 - '@img/colour@1.1.0': {} + '@img/colour@1.1.0': + optional: true '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: @@ -20565,30 +20711,32 @@ snapshots: '@istanbuljs/schema@0.1.3': {} + '@istanbuljs/schema@0.1.6': {} + '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5))': + '@jest/core@29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0(supports-color@8.1.1) '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -20616,14 +20764,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -20651,14 +20799,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -20679,21 +20827,21 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0(supports-color@8.1.1) '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -20718,7 +20866,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -20736,7 +20884,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.19.21 + '@types/node': 22.20.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -20758,13 +20906,13 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 22.19.21 + '@types/node': 22.20.1 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1(supports-color@8.1.1) @@ -20781,7 +20929,7 @@ snapshots: '@jest/schemas@29.6.3': dependencies: - '@sinclair/typebox': 0.27.8 + '@sinclair/typebox': 0.27.10 '@jest/source-map@29.6.3': dependencies: @@ -20827,9 +20975,9 @@ snapshots: dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.3 - '@types/node': 22.19.21 - '@types/yargs': 17.0.29 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.20.1 + '@types/yargs': 17.0.35 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': @@ -20844,12 +20992,12 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/source-map@0.3.5': + '@jridgewell/source-map@0.3.11': dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/source-map@0.3.6': + '@jridgewell/source-map@0.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -20872,7 +21020,7 @@ snapshots: dependencies: badgen: 3.3.2 colors: 1.4.0 - fs-extra: 11.3.4 + fs-extra: 11.3.6 '@jscpd/core@4.2.5': dependencies: @@ -20887,14 +21035,14 @@ snapshots: cli-table3: 0.6.5 colors: 1.4.0 fast-glob: 3.3.3 - fs-extra: 11.3.4 + fs-extra: 11.3.6 markdown-table: 2.0.0 pug: 3.0.4 '@jscpd/html-reporter@4.2.5': dependencies: colors: 1.4.0 - fs-extra: 11.3.4 + fs-extra: 11.3.6 pug: 3.0.4 '@jscpd/tokenizer@4.2.5': @@ -21536,67 +21684,67 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(zod@3.25.76)': dependencies: - '@hono/node-server': 1.19.14(hono@4.12.25) + '@hono/node-server': 1.19.14(hono@4.12.29) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 - cors: 2.8.5 + cors: 2.8.6 cross-spawn: 7.0.6 eventsource: 3.0.7 - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.0 express: 5.2.1(supports-color@8.1.1) - express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.25 - jose: 6.1.3 + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.29 + jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - supports-color '@modelcontextprotocol/sdk@1.29.0(zod@4.1.13)': dependencies: - '@hono/node-server': 1.19.14(hono@4.12.25) + '@hono/node-server': 1.19.14(hono@4.12.29) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 - cors: 2.8.5 + cors: 2.8.6 cross-spawn: 7.0.6 eventsource: 3.0.7 - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.0 express: 5.2.1(supports-color@8.1.1) - express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.25 - jose: 6.1.3 + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.29 + jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 zod: 4.1.13 - zod-to-json-schema: 3.25.1(zod@4.1.13) + zod-to-json-schema: 3.25.2(zod@4.1.13) transitivePeerDependencies: - supports-color '@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.14(hono@4.12.25) + '@hono/node-server': 1.19.14(hono@4.12.29) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 - cors: 2.8.5 + cors: 2.8.6 cross-spawn: 7.0.6 eventsource: 3.0.7 - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.0 express: 5.2.1(supports-color@8.1.1) - express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.25 - jose: 6.1.3 + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.29 + jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 zod: 4.3.6 - zod-to-json-schema: 3.25.1(zod@4.3.6) + zod-to-json-schema: 3.25.2(zod@4.3.6) transitivePeerDependencies: - supports-color @@ -22076,25 +22224,34 @@ snapshots: '@popperjs/core@2.11.8': {} - '@protobufjs/aspromise@1.1.2': {} + '@protobufjs/aspromise@1.1.2': + optional: true - '@protobufjs/base64@1.1.2': {} + '@protobufjs/base64@1.1.2': + optional: true - '@protobufjs/codegen@2.0.5': {} + '@protobufjs/codegen@2.0.5': + optional: true - '@protobufjs/eventemitter@1.1.1': {} + '@protobufjs/eventemitter@1.1.1': + optional: true '@protobufjs/fetch@1.1.1': dependencies: '@protobufjs/aspromise': 1.1.2 + optional: true - '@protobufjs/float@1.0.2': {} + '@protobufjs/float@1.0.2': + optional: true - '@protobufjs/path@1.1.2': {} + '@protobufjs/path@1.1.2': + optional: true - '@protobufjs/pool@1.1.0': {} + '@protobufjs/pool@1.1.0': + optional: true - '@protobufjs/utf8@1.1.1': {} + '@protobufjs/utf8@1.1.1': + optional: true '@puppeteer/browsers@2.13.0': dependencies: @@ -22106,6 +22263,7 @@ snapshots: tar-fs: 3.1.1 yargs: 17.7.2 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - supports-color @@ -22120,6 +22278,7 @@ snapshots: unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - supports-color @@ -22152,7 +22311,7 @@ snapshots: '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: @@ -22312,7 +22471,7 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@sinclair/typebox@0.27.8': {} + '@sinclair/typebox@0.27.10': {} '@sindresorhus/is@4.6.0': {} @@ -22720,7 +22879,7 @@ snapshots: '@ts-graphviz/ast': 2.0.7 '@ts-graphviz/common': 2.1.5 - '@tsconfig/node10@1.0.9': {} + '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -22735,7 +22894,7 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/async@3.2.24': {} @@ -22745,11 +22904,11 @@ snapshots: dependencies: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@types/babel__generator': 7.6.8 + '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.28.0 - '@types/babel__generator@7.6.8': + '@types/babel__generator@7.27.0': dependencies: '@babel/types': 7.29.7 @@ -22758,32 +22917,32 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@types/babel__traverse@7.20.6': + '@types/babel__traverse@7.28.0': dependencies: '@babel/types': 7.29.7 '@types/better-sqlite3@7.6.11': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.2.0 '@types/keyv': 3.1.4 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/responselike': 1.0.3 '@types/chai-dom@1.11.3': @@ -22814,7 +22973,7 @@ snapshots: '@types/co-body@6.1.3': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/qs': 6.15.1 '@types/command-line-args@5.2.3': {} @@ -22824,11 +22983,11 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.1 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/content-disposition@0.5.9': {} @@ -22839,11 +22998,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 4.17.25 '@types/keygrip': 1.0.6 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/cors@2.8.18': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/cytoscape-dagre@2.3.3': dependencies: @@ -22976,39 +23135,45 @@ snapshots: dependencies: '@types/ms': 0.7.33 + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@types/esrecurse@4.3.1': {} '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/express-serve-static-core@4.17.41': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -23044,26 +23209,26 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/fs-extra@8.1.5': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/geojson@7946.0.16': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.19.21 + '@types/node': 22.20.1 - '@types/graceful-fs@4.1.8': + '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/har-format@1.2.15': {} @@ -23085,7 +23250,7 @@ snapshots: '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/istanbul-lib-coverage@2.0.6': {} @@ -23093,10 +23258,18 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports@3.0.3': dependencies: '@types/istanbul-lib-report': 3.0.2 + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + '@types/jest@29.5.14': dependencies: expect: 29.7.0 @@ -23110,13 +23283,13 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 '@types/jsdom@28.0.0': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 undici-types: 7.24.4 @@ -23125,7 +23298,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/jsonpath@0.2.4': {} @@ -23135,7 +23308,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/koa-compose@3.2.9': dependencies: @@ -23150,7 +23323,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.9 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/linkify-it@5.0.0': {} @@ -23170,7 +23343,7 @@ snapshots: '@types/mailparser@3.4.6': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 iconv-lite: 0.6.3 '@types/markdown-it@14.1.2': @@ -23196,9 +23369,11 @@ snapshots: '@types/ms@0.7.33': {} + '@types/ms@2.1.0': {} + '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 form-data: 4.0.6 '@types/node@18.19.130': @@ -23217,7 +23392,7 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.19.21': + '@types/node@22.20.1': dependencies: undici-types: 6.21.0 @@ -23225,9 +23400,9 @@ snapshots: dependencies: undici-types: 7.16.0 - '@types/node@25.9.3': + '@types/node@26.1.1': dependencies: - undici-types: 7.24.6 + undici-types: 8.3.0 optional: true '@types/normalize-package-data@2.4.4': {} @@ -23236,7 +23411,7 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 xmlbuilder: 15.1.1 optional: true @@ -23265,7 +23440,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/retry@0.12.2': {} @@ -23276,16 +23451,16 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/send@1.2.1': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/serve-index@1.9.4': dependencies: @@ -23294,14 +23469,14 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/send': 0.17.6 '@types/serve-static@1.15.5': dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/sinon-chai@3.2.12': dependencies: @@ -23318,7 +23493,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/spotify-api@0.0.25': {} @@ -23332,7 +23507,7 @@ snapshots: '@types/unist@3.0.3': {} - '@types/verror@1.10.9': + '@types/verror@1.10.11': optional: true '@types/vscode@1.100.0': {} @@ -23351,25 +23526,25 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 '@types/xml2js@0.4.14': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 - '@types/yargs-parser@21.0.2': {} + '@types/yargs-parser@21.0.3': {} - '@types/yargs@17.0.29': + '@types/yargs@17.0.35': dependencies: - '@types/yargs-parser': 21.0.2 + '@types/yargs-parser': 21.0.3 '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 optional: true '@typescript-eslint/eslint-plugin@8.62.1(@typescript-eslint/parser@8.62.1(eslint@10.6.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.6.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': @@ -23800,6 +23975,7 @@ snapshots: chrome-launcher: 0.15.2 puppeteer-core: 23.11.1(supports-color@8.1.1) transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil - supports-color @@ -23833,7 +24009,7 @@ snapshots: dependency-graph: 0.11.0 globby: 11.1.0 internal-ip: 6.2.0 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.1.6 log-update: 4.0.0 @@ -23841,7 +24017,7 @@ snapshots: nanoid: 3.3.15 open: 8.4.2 picomatch: 2.3.2 - source-map: 0.7.4 + source-map: 0.7.6 transitivePeerDependencies: - bufferutil - supports-color @@ -23850,7 +24026,7 @@ snapshots: '@web/test-runner-coverage-v8@0.8.0': dependencies: '@web/test-runner-core': 0.13.4 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 lru-cache: 8.0.5 picomatch: 2.3.2 v8-to-istanbul: 9.1.3 @@ -23896,6 +24072,7 @@ snapshots: portfinder: 1.0.38 source-map: 0.7.4 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil - supports-color @@ -23979,25 +24156,24 @@ snapshots: '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.105.0)': dependencies: - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.105.0)': dependencies: - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.5)(webpack@5.105.0)': dependencies: - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) optionalDependencies: webpack-dev-server: 5.2.5(debug@4.4.1)(supports-color@8.1.1)(tslib@2.8.1)(webpack-cli@5.1.4)(webpack@5.105.0) '@xmldom/xmldom@0.8.13': {} - '@xmldom/xmldom@0.9.10': - optional: true + '@xmldom/xmldom@0.9.10': {} '@xtuc/ieee754@1.2.0': {} @@ -24032,7 +24208,7 @@ snapshots: acorn-globals@7.0.1: dependencies: acorn: 8.17.0 - acorn-walk: 8.3.0 + acorn-walk: 8.3.5 acorn-import-phases@1.0.4(acorn@8.17.0): dependencies: @@ -24042,7 +24218,9 @@ snapshots: dependencies: acorn: 8.17.0 - acorn-walk@8.3.0: {} + acorn-walk@8.3.5: + dependencies: + acorn: 8.17.0 acorn@7.4.1: {} @@ -24083,11 +24261,6 @@ snapshots: dependencies: ajv: 6.15.0 - ajv-keywords@5.1.0(ajv@8.18.0): - dependencies: - ajv: 8.18.0 - fast-deep-equal: 3.1.3 - ajv-keywords@5.1.0(ajv@8.20.0): dependencies: ajv: 8.20.0 @@ -24110,7 +24283,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.2 + fast-uri: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -24177,7 +24350,7 @@ snapshots: '@electron/get': 3.1.0 '@electron/notarize': 2.5.0 '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.3 + '@electron/rebuild': 4.2.0 '@electron/universal': 2.0.3 '@malept/flatpak-bundler': 0.4.0 '@types/fs-extra': 9.0.13 @@ -24188,14 +24361,14 @@ snapshots: ci-info: 4.3.1 debug: 4.4.3(supports-color@8.1.1) dmg-builder: 26.8.1(electron-builder-squirrel-windows@26.8.1) - dotenv: 16.5.0 + dotenv: 16.6.1 dotenv-expand: 11.0.7 ejs: 3.1.10 electron-builder-squirrel-windows: 26.8.1(dmg-builder@26.8.1)(supports-color@8.1.1) electron-publish: 26.8.1 fs-extra: 10.1.0 hosted-git-info: 4.1.0 - isbinaryfile: 5.0.0 + isbinaryfile: 5.0.7 jiti: 2.7.0 js-yaml: 4.3.0 json5: 2.2.3 @@ -24205,7 +24378,7 @@ snapshots: proper-lockfile: 4.1.2 resedit: 1.7.2 semver: 7.7.4 - tar: 7.5.16 + tar: 7.5.19 temp-file: 3.4.0 tiny-async-pool: 1.3.0 which: 5.0.0 @@ -24369,9 +24542,9 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: @@ -24382,7 +24555,7 @@ snapshots: '@babel/template': 7.29.7 '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.28.0 babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.7): dependencies: @@ -24391,7 +24564,7 @@ snapshots: '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) @@ -24424,11 +24597,16 @@ snapshots: bare-events@2.5.4: optional: true + bare-events@2.9.1: + optional: true + bare-fs@4.1.5: dependencies: - bare-events: 2.5.4 + bare-events: 2.9.1 bare-path: 3.0.0 - bare-stream: 2.6.5(bare-events@2.5.4) + bare-stream: 2.6.5(bare-events@2.9.1) + transitivePeerDependencies: + - bare-abort-controller optional: true bare-os@3.6.1: @@ -24439,16 +24617,16 @@ snapshots: bare-os: 3.6.1 optional: true - bare-stream@2.6.5(bare-events@2.5.4): + bare-stream@2.6.5(bare-events@2.9.1): dependencies: streamx: 2.22.0 optionalDependencies: - bare-events: 2.5.4 + bare-events: 2.9.1 optional: true base64-js@1.5.1: {} - baseline-browser-mapping@2.10.37: {} + baseline-browser-mapping@2.10.42: {} basic-ftp@5.3.0: {} @@ -24545,7 +24723,8 @@ snapshots: boolbase@1.0.0: {} - boolean@3.2.0: {} + boolean@3.2.0: + optional: true bootstrap@5.3.6(@popperjs/core@2.11.8): dependencies: @@ -24574,13 +24753,13 @@ snapshots: browser-stdout@1.3.1: {} - browserslist@4.28.2: + browserslist@4.28.5: dependencies: - baseline-browser-mapping: 2.10.37 - caniuse-lite: 1.0.30001799 - electron-to-chromium: 1.5.375 - node-releases: 2.0.47 - update-browserslist-db: 1.2.3(browserslist@4.28.2) + baseline-browser-mapping: 2.10.42 + caniuse-lite: 1.0.30001803 + electron-to-chromium: 1.5.389 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.5) bs-logger@0.2.6: dependencies: @@ -24618,21 +24797,21 @@ snapshots: builder-util-runtime@9.3.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) - sax: 1.3.0 + sax: 1.6.0 transitivePeerDependencies: - supports-color builder-util-runtime@9.5.1: dependencies: debug: 4.4.3(supports-color@8.1.1) - sax: 1.3.0 + sax: 1.6.0 transitivePeerDependencies: - supports-color builder-util@26.8.1: dependencies: 7zip-bin: 5.2.0 - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 app-builder-bin: 5.0.0-alpha.12 builder-util-runtime: 9.5.1 chalk: 4.1.2 @@ -24642,7 +24821,7 @@ snapshots: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 js-yaml: 4.3.0 - sanitize-filename: 1.6.3 + sanitize-filename: 1.6.4 source-map-support: 0.5.21 stat-mode: 1.0.0 temp-file: 3.4.0 @@ -24723,7 +24902,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001799: {} + caniuse-lite@1.0.30001803: {} caseless@0.12.0: {} @@ -24817,14 +24996,14 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 transitivePeerDependencies: - supports-color - chrome-trace-event@1.0.3: {} + chrome-trace-event@1.0.4: {} chromium-bidi@0.11.0(devtools-protocol@0.0.1367902): dependencies: @@ -25117,7 +25296,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 7.0.5 - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) copyfiles@2.4.1: dependencies: @@ -25139,6 +25318,11 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cose-base@1.0.3: dependencies: layout-base: 1.0.2 @@ -25211,28 +25395,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-jest@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -25241,13 +25410,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)): + create-jest@29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -25810,11 +25979,11 @@ snapshots: dmg-license@1.0.11: dependencies: '@types/plist': 3.0.5 - '@types/verror': 1.10.9 + '@types/verror': 1.10.11 ajv: 6.15.0 crc: 3.8.0 iconv-corefoundation: 1.1.7 - plist: 3.1.0 + plist: 3.1.1 smart-buffer: 4.2.0 verror: 1.10.1 optional: true @@ -25884,10 +26053,12 @@ snapshots: dotenv-expand@11.0.7: dependencies: - dotenv: 16.5.0 + dotenv: 16.6.1 dotenv@16.5.0: {} + dotenv@16.6.1: {} + dotenv@17.4.2: {} dunder-proto@1.0.1: @@ -25948,7 +26119,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron-to-chromium@1.5.375: {} + electron-to-chromium@1.5.389: {} electron-updater@6.6.2(supports-color@8.1.1): dependencies: @@ -25963,7 +26134,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron-vite@4.0.1(vite@6.4.3(@types/node@22.19.21)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.9.0)): + electron-vite@4.0.1(vite@6.4.3(@types/node@22.20.1)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.7) @@ -25971,7 +26142,7 @@ snapshots: esbuild: 0.25.12 magic-string: 0.30.17 picocolors: 1.1.1 - vite: 6.4.3(@types/node@22.19.21)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.9.0) + vite: 6.4.3(@types/node@22.20.1)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -26039,7 +26210,7 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.3 - enhanced-resolve@5.24.1: + enhanced-resolve@5.24.2: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -26134,7 +26305,7 @@ snapshots: es-module-lexer@1.7.0: {} - es-module-lexer@2.0.0: {} + es-module-lexer@2.3.0: {} es-object-atoms@1.1.1: dependencies: @@ -26159,7 +26330,8 @@ snapshots: es-toolkit@1.46.1: {} - es6-error@4.1.1: {} + es6-error@4.1.1: + optional: true esbuild@0.21.5: optionalDependencies: @@ -26336,7 +26508,7 @@ snapshots: eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -26466,9 +26638,11 @@ snapshots: eventsource-parser@3.0.6: {} + eventsource-parser@3.1.0: {} + eventsource@3.0.7: dependencies: - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.0 execa@1.0.0: dependencies: @@ -26531,6 +26705,11 @@ snapshots: express: 5.2.1(supports-color@8.1.1) ip-address: 10.1.0 + express-rate-limit@8.5.2(express@5.2.1): + dependencies: + express: 5.2.1(supports-color@8.1.1) + ip-address: 10.2.0 + express@4.22.1: dependencies: accepts: 1.3.8 @@ -26681,6 +26860,8 @@ snapshots: fast-uri@3.1.2: {} + fast-uri@3.1.3: {} + fast-xml-builder@1.2.0: dependencies: path-expression-matcher: 1.5.0 @@ -26742,7 +26923,7 @@ snapshots: dependencies: app-module-path: 2.2.0 commander: 12.1.0 - enhanced-resolve: 5.24.1 + enhanced-resolve: 5.24.2 module-definition: 6.0.2 module-lookup-amd: 9.1.3 resolve: 1.22.12 @@ -26816,7 +26997,8 @@ snapshots: flatbuffers@24.3.25: {} - flatbuffers@25.9.23: {} + flatbuffers@25.9.23: + optional: true flatted@3.4.2: {} @@ -26873,7 +27055,7 @@ snapshots: fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs-extra@11.3.0: @@ -26888,6 +27070,12 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 + fs-extra@11.3.6: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -26904,7 +27092,7 @@ snapshots: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs.realpath@1.0.0: {} @@ -26963,6 +27151,8 @@ snapshots: get-east-asian-width@1.3.0: {} + get-east-asian-width@1.6.0: {} + get-folder-size@5.0.0: {} get-intrinsic@1.3.0: @@ -27091,6 +27281,7 @@ snapshots: roarr: 2.15.4 semver: 7.8.4 serialize-error: 7.0.1 + optional: true globals@17.7.0: {} @@ -27275,7 +27466,8 @@ snapshots: - encoding - supports-color - guid-typescript@1.0.9: {} + guid-typescript@1.0.9: + optional: true hachure-fill@0.5.2: {} @@ -27322,6 +27514,8 @@ snapshots: hono@4.12.25: {} + hono@4.12.29: {} + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 @@ -27381,7 +27575,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) htmlparser2@10.0.0: dependencies: @@ -27715,9 +27909,9 @@ snapshots: is-fullwidth-code-point@4.0.0: {} - is-fullwidth-code-point@5.0.0: + is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.3.0 + get-east-asian-width: 1.6.0 is-generator-fn@2.1.0: {} @@ -27865,9 +28059,11 @@ snapshots: isbinaryfile@5.0.0: {} + isbinaryfile@5.0.7: {} + isexe@2.0.0: {} - isexe@3.1.1: {} + isexe@3.1.5: {} isexe@4.0.0: {} @@ -27881,12 +28077,14 @@ snapshots: istanbul-lib-coverage@3.2.0: {} + istanbul-lib-coverage@3.2.2: {} + istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.29.7 '@babel/parser': 7.29.7 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + '@istanbuljs/schema': 0.1.6 + istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -27895,22 +28093,22 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/parser': 7.29.7 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + '@istanbuljs/schema': 0.1.6 + istanbul-lib-coverage: 3.2.2 semver: 7.8.4 transitivePeerDependencies: - supports-color istanbul-lib-report@3.0.1: dependencies: - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 istanbul-lib-source-maps@4.0.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color @@ -27959,7 +28157,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.0 @@ -28017,35 +28215,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): - dependencies: - '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-cli@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -28055,16 +28234,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)): + jest-cli@29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + create-jest: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + jest-config: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -28136,7 +28315,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 @@ -28161,44 +28340,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.19.19 - ts-node: 10.9.2(@types/node@22.19.21)(typescript@5.4.5) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5)): - dependencies: - '@babel/core': 7.29.7 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.7) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 ts-node: 10.9.2(@types/node@22.15.18)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 @@ -28223,13 +28371,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 ts-node: 10.9.2(@types/node@22.19.19)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 @@ -28254,13 +28402,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.19.21 - ts-node: 10.9.2(@types/node@22.19.21)(typescript@5.4.5) + '@types/node': 22.20.1 + ts-node: 10.9.2(@types/node@22.20.1)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 @@ -28285,13 +28433,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.19.21 - ts-node: 10.9.2(@types/node@25.9.3)(typescript@5.4.5) + '@types/node': 22.20.1 + ts-node: 10.9.2(@types/node@26.1.1)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)): + jest-config@29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 @@ -28316,8 +28464,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 25.9.3 - ts-node: 10.9.2(@types/node@25.9.3)(typescript@5.4.5) + '@types/node': 26.1.1 + ts-node: 10.9.2(@types/node@26.1.1)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -28347,7 +28495,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.19.21 + '@types/node': 22.20.1 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3(supports-color@8.1.1) @@ -28361,7 +28509,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -28370,8 +28518,8 @@ snapshots: jest-haste-map@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.8 - '@types/node': 22.19.21 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.20.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -28410,7 +28558,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -28445,7 +28593,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -28473,7 +28621,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -28519,7 +28667,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -28538,7 +28686,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.19.21 + '@types/node': 22.20.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -28547,13 +28695,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -28570,18 +28718,6 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@22.19.19)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): - dependencies: - '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5)) @@ -28594,24 +28730,24 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)): + jest@29.7.0(@types/node@22.20.1)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)): + jest@29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + jest-cli: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -28626,6 +28762,8 @@ snapshots: jose@6.1.3: {} + jose@6.2.3: {} + js-stringify@1.0.2: {} js-tokens@4.0.0: {} @@ -28644,7 +28782,7 @@ snapshots: jscpd-sarif-reporter@4.2.5: dependencies: colors: 1.4.0 - fs-extra: 11.3.4 + fs-extra: 11.3.6 node-sarif-builder: 4.1.0 jscpd@4.2.5: @@ -28735,7 +28873,7 @@ snapshots: json-schema-to-ts@3.1.1: dependencies: - '@babel/runtime': 7.27.0 + '@babel/runtime': 7.29.7 ts-algebra: 2.0.0 json-schema-traverse@0.4.1: {} @@ -28746,7 +28884,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-safe@5.0.1: {} + json-stringify-safe@5.0.1: + optional: true json5@2.2.3: {} @@ -28768,6 +28907,12 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonpath@1.3.0: dependencies: esprima: 1.2.5 @@ -28962,7 +29107,7 @@ snapshots: image-size: 0.5.5 make-dir: 2.1.0 mime: 1.6.0 - needle: 3.3.1 + needle: 3.5.0 source-map: 0.6.1 leven@3.1.0: {} @@ -29012,7 +29157,7 @@ snapshots: dependencies: is-relative-url: 4.1.0 ms: 2.1.3 - needle: 3.3.1 + needle: 3.5.0 node-email-verifier: 3.4.1 proxy-agent: 6.5.0 transitivePeerDependencies: @@ -29042,7 +29187,7 @@ snapshots: lit-element: 4.2.2 lit-html: 3.3.2 - loader-runner@4.3.1: {} + loader-runner@4.3.2: {} locate-path@5.0.0: dependencies: @@ -29117,7 +29262,8 @@ snapshots: long@4.0.0: {} - long@5.3.2: {} + long@5.3.2: + optional: true longest-streak@3.1.0: {} @@ -29265,6 +29411,7 @@ snapshots: matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 + optional: true math-intrinsics@1.1.0: {} @@ -29638,7 +29785,7 @@ snapshots: micromark@4.0.2(supports-color@8.1.1): dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@8.1.1) decode-named-character-reference: 1.1.0 devlop: 1.1.0 @@ -29876,6 +30023,11 @@ snapshots: iconv-lite: 0.6.3 sax: 1.3.0 + needle@3.5.0: + dependencies: + iconv-lite: 0.6.3 + sax: 1.6.0 + negotiator@0.6.3: {} negotiator@0.6.4: {} @@ -29897,7 +30049,7 @@ snapshots: dependencies: semver: 7.8.4 - node-abi@4.24.0: + node-abi@4.33.0: dependencies: semver: 7.8.4 @@ -29932,7 +30084,7 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-gyp@12.3.0: + node-gyp@12.4.0: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 @@ -29940,7 +30092,7 @@ snapshots: nopt: 9.0.0 proc-log: 6.1.0 semver: 7.8.4 - tar: 7.5.16 + tar: 7.5.19 tinyglobby: 0.2.17 undici: 6.27.0 which: 6.0.1 @@ -29951,7 +30103,7 @@ snapshots: dependencies: node-addon-api: 7.1.1 - node-releases@2.0.47: {} + node-releases@2.0.51: {} node-rsa@1.1.1: dependencies: @@ -29965,7 +30117,7 @@ snapshots: node-sarif-builder@4.1.0: dependencies: '@types/sarif': 2.1.7 - fs-extra: 11.3.4 + fs-extra: 11.3.6 node-source-walk@7.0.2: dependencies: @@ -30049,15 +30201,18 @@ snapshots: only@0.0.2: {} - onnxruntime-common@1.21.0: {} + onnxruntime-common@1.21.0: + optional: true - onnxruntime-common@1.22.0-dev.20250409-89f8206ba4: {} + onnxruntime-common@1.22.0-dev.20250409-89f8206ba4: + optional: true onnxruntime-node@1.21.0: dependencies: global-agent: 3.0.0 onnxruntime-common: 1.21.0 tar: 7.5.16 + optional: true onnxruntime-web@1.22.0-dev.20250409-89f8206ba4: dependencies: @@ -30067,6 +30222,7 @@ snapshots: onnxruntime-common: 1.22.0-dev.20250409-89f8206ba4 platform: 1.3.6 protobufjs: 7.6.4 + optional: true open@10.1.0: dependencies: @@ -30444,7 +30600,8 @@ snapshots: pvutils: 1.1.5 tslib: 2.8.1 - platform@1.3.6: {} + platform@1.3.6: + optional: true play-sound@1.1.6: dependencies: @@ -30464,6 +30621,12 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 + plist@3.1.1: + dependencies: + '@xmldom/xmldom': 0.9.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + pluralize@2.0.0: {} pluralize@8.0.0: {} @@ -30689,8 +30852,9 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 - '@types/node': 22.19.21 + '@types/node': 22.20.1 long: 5.3.2 + optional: true protocol-buffers-schema@3.6.1: {} @@ -30808,9 +30972,10 @@ snapshots: chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) debug: 4.4.3(supports-color@8.1.1) devtools-protocol: 0.0.1367902 - typed-query-selector: 2.12.0 + typed-query-selector: 2.12.2 ws: 8.21.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil - supports-color @@ -30822,10 +30987,11 @@ snapshots: chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) debug: 4.4.3(supports-color@8.1.1) devtools-protocol: 0.0.1566079 - typed-query-selector: 2.12.0 + typed-query-selector: 2.12.2 webdriver-bidi-protocol: 0.4.1 ws: 8.21.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil - supports-color @@ -30912,7 +31078,7 @@ snapshots: puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6(puppeteer-core@24.37.5)(puppeteer@24.37.5(typescript@5.4.5))(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@8.1.1) merge-deep: 3.0.3 optionalDependencies: @@ -30922,7 +31088,7 @@ snapshots: puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6(puppeteer-core@24.37.5)(puppeteer@24.37.5(typescript@5.4.5))): dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@8.1.1) merge-deep: 3.0.3 optionalDependencies: @@ -30932,7 +31098,7 @@ snapshots: puppeteer-extra@3.3.6(puppeteer-core@24.37.5)(puppeteer@24.37.5(typescript@5.4.5))(supports-color@8.1.1): dependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@8.1.1) deepmerge: 4.3.1 optionalDependencies: @@ -30950,6 +31116,7 @@ snapshots: puppeteer-core: 24.37.5 typed-query-selector: 2.12.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil - supports-color @@ -31317,6 +31484,7 @@ snapshots: json-stringify-safe: 5.0.1 semver-compare: 1.0.0 sprintf-js: 1.1.3 + optional: true robust-predicates@3.0.2: {} @@ -31421,13 +31589,19 @@ snapshots: dependencies: truncate-utf8-bytes: 1.0.2 + sanitize-filename@1.6.4: + dependencies: + truncate-utf8-bytes: 1.0.2 + sass-lookup@6.1.2: dependencies: commander: 12.1.0 - enhanced-resolve: 5.24.1 + enhanced-resolve: 5.24.2 sax@1.3.0: {} + sax@1.6.0: {} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -31441,7 +31615,7 @@ snapshots: '@types/json-schema': 7.0.15 ajv: 8.20.0 ajv-formats: 2.1.1(ajv@8.20.0) - ajv-keywords: 5.1.0(ajv@8.18.0) + ajv-keywords: 5.1.0(ajv@8.20.0) schema-utils@4.3.3: dependencies: @@ -31483,7 +31657,8 @@ snapshots: semaphore@1.1.0: {} - semver-compare@1.0.0: {} + semver-compare@1.0.0: + optional: true semver@5.7.2: {} @@ -31578,6 +31753,7 @@ snapshots: serialize-error@7.0.1: dependencies: type-fest: 0.13.1 + optional: true serialize-javascript@7.0.5: {} @@ -31715,6 +31891,7 @@ snapshots: '@img/sharp-win32-arm64': 0.34.5 '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 + optional: true shebang-command@1.2.0: dependencies: @@ -31834,7 +32011,7 @@ snapshots: slice-ansi@7.1.0: dependencies: ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.0.0 + is-fullwidth-code-point: 5.1.0 smart-buffer@4.2.0: {} @@ -31896,6 +32073,8 @@ snapshots: source-map@0.7.4: {} + source-map@0.7.6: {} + spark-md5@3.0.2: {} sparse-bitfield@3.0.3: @@ -31943,7 +32122,8 @@ snapshots: sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} + sprintf-js@1.1.3: + optional: true stack-utils@2.0.6: dependencies: @@ -32160,6 +32340,7 @@ snapshots: bare-fs: 4.1.5 bare-path: 3.0.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer tar-stream@2.2.0: @@ -32183,6 +32364,15 @@ snapshots: minipass: 7.1.3 minizlib: 3.1.0 yallist: 5.0.0 + optional: true + + tar@7.5.19: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 temp-file@3.4.0: dependencies: @@ -32199,25 +32389,36 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.16(esbuild@0.28.1)(webpack@5.105.0(esbuild@0.28.1)): + terser-webpack-plugin@5.6.1(esbuild@0.28.1)(postcss@8.5.16)(webpack@5.105.0(esbuild@0.28.1)(postcss@8.5.16)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 7.0.5 - terser: 5.39.2 - webpack: 5.105.0(esbuild@0.28.1) + terser: 5.49.0 + webpack: 5.105.0(esbuild@0.28.1)(postcss@8.5.16) optionalDependencies: esbuild: 0.28.1 + postcss: 8.5.16 - terser-webpack-plugin@5.3.16(webpack@5.105.0): + terser-webpack-plugin@5.6.1(postcss@8.5.16)(webpack@5.105.0(postcss@8.5.16)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 7.0.5 - terser: 5.39.2 - webpack: 5.105.0(webpack-cli@5.1.4) + terser: 5.49.0 + webpack: 5.105.0(postcss@8.5.16) + optionalDependencies: + postcss: 8.5.16 + + terser-webpack-plugin@5.6.1(postcss@8.5.16)(webpack@5.105.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.49.0 + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) + optionalDependencies: + postcss: 8.5.16 terser@5.27.0: dependencies: @@ -32226,22 +32427,22 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - terser@5.39.2: + terser@5.49.0: dependencies: - '@jridgewell/source-map': 0.3.6 + '@jridgewell/source-map': 0.3.11 acorn: 8.17.0 commander: 2.20.3 source-map-support: 0.5.21 test-exclude@6.0.0: dependencies: - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 glob: 7.2.3 minimatch: 3.1.5 test-exclude@7.0.1: dependencies: - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 glob: 10.5.0 minimatch: 9.0.9 @@ -32419,12 +32620,12 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.29.7) esbuild: 0.28.1 - ts-jest@29.3.3(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest@29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.3.3(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest@29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@25.9.3)(ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5)) + jest: 29.7.0(@types/node@26.1.1)(ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -32439,12 +32640,12 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.29.7) - ts-jest@29.4.9(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.4.9(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.20.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.9 - jest: 29.7.0(@types/node@22.19.21)(ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5)) + jest: 29.7.0(@types/node@22.20.1)(supports-color@8.1.1)(ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -32459,7 +32660,17 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.29.7) jest-util: 29.7.0 - ts-loader@9.5.2(typescript@5.4.5)(webpack@5.105.0(esbuild@0.28.1)): + ts-loader@9.5.2(typescript@5.4.5)(webpack@5.105.0(esbuild@0.28.1)(postcss@8.5.16)): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.15.0 + micromatch: 4.0.8 + semver: 7.5.4 + source-map: 0.7.4 + typescript: 5.4.5 + webpack: 5.105.0(esbuild@0.28.1)(postcss@8.5.16) + + ts-loader@9.5.2(typescript@5.4.5)(webpack@5.105.0(postcss@8.5.16)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.15.0 @@ -32467,7 +32678,7 @@ snapshots: semver: 7.5.4 source-map: 0.7.4 typescript: 5.4.5 - webpack: 5.105.0(esbuild@0.28.1) + webpack: 5.105.0(postcss@8.5.16) ts-loader@9.5.2(typescript@5.4.5)(webpack@5.105.0): dependencies: @@ -32477,18 +32688,18 @@ snapshots: semver: 7.5.4 source-map: 0.7.4 typescript: 5.4.5 - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) ts-node@10.9.2(@types/node@22.15.18)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.15.18 acorn: 8.17.0 - acorn-walk: 8.3.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 @@ -32501,13 +32712,13 @@ snapshots: ts-node@10.9.2(@types/node@22.19.19)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.19.19 acorn: 8.17.0 - acorn-walk: 8.3.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 @@ -32517,16 +32728,16 @@ snapshots: yn: 3.1.1 optional: true - ts-node@10.9.2(@types/node@22.19.21)(typescript@5.4.5): + ts-node@10.9.2(@types/node@22.20.1)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.19.21 + '@types/node': 22.20.1 acorn: 8.17.0 - acorn-walk: 8.3.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 @@ -32535,16 +32746,16 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-node@10.9.2(@types/node@25.9.3)(typescript@5.4.5): + ts-node@10.9.2(@types/node@26.1.1)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 25.9.3 + '@types/node': 26.1.1 acorn: 8.17.0 - acorn-walk: 8.3.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 @@ -32591,7 +32802,8 @@ snapshots: type-detect@4.0.8: {} - type-fest@0.13.1: {} + type-fest@0.13.1: + optional: true type-fest@0.21.3: {} @@ -32662,6 +32874,8 @@ snapshots: typed-query-selector@2.12.0: {} + typed-query-selector@2.12.2: {} + typed-rest-client@1.8.11: dependencies: qs: 6.15.3 @@ -32729,7 +32943,7 @@ snapshots: undici-types@7.24.4: {} - undici-types@7.24.6: + undici-types@8.3.0: optional: true undici@6.27.0: {} @@ -32801,9 +33015,9 @@ snapshots: untildify@4.0.0: {} - update-browserslist-db@1.2.3(browserslist@4.28.2): + update-browserslist-db@1.2.3(browserslist@4.28.5): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.5 escalade: 3.2.0 picocolors: 1.1.1 @@ -32874,18 +33088,18 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@5.4.21(@types/node@25.9.3)(less@4.3.0)(terser@5.39.2): + vite@5.4.21(@types/node@26.1.1)(less@4.3.0)(terser@5.49.0): dependencies: esbuild: 0.21.5 postcss: 8.5.14 rollup: 4.59.0 optionalDependencies: - '@types/node': 25.9.3 + '@types/node': 26.1.1 fsevents: 2.3.3 less: 4.3.0 - terser: 5.39.2 + terser: 5.49.0 - vite@6.4.3(@types/node@22.15.18)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.8.3): + vite@6.4.3(@types/node@22.15.18)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -32898,11 +33112,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 less: 4.3.0 - terser: 5.39.2 + terser: 5.49.0 tsx: 4.21.0 yaml: 2.8.3 - vite@6.4.3(@types/node@22.19.21)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.9.0): + vite@6.4.3(@types/node@22.20.1)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -32911,15 +33125,15 @@ snapshots: rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.1 fsevents: 2.3.3 jiti: 2.7.0 less: 4.3.0 - terser: 5.39.2 + terser: 5.49.0 tsx: 4.21.0 yaml: 2.9.0 - vite@6.4.3(@types/node@25.9.3)(jiti@2.7.0)(less@4.3.0)(terser@5.39.2)(tsx@4.21.0)(yaml@2.9.0): + vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(less@4.3.0)(terser@5.49.0)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -32928,11 +33142,11 @@ snapshots: rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.9.3 + '@types/node': 26.1.1 fsevents: 2.3.3 jiti: 2.7.0 less: 4.3.0 - terser: 5.39.2 + terser: 5.49.0 tsx: 4.21.0 yaml: 2.9.0 @@ -32989,9 +33203,8 @@ snapshots: dependencies: makeerror: 1.0.12 - watchpack@2.5.1: + watchpack@2.5.2: dependencies: - glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 wbuf@1.7.3: @@ -33026,7 +33239,7 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-merge: 5.10.0 optionalDependencies: webpack-dev-server: 5.2.5(debug@4.4.1)(supports-color@8.1.1)(tslib@2.8.1)(webpack-cli@5.1.4)(webpack@5.105.0) @@ -33040,7 +33253,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) transitivePeerDependencies: - tslib @@ -33075,7 +33288,7 @@ snapshots: webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.0) ws: 8.21.0 optionalDependencies: - webpack: 5.105.0(webpack-cli@5.1.4) + webpack: 5.105.0(postcss@8.5.16)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) transitivePeerDependencies: - bufferutil @@ -33090,72 +33303,131 @@ snapshots: flat: 5.0.2 wildcard: 2.0.1 - webpack-sources@3.3.3: {} + webpack-sources@3.5.1: {} - webpack@5.105.0(esbuild@0.28.1): + webpack@5.105.0(esbuild@0.28.1)(postcss@8.5.16): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.17.0 acorn-import-phases: 1.0.4(acorn@8.17.0) - browserslist: 4.28.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.24.1 - es-module-lexer: 2.0.0 + browserslist: 4.28.5 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.24.2 + es-module-lexer: 2.3.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 + loader-runner: 4.3.2 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.3 - terser-webpack-plugin: 5.3.16(esbuild@0.28.1)(webpack@5.105.0(esbuild@0.28.1)) - watchpack: 2.5.1 - webpack-sources: 3.3.3 + terser-webpack-plugin: 5.6.1(esbuild@0.28.1)(postcss@8.5.16)(webpack@5.105.0(esbuild@0.28.1)(postcss@8.5.16)) + watchpack: 2.5.2 + webpack-sources: 3.5.1 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js - webpack@5.105.0(webpack-cli@5.1.4): + webpack@5.105.0(postcss@8.5.16): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.17.0 acorn-import-phases: 1.0.4(acorn@8.17.0) - browserslist: 4.28.2 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.24.1 - es-module-lexer: 2.0.0 + browserslist: 4.28.5 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.24.2 + es-module-lexer: 2.3.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 + loader-runner: 4.3.2 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.3 - terser-webpack-plugin: 5.3.16(webpack@5.105.0) - watchpack: 2.5.1 - webpack-sources: 3.3.3 + terser-webpack-plugin: 5.6.1(postcss@8.5.16)(webpack@5.105.0(postcss@8.5.16)) + watchpack: 2.5.2 + webpack-sources: 3.5.1 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js + + webpack@5.105.0(postcss@8.5.16)(webpack-cli@5.1.4): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.5 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.24.2 + es-module-lexer: 2.3.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.2 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.3 + terser-webpack-plugin: 5.6.1(postcss@8.5.16)(webpack@5.105.0) + watchpack: 2.5.2 + webpack-sources: 3.5.1 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.5)(webpack@5.105.0) transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js websocket-driver@0.7.5: @@ -33261,7 +33533,7 @@ snapshots: which@5.0.0: dependencies: - isexe: 3.1.1 + isexe: 3.1.5 which@6.0.1: dependencies: @@ -33343,12 +33615,12 @@ snapshots: xml2js@0.4.23: dependencies: - sax: 1.3.0 + sax: 1.6.0 xmlbuilder: 11.0.1 xml2js@0.5.0: dependencies: - sax: 1.3.0 + sax: 1.6.0 xmlbuilder: 11.0.1 xml2js@0.6.2: @@ -33476,15 +33748,23 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.5.2 - zod-to-json-schema@3.25.1(zod@3.25.76): + zod-to-json-schema@3.25.1(zod@4.1.13): + dependencies: + zod: 4.1.13 + + zod-to-json-schema@3.25.1(zod@4.3.6): + dependencies: + zod: 4.3.6 + + zod-to-json-schema@3.25.2(zod@3.25.76): dependencies: zod: 3.25.76 - zod-to-json-schema@3.25.1(zod@4.1.13): + zod-to-json-schema@3.25.2(zod@4.1.13): dependencies: zod: 4.1.13 - zod-to-json-schema@3.25.1(zod@4.3.6): + zod-to-json-schema@3.25.2(zod@4.3.6): dependencies: zod: 4.3.6 diff --git a/ts/tools/scripts/install-shell.ps1 b/ts/tools/scripts/install-shell.ps1 index 64fb0a69f1..8faf48266f 100644 --- a/ts/tools/scripts/install-shell.ps1 +++ b/ts/tools/scripts/install-shell.ps1 @@ -34,7 +34,15 @@ param( [string]$BlobBaseUrl = "", [string]$LogPath = "$env:LOCALAPPDATA\TypeAgent\logs\install-shell.log", # Do not launch the shell after install. - [switch]$NoStart + [switch]$NoStart, + # Skip the check that the TypeAgent agent-server is installed. The shipped + # shell is connect-only and auto-spawns the agent-server, so by default this + # script ensures the agent-server is present (installing it via + # install-typeagent.ps1 when missing) before installing the shell. + [switch]$SkipTypeAgentCheck, + # Extra arguments splatted to install-typeagent.ps1 when the agent-server is + # missing (e.g. @{ Provider = "copilot"; BootstrapPrereqs = $true }). + [hashtable]$TypeAgentArgs = @{} ) $ErrorActionPreference = "Stop" @@ -132,6 +140,32 @@ function Get-PackagePathFromYml { Initialize-Log -Path $LogPath +# The shipped shell is connect-only: it auto-spawns and connects to a separately +# installed TypeAgent agent-server. Ensure that server is installed first so the +# shell has something to connect to, mirroring the MSI ordering (agent service +# before shell). The agent-server install lays down typeagent-serve.mjs at its +# InstallDir root (see install-typeagent.ps1). +if (-not $SkipTypeAgentCheck) { + $agentServerMarker = Join-Path $env:LOCALAPPDATA "TypeAgent\agent-server\typeagent-serve.mjs" + if (Test-Path $agentServerMarker) { + Write-Log "Found TypeAgent agent-server at $agentServerMarker." + } else { + Write-Log "TypeAgent agent-server not found at $agentServerMarker; installing it first via install-typeagent.ps1." + $installTypeAgent = Join-Path $PSScriptRoot "install-typeagent.ps1" + if (-not (Test-Path $installTypeAgent)) { + Fail "Cannot find install-typeagent.ps1 next to install-shell.ps1 to satisfy the agent-server dependency. Re-run with -SkipTypeAgentCheck to bypass." + } + & $installTypeAgent @TypeAgentArgs + if ($LASTEXITCODE -ne 0) { + Fail "Agent-server install (install-typeagent.ps1) failed with exit code $LASTEXITCODE; aborting shell install." + } + if (-not (Test-Path $agentServerMarker)) { + Fail "install-typeagent.ps1 completed but agent-server marker still missing at $agentServerMarker." + } + Write-Log "TypeAgent agent-server installed." + } +} + if (-not $BlobBaseUrl -and -not $Storage) { Fail "Provide either -Storage (with optional -Container) or -BlobBaseUrl." } diff --git a/ts/tools/scripts/install-shell.sh b/ts/tools/scripts/install-shell.sh index f8c48e0cfb..0502d46cd2 100755 --- a/ts/tools/scripts/install-shell.sh +++ b/ts/tools/scripts/install-shell.sh @@ -83,6 +83,10 @@ function usage() { echo \ \ \ \ https://\.blob.core.windows.net/\. When set, echo \ \ \ \ the Azure CLI is not used and \ is optional. echo \ \ SHELL_CHANNEL\ \ - Fallback channel when not passed positionally. + echo \ \ SKIP_TYPEAGENT_CHECK - Set to 1 to skip ensuring the agent-server is + echo \ \ \ \ installed before the shell \(e.g. when it runs on another machine\). + echo \ \ TYPEAGENT_ARGS - Extra args passed to install-typeagent.sh when the + echo \ \ \ \ agent-server is missing and gets installed automatically. } function info() { @@ -136,6 +140,42 @@ fi CHANNEL=$CHANNEL-$ARCH +# The shipped shell is connect-only: it auto-spawns and connects to a separately +# installed TypeAgent agent-server. Ensure that server is installed first so the +# shell has something to connect to, mirroring the MSI ordering (agent service +# before shell). The agent-server install lays down typeagent-serve.mjs at its +# InstallDir root (see install-typeagent.sh). Set SKIP_TYPEAGENT_CHECK=1 to +# bypass (e.g. when the server lives on another machine reached via a tunnel). +if [[ "${SKIP_TYPEAGENT_CHECK:-}" != "1" ]]; then + if [[ "$OSTYPE" == "darwin"* ]]; then + AGENT_SERVER_DIR="$HOME/Library/Application Support/TypeAgent/agent-server" + else + AGENT_SERVER_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/typeagent/agent-server" + fi + AGENT_SERVER_MARKER="$AGENT_SERVER_DIR/typeagent-serve.mjs" + if [[ -f "$AGENT_SERVER_MARKER" ]]; then + info "Found TypeAgent agent-server at $AGENT_SERVER_MARKER." + else + info "TypeAgent agent-server not found at $AGENT_SERVER_MARKER; installing it first via install-typeagent.sh." + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + INSTALL_TYPEAGENT="$SCRIPT_DIR/install-typeagent.sh" + if [[ ! -f "$INSTALL_TYPEAGENT" ]]; then + error "Cannot find install-typeagent.sh next to install-shell.sh to satisfy the agent-server dependency. Set SKIP_TYPEAGENT_CHECK=1 to bypass." + exit 1 + fi + bash "$INSTALL_TYPEAGENT" ${TYPEAGENT_ARGS:-} + if [[ $? != 0 ]]; then + error "Agent-server install (install-typeagent.sh) failed; aborting shell install." + exit 1 + fi + if [[ ! -f "$AGENT_SERVER_MARKER" ]]; then + error "install-typeagent.sh completed but agent-server marker still missing at $AGENT_SERVER_MARKER." + exit 1 + fi + success "TypeAgent agent-server installed." + fi +fi + DEST=/tmp/install-shell cleanup mkdir -p $DEST > /dev/null 2>&1 diff --git a/ts/tools/scripts/prune-shell-deploy.mjs b/ts/tools/scripts/prune-shell-deploy.mjs new file mode 100644 index 0000000000..391efc85dd --- /dev/null +++ b/ts/tools/scripts/prune-shell-deploy.mjs @@ -0,0 +1,198 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +/** + * prune-shell-deploy - trim the shell's `pnpm deploy` output before packaging. + * + * Run after `pnpm --filter=agent-shell deploy --prod ./deploy` (see the + * shell's `deploy:app` script). Physically deletes packages that the shipped + * connect-only shell does not need, which electron-builder's `files` filter + * cannot reliably drop (a bare `!` negation on a node_modules subpath collapses + * the whole package/scope, and re-include globs do not resurrect it): + * + * 1. The native CLI packages for @github/copilot and + * @anthropic-ai/claude-agent-sdk (~250MB and ~230MB per platform). The + * connect-only shell delegates ALL model work to the agent-server (speech + * classification, translation, embeddings), so it never spawns these host + * CLIs — every platform-native package is dropped. The small JS wrapper + * packages (@github/copilot, @github/copilot-sdk) are kept so aiclient's + * lazy `import()` still resolves in the unlikely event it is reached; the + * native is only required on first model use, which never happens here. + * 2. The local-embedding runtime (onnxruntime-node, onnxruntime-web, + * @huggingface/transformers, ~340MB). The connect-only shell offloads + * embeddings to the agent-server; aiclient loads these lazily via guarded + * dynamic import (failures surface as a failed Result, never throw). + * + * Deleting the real .pnpm store directories reclaims the space; matching + * symlinks (which would otherwise dangle) are removed too so electron-builder's + * node_modules traversal never follows them. + * + * Usage: node prune-shell-deploy.mjs + */ + +import fs from "node:fs"; +import path from "node:path"; + +const deployDir = process.argv[2] ?? "./deploy"; +const nodeModules = path.join(deployDir, "node_modules"); + +if (!fs.existsSync(nodeModules)) { + console.error( + `prune-shell-deploy: ${nodeModules} not found; nothing to do.`, + ); + process.exit(0); +} + +// Leaf package directory names to delete outright (exact logical paths). +const leafTargets = [ + "onnxruntime-node", + "onnxruntime-web", + "@huggingface/transformers", +]; + +// Platform-native packages for the host CLIs, keyed by scope/base prefix. Any +// package whose logical name starts with one of these (e.g. +// `@github/copilot-win32-x64`, `@anthropic-ai/claude-agent-sdk-linux-arm64`) +// is a per-platform native and is dropped for EVERY os/arch. The exact base +// names in `keepExact` (the JS wrappers) are preserved. +const nativePrefixes = ["@github/copilot-", "@anthropic-ai/claude-agent-sdk-"]; +const keepExact = new Set([ + "@github/copilot-sdk", // JS SDK wrapper (small) +]); + +// Recognizes a platform-native suffix like `-win32-x64` / `-linux-arm64` / +// `-darwin-x64`, so only per-platform native packages match — never the JS +// wrapper packages (`@github/copilot`, `@github/copilot-sdk`, etc.). +const platformSuffix = /-(win32|darwin|linux)-(x64|arm64|ia32)$/; + +// The same leaf targets as pnpm mangles them in the .pnpm store, e.g. +// `onnxruntime-node@1.21.0`. +const pnpmPrefixes = leafTargets.map((t) => `${t.replace("/", "+")}@`); +// Mangled store prefixes for the platform natives, e.g. +// `@github+copilot-win32-x64@1.0.69`. +const pnpmNativePrefixes = nativePrefixes.map((t) => t.replace("/", "+")); +const pnpmKeepPrefixes = [...keepExact].map((t) => `${t.replace("/", "+")}@`); + +function isNativeLeaf(rel) { + // rel is a logical node_modules path; the trailing 1-2 segments form the + // scoped package name. Match `...--` platform natives, + // but never a kept wrapper. + return nativePrefixes.some((prefix) => { + const idx = rel.indexOf(prefix); + if (idx === -1) { + return false; + } + const name = rel.slice(idx); + if (keepExact.has(name)) { + return false; + } + return platformSuffix.test(name); + }); +} + +function isNativeStoreDir(baseName) { + if (pnpmKeepPrefixes.some((p) => baseName.startsWith(p))) { + return false; + } + if (!pnpmNativePrefixes.some((p) => baseName.startsWith(p))) { + return false; + } + // pnpm store dir is `@`; strip the version and + // require a platform suffix so only per-platform natives match. + const nameOnly = baseName.replace(/@[^@]*$/, ""); + return platformSuffix.test(nameOnly); +} + +function matches(relFromNodeModules, baseName) { + // Exact logical leaf (local-embedding runtime), at the root of node_modules + // or nested inside a consuming package's node_modules. + if ( + leafTargets.some( + (t) => + relFromNodeModules === t || + relFromNodeModules.endsWith(`/${t}`), + ) + ) { + return true; + } + // Per-platform host CLI natives (any os/arch). + if (isNativeLeaf(relFromNodeModules)) { + return true; + } + // The real store directories, mangled by pnpm. + if (pnpmPrefixes.some((p) => baseName.startsWith(p))) { + return true; + } + return isNativeStoreDir(baseName); +} + +let deletedBytes = 0; + +function dirSize(dir) { + let total = 0; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isSymbolicLink()) { + continue; + } + if (entry.isDirectory()) { + total += dirSize(full); + } else { + try { + total += fs.statSync(full).size; + } catch { + // ignore + } + } + } + return total; +} + +function remove(full, relFromNodeModules) { + const isLink = fs.lstatSync(full).isSymbolicLink(); + if (!isLink) { + try { + deletedBytes += dirSize(full); + } catch { + // ignore sizing errors + } + } + fs.rmSync(full, { recursive: true, force: true }); + console.log( + ` removed ${isLink ? "link " : "dir "} node_modules/${relFromNodeModules}`, + ); +} + +// Walk node_modules. Match on the logical leaf path (scope/name) and on the +// mangled .pnpm directory names; do not descend into a matched entry. +function walk(dir, relPrefix) { + let entries; + try { + entries = fs.readdirSync(dir, { withFileTypes: true }); + } catch { + return; + } + for (const entry of entries) { + const full = path.join(dir, entry.name); + const rel = relPrefix ? `${relPrefix}/${entry.name}` : entry.name; + const isLink = entry.isSymbolicLink(); + if (matches(rel, entry.name)) { + remove(full, rel); + continue; + } + if (isLink) { + continue; // never follow symlinks + } + if (entry.isDirectory()) { + walk(full, rel); + } + } +} + +console.log( + `prune-shell-deploy: pruning ${nodeModules} (dropping @github/copilot + @anthropic-ai/claude-agent-sdk platform natives and the local-embedding runtime; connect-only shell delegates all model work to the agent-server)`, +); +walk(nodeModules, ""); +console.log( + `prune-shell-deploy: done (~${(deletedBytes / 1024 / 1024).toFixed(0)} MB of real files removed).`, +);