From ff1a58b6dc05e347f37744db7907025dd4bcfb35 Mon Sep 17 00:00:00 2001 From: musi Date: Wed, 17 Jun 2026 13:32:07 +0800 Subject: [PATCH] Refactor router config and request handling --- .idea/shelf/_2025_7_27_00_07____.xml | 4 + .../shelved.patch | 312 +++++ .idea/workspace.xml | 79 ++ package-lock.json | 1052 ++++++++++------- package.json | 2 +- src/main/constants.ts | 1 + src/main/ipc.ts | 10 +- src/main/preload.ts | 2 + src/renderer/pages/home/App.tsx | 125 +- src/renderer/types/electron.d.ts | 2 + src/shared/ipc-channels.ts | 2 + 11 files changed, 1138 insertions(+), 453 deletions(-) create mode 100644 .idea/shelf/_2025_7_27_00_07____.xml create mode 100644 .idea/shelf/在进行更新之前于_2025_7_27_00_07_取消提交了更改_[更改]/shelved.patch create mode 100644 .idea/workspace.xml diff --git a/.idea/shelf/_2025_7_27_00_07____.xml b/.idea/shelf/_2025_7_27_00_07____.xml new file mode 100644 index 0000000..793755f --- /dev/null +++ b/.idea/shelf/_2025_7_27_00_07____.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/.idea/shelf/在进行更新之前于_2025_7_27_00_07_取消提交了更改_[更改]/shelved.patch b/.idea/shelf/在进行更新之前于_2025_7_27_00_07_取消提交了更改_[更改]/shelved.patch new file mode 100644 index 0000000..88538b9 --- /dev/null +++ b/.idea/shelf/在进行更新之前于_2025_7_27_00_07_取消提交了更改_[更改]/shelved.patch @@ -0,0 +1,312 @@ +Index: src/utils/index.ts +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>import fs from \"node:fs/promises\";\nimport readline from \"node:readline\";\nimport JSON5 from \"json5\";\nimport {\n CONFIG_FILE,\n DEFAULT_CONFIG,\n HOME_DIR,\n PLUGINS_DIR,\n} from \"../constants\";\n\nconst ensureDir = async (dir_path: string) => {\n try {\n await fs.access(dir_path);\n } catch {\n await fs.mkdir(dir_path, { recursive: true });\n }\n};\n\nexport const initDir = async () => {\n await ensureDir(HOME_DIR);\n await ensureDir(PLUGINS_DIR);\n};\n\nconst createReadline = () => {\n return readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n};\n\nconst question = (query: string): Promise => {\n return new Promise((resolve) => {\n const rl = createReadline();\n rl.question(query, (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n};\n\nconst confirm = async (query: string): Promise => {\n const answer = await question(query);\n return answer.toLowerCase() !== \"n\";\n};\n\nexport const readConfigFile = async () => {\n try {\n const config = await fs.readFile(CONFIG_FILE, \"utf-8\");\n try {\n // Try to parse with JSON5 first (which also supports standard JSON)\n return JSON5.parse(config);\n } catch (parseError) {\n console.error(`Failed to parse config file at ${CONFIG_FILE}`);\n console.error(\"Error details:\", (parseError as Error).message);\n console.error(\"Please check your config file syntax.\");\n process.exit(1);\n }\n } catch (readError: any) {\n if (readError.code === \"ENOENT\") {\n // Config file doesn't exist, prompt user for initial setup\n const name = await question(\"Enter Provider Name: \");\n const APIKEY = await question(\"Enter Provider API KEY: \");\n const baseUrl = await question(\"Enter Provider URL: \");\n const model = await question(\"Enter MODEL Name: \");\n const config = Object.assign({}, DEFAULT_CONFIG, {\n Providers: [\n {\n name,\n api_base_url: baseUrl,\n api_key: APIKEY,\n models: [model],\n },\n ],\n Router: {\n default: `${name},${model}`,\n },\n });\n await writeConfigFile(config);\n return config;\n } else {\n console.error(`Failed to read config file at ${CONFIG_FILE}`);\n console.error(\"Error details:\", readError.message);\n process.exit(1);\n }\n }\n};\n\nexport const writeConfigFile = async (config: any) => {\n await ensureDir(HOME_DIR);\n // Add a comment to indicate JSON5 support\n const configWithComment = `// This config file supports JSON5 format (comments, trailing commas, etc.)\\n${JSON5.stringify(config, null, 2)}`;\n await fs.writeFile(CONFIG_FILE, configWithComment);\n};\n\nexport const initConfig = async () => {\n const config = await readConfigFile();\n Object.assign(process.env, config);\n return config;\n};\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/utils/index.ts b/src/utils/index.ts +--- a/src/utils/index.ts (revision 6883fff352909c2152cbbe003a17d6da9af2fb47) ++++ b/src/utils/index.ts (date 1753523801763) +@@ -97,3 +97,49 @@ + Object.assign(process.env, config); + return config; + }; ++ ++/** ++ * Opens a URL in the default browser in a cross-platform way ++ * @param url The URL to open ++ */ ++export const openInBrowser = async (url: string) => { ++ const { spawn } = require('child_process'); ++ const os = require('os'); ++ ++ const platform = os.platform(); ++ let command: string; ++ let args: string[]; ++ ++ switch (platform) { ++ case 'darwin': // macOS ++ command = 'open'; ++ args = [url]; ++ break; ++ case 'win32': // Windows ++ command = 'cmd'; ++ args = ['/c', 'start', url]; ++ break; ++ case 'linux': // Linux ++ command = 'xdg-open'; ++ args = [url]; ++ break; ++ default: ++ throw new Error(`Unsupported platform: ${platform}`); ++ } ++ ++ return new Promise((resolve, reject) => { ++ const process = spawn(command, args, { stdio: 'ignore' }); ++ ++ process.on('error', (error: Error) => { ++ reject(new Error(`Failed to open browser: ${error.message}`)); ++ }); ++ ++ process.on('close', (code: number) => { ++ if (code === 0) { ++ resolve(); ++ } else { ++ reject(new Error(`Browser opened failed with code: ${code}`)); ++ } ++ }); ++ }); ++}; +Index: package.json +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>{\n \"name\": \"@musistudio/claude-code-router\",\n \"version\": \"1.0.27\",\n \"description\": \"Use Claude Code without an Anthropics account and route it to another LLM provider\",\n \"bin\": {\n \"ccr\": \"./dist/cli.js\"\n },\n \"scripts\": {\n \"build\": \"esbuild src/cli.ts --bundle --platform=node --outfile=dist/cli.js && shx cp node_modules/tiktoken/tiktoken_bg.wasm dist/tiktoken_bg.wasm\",\n \"release\": \"npm run build && npm publish\"\n },\n \"keywords\": [\n \"claude\",\n \"code\",\n \"router\",\n \"llm\",\n \"anthropic\"\n ],\n \"author\": \"musistudio\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@musistudio/llms\": \"^1.0.14\",\n \"dotenv\": \"^16.4.7\",\n \"json5\": \"^2.2.3\",\n \"tiktoken\": \"^1.0.21\",\n \"uuid\": \"^11.1.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^24.0.15\",\n \"esbuild\": \"^0.25.1\",\n \"fastify\": \"^5.4.0\",\n \"shx\": \"^0.4.0\",\n \"typescript\": \"^5.8.2\"\n },\n \"publishConfig\": {\n \"ignore\": [\n \"!build/\",\n \"src/\",\n \"screenshots/\"\n ]\n }\n} +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/package.json b/package.json +--- a/package.json (revision 6883fff352909c2152cbbe003a17d6da9af2fb47) ++++ b/package.json (date 1753541489622) +@@ -1,6 +1,6 @@ + { + "name": "@musistudio/claude-code-router", +- "version": "1.0.27", ++ "version": "1.0.28", + "description": "Use Claude Code without an Anthropics account and route it to another LLM provider", + "bin": { + "ccr": "./dist/cli.js" +@@ -19,7 +19,7 @@ + "author": "musistudio", + "license": "MIT", + "dependencies": { +- "@musistudio/llms": "^1.0.14", ++ "@musistudio/llms": "file:../llms", + "dotenv": "^16.4.7", + "json5": "^2.2.3", + "tiktoken": "^1.0.21", +Index: src/utils/processCheck.ts +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>import { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { PID_FILE, REFERENCE_COUNT_FILE } from '../constants';\nimport { readConfigFile } from '.';\n\nexport function incrementReferenceCount() {\n let count = 0;\n if (existsSync(REFERENCE_COUNT_FILE)) {\n count = parseInt(readFileSync(REFERENCE_COUNT_FILE, 'utf-8')) || 0;\n }\n count++;\n writeFileSync(REFERENCE_COUNT_FILE, count.toString());\n}\n\nexport function decrementReferenceCount() {\n let count = 0;\n if (existsSync(REFERENCE_COUNT_FILE)) {\n count = parseInt(readFileSync(REFERENCE_COUNT_FILE, 'utf-8')) || 0;\n }\n count = Math.max(0, count - 1);\n writeFileSync(REFERENCE_COUNT_FILE, count.toString());\n}\n\nexport function getReferenceCount(): number {\n if (!existsSync(REFERENCE_COUNT_FILE)) {\n return 0;\n }\n return parseInt(readFileSync(REFERENCE_COUNT_FILE, 'utf-8')) || 0;\n}\n\nexport function isServiceRunning(): boolean {\n if (!existsSync(PID_FILE)) {\n return false;\n }\n\n try {\n const pid = parseInt(readFileSync(PID_FILE, 'utf-8'));\n process.kill(pid, 0);\n return true;\n } catch (e) {\n // Process not running, clean up pid file\n cleanupPidFile();\n return false;\n }\n}\n\nexport function savePid(pid: number) {\n writeFileSync(PID_FILE, pid.toString());\n}\n\nexport function cleanupPidFile() {\n if (existsSync(PID_FILE)) {\n try {\n const fs = require('fs');\n fs.unlinkSync(PID_FILE);\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n}\n\nexport function getServicePid(): number | null {\n if (!existsSync(PID_FILE)) {\n return null;\n }\n \n try {\n const pid = parseInt(readFileSync(PID_FILE, 'utf-8'));\n return isNaN(pid) ? null : pid;\n } catch (e) {\n return null;\n }\n}\n\nexport async function getServiceInfo() {\n const pid = getServicePid();\n const running = isServiceRunning();\n const config = await readConfigFile();\n \n return {\n running,\n pid,\n port: config.PORT,\n endpoint: `http://127.0.0.1:${config.PORT}`,\n pidFile: PID_FILE,\n referenceCount: getReferenceCount()\n };\n}\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/utils/processCheck.ts b/src/utils/processCheck.ts +--- a/src/utils/processCheck.ts (revision 6883fff352909c2152cbbe003a17d6da9af2fb47) ++++ b/src/utils/processCheck.ts (date 1753524162944) +@@ -75,12 +75,13 @@ + const pid = getServicePid(); + const running = isServiceRunning(); + const config = await readConfigFile(); ++ const port = config.PORT || 3456; + + return { + running, + pid, +- port: config.PORT, +- endpoint: `http://127.0.0.1:${config.PORT}`, ++ port, ++ endpoint: `http://127.0.0.1:${port}`, + pidFile: PID_FILE, + referenceCount: getReferenceCount() + }; +Index: pnpm-lock.yaml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>lockfileVersion: '9.0'\n\nsettings:\n autoInstallPeers: true\n excludeLinksFromLockfile: false\n\nimporters:\n\n .:\n dependencies:\n '@musistudio/llms':\n specifier: ^1.0.14\n version: 1.0.14(ws@8.18.3)(zod@3.25.67)\n dotenv:\n specifier: ^16.4.7\n version: 16.6.1\n json5:\n specifier: ^2.2.3\n version: 2.2.3\n tiktoken:\n specifier: ^1.0.21\n version: 1.0.21\n uuid:\n specifier: ^11.1.0\n version: 11.1.0\n devDependencies:\n '@types/node':\n specifier: ^24.0.15\n version: 24.0.15\n esbuild:\n specifier: ^0.25.1\n version: 0.25.5\n fastify:\n specifier: ^5.4.0\n version: 5.4.0\n shx:\n specifier: ^0.4.0\n version: 0.4.0\n typescript:\n specifier: ^5.8.2\n version: 5.8.3\n\npackages:\n\n '@anthropic-ai/sdk@0.54.0':\n resolution: {integrity: sha512-xyoCtHJnt/qg5GG6IgK+UJEndz8h8ljzt/caKXmq3LfBF81nC/BW6E4x2rOWCZcvsLyVW+e8U5mtIr6UCE/kJw==}\n hasBin: true\n\n '@esbuild/aix-ppc64@0.25.5':\n resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}\n engines: {node: '>=18'}\n cpu: [ppc64]\n os: [aix]\n\n '@esbuild/android-arm64@0.25.5':\n resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}\n engines: {node: '>=18'}\n cpu: [arm64]\n os: [android]\n\n '@esbuild/android-arm@0.25.5':\n resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}\n engines: {node: '>=18'}\n cpu: [arm]\n os: [android]\n\n '@esbuild/android-x64@0.25.5':\n resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}\n engines: {node: '>=18'}\n cpu: [x64]\n os: [android]\n\n '@esbuild/darwin-arm64@0.25.5':\n resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}\n engines: {node: '>=18'}\n cpu: [arm64]\n os: [darwin]\n\n '@esbuild/darwin-x64@0.25.5':\n resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}\n engines: {node: '>=18'}\n cpu: [x64]\n os: [darwin]\n\n '@esbuild/freebsd-arm64@0.25.5':\n resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}\n engines: {node: '>=18'}\n cpu: [arm64]\n os: [freebsd]\n\n '@esbuild/freebsd-x64@0.25.5':\n resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}\n engines: {node: '>=18'}\n cpu: [x64]\n os: [freebsd]\n\n '@esbuild/linux-arm64@0.25.5':\n resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}\n engines: {node: '>=18'}\n cpu: [arm64]\n os: [linux]\n\n '@esbuild/linux-arm@0.25.5':\n resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}\n engines: {node: '>=18'}\n cpu: [arm]\n os: [linux]\n\n '@esbuild/linux-ia32@0.25.5':\n resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}\n engines: {node: '>=18'}\n cpu: [ia32]\n os: [linux]\n\n '@esbuild/linux-loong64@0.25.5':\n resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}\n engines: {node: '>=18'}\n cpu: [loong64]\n os: [linux]\n\n '@esbuild/linux-mips64el@0.25.5':\n resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}\n engines: {node: '>=18'}\n cpu: [mips64el]\n os: [linux]\n\n '@esbuild/linux-ppc64@0.25.5':\n resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}\n engines: {node: '>=18'}\n cpu: [ppc64]\n os: [linux]\n\n '@esbuild/linux-riscv64@0.25.5':\n resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}\n engines: {node: '>=18'}\n cpu: [riscv64]\n os: [linux]\n\n '@esbuild/linux-s390x@0.25.5':\n resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}\n engines: {node: '>=18'}\n cpu: [s390x]\n os: [linux]\n\n '@esbuild/linux-x64@0.25.5':\n resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}\n engines: {node: '>=18'}\n cpu: [x64]\n os: [linux]\n\n '@esbuild/netbsd-arm64@0.25.5':\n resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}\n engines: {node: '>=18'}\n cpu: [arm64]\n os: [netbsd]\n\n '@esbuild/netbsd-x64@0.25.5':\n resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}\n engines: {node: '>=18'}\n cpu: [x64]\n os: [netbsd]\n\n '@esbuild/openbsd-arm64@0.25.5':\n resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}\n engines: {node: '>=18'}\n cpu: [arm64]\n os: [openbsd]\n\n '@esbuild/openbsd-x64@0.25.5':\n resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}\n engines: {node: '>=18'}\n cpu: [x64]\n os: [openbsd]\n\n '@esbuild/sunos-x64@0.25.5':\n resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}\n engines: {node: '>=18'}\n cpu: [x64]\n os: [sunos]\n\n '@esbuild/win32-arm64@0.25.5':\n resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}\n engines: {node: '>=18'}\n cpu: [arm64]\n os: [win32]\n\n '@esbuild/win32-ia32@0.25.5':\n resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}\n engines: {node: '>=18'}\n cpu: [ia32]\n os: [win32]\n\n '@esbuild/win32-x64@0.25.5':\n resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}\n engines: {node: '>=18'}\n cpu: [x64]\n os: [win32]\n\n '@fastify/ajv-compiler@4.0.2':\n resolution: {integrity: sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==}\n\n '@fastify/cors@11.0.1':\n resolution: {integrity: sha512-dmZaE7M1f4SM8ZZuk5RhSsDJ+ezTgI7v3HHRj8Ow9CneczsPLZV6+2j2uwdaSLn8zhTv6QV0F4ZRcqdalGx1pQ==}\n\n '@fastify/error@4.2.0':\n resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}\n\n '@fastify/fast-json-stringify-compiler@5.0.3':\n resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==}\n\n '@fastify/forwarded@3.0.0':\n resolution: {integrity: sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA==}\n\n '@fastify/merge-json-schemas@0.2.1':\n resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}\n\n '@fastify/proxy-addr@5.0.0':\n resolution: {integrity: sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==}\n\n '@google/genai@1.8.0':\n resolution: {integrity: sha512-n3KiMFesQCy2R9iSdBIuJ0JWYQ1HZBJJkmt4PPZMGZKvlgHhBAGw1kUMyX+vsAIzprN3lK45DI755lm70wPOOg==}\n engines: {node: '>=20.0.0'}\n peerDependencies:\n '@modelcontextprotocol/sdk': ^1.11.0\n peerDependenciesMeta:\n '@modelcontextprotocol/sdk':\n optional: true\n\n '@musistudio/llms@1.0.14':\n resolution: {integrity: sha512-56+i7hAmdx4QUFBD5ey0EbWPlzQ882d9PCZB1Ky5mvMt5LLFx5x2RzfiJo0LWdvEInfPRAIufgwt8lISyApOUQ==}\n\n '@nodelib/fs.scandir@2.1.5':\n resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}\n engines: {node: '>= 8'}\n\n '@nodelib/fs.stat@2.0.5':\n resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}\n engines: {node: '>= 8'}\n\n '@nodelib/fs.walk@1.2.8':\n resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}\n engines: {node: '>= 8'}\n\n '@types/node@24.0.15':\n resolution: {integrity: sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==}\n\n abstract-logging@2.0.1:\n resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}\n\n agent-base@7.1.3:\n resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}\n engines: {node: '>= 14'}\n\n ajv-formats@3.0.1:\n resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}\n peerDependencies:\n ajv: ^8.0.0\n peerDependenciesMeta:\n ajv:\n optional: true\n\n ajv@8.17.1:\n resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}\n\n atomic-sleep@1.0.0:\n resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}\n engines: {node: '>=8.0.0'}\n\n avvio@9.1.0:\n resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==}\n\n base64-js@1.5.1:\n resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}\n\n bignumber.js@9.3.0:\n resolution: {integrity: sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==}\n\n braces@3.0.3:\n resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}\n engines: {node: '>=8'}\n\n buffer-equal-constant-time@1.0.1:\n resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}\n\n cookie@1.0.2:\n resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}\n engines: {node: '>=18'}\n\n cross-spawn@6.0.6:\n resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==}\n engines: {node: '>=4.8'}\n\n debug@4.4.1:\n resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}\n engines: {node: '>=6.0'}\n peerDependencies:\n supports-color: '*'\n peerDependenciesMeta:\n supports-color:\n optional: true\n\n dequal@2.0.3:\n resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}\n engines: {node: '>=6'}\n\n dotenv@16.6.1:\n resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}\n engines: {node: '>=12'}\n\n ecdsa-sig-formatter@1.0.11:\n resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}\n\n end-of-stream@1.4.5:\n resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}\n\n esbuild@0.25.5:\n resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}\n engines: {node: '>=18'}\n hasBin: true\n\n execa@1.0.0:\n resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==}\n engines: {node: '>=6'}\n\n extend@3.0.2:\n resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}\n\n fast-decode-uri-component@1.0.1:\n resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}\n\n fast-deep-equal@3.1.3:\n resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}\n\n fast-glob@3.3.3:\n resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}\n engines: {node: '>=8.6.0'}\n\n fast-json-stringify@6.0.1:\n resolution: {integrity: sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==}\n\n fast-querystring@1.1.2:\n resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}\n\n fast-redact@3.5.0:\n resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}\n engines: {node: '>=6'}\n\n fast-uri@3.0.6:\n resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}\n\n fastify-plugin@5.0.1:\n resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==}\n\n fastify@5.4.0:\n resolution: {integrity: sha512-I4dVlUe+WNQAhKSyv15w+dwUh2EPiEl4X2lGYMmNSgF83WzTMAPKGdWEv5tPsCQOb+SOZwz8Vlta2vF+OeDgRw==}\n\n fastq@1.19.1:\n resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}\n\n fill-range@7.1.1:\n resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}\n engines: {node: '>=8'}\n\n find-my-way@9.3.0:\n resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==}\n engines: {node: '>=20'}\n\n function-bind@1.1.2:\n resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}\n\n gaxios@6.7.1:\n resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==}\n engines: {node: '>=14'}\n\n gcp-metadata@6.1.1:\n resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==}\n engines: {node: '>=14'}\n\n get-stream@4.1.0:\n resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}\n engines: {node: '>=6'}\n\n glob-parent@5.1.2:\n resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}\n engines: {node: '>= 6'}\n\n google-auth-library@9.15.1:\n resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==}\n engines: {node: '>=14'}\n\n google-logging-utils@0.0.2:\n resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==}\n engines: {node: '>=14'}\n\n gtoken@7.1.0:\n resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==}\n engines: {node: '>=14.0.0'}\n\n hasown@2.0.2:\n resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}\n engines: {node: '>= 0.4'}\n\n https-proxy-agent@7.0.6:\n resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}\n engines: {node: '>= 14'}\n\n interpret@1.4.0:\n resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}\n engines: {node: '>= 0.10'}\n\n ipaddr.js@2.2.0:\n resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}\n engines: {node: '>= 10'}\n\n is-core-module@2.16.1:\n resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}\n engines: {node: '>= 0.4'}\n\n is-extglob@2.1.1:\n resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}\n engines: {node: '>=0.10.0'}\n\n is-glob@4.0.3:\n resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}\n engines: {node: '>=0.10.0'}\n\n is-number@7.0.0:\n resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}\n engines: {node: '>=0.12.0'}\n\n is-stream@1.1.0:\n resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}\n engines: {node: '>=0.10.0'}\n\n is-stream@2.0.1:\n resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}\n engines: {node: '>=8'}\n\n isexe@2.0.0:\n resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}\n\n json-bigint@1.0.0:\n resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==}\n\n json-schema-ref-resolver@2.0.1:\n resolution: {integrity: sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==}\n\n json-schema-traverse@1.0.0:\n resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}\n\n json5@2.2.3:\n resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}\n engines: {node: '>=6'}\n hasBin: true\n\n jwa@2.0.1:\n resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==}\n\n jws@4.0.0:\n resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==}\n\n light-my-request@6.6.0:\n resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}\n\n merge2@1.4.1:\n resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}\n engines: {node: '>= 8'}\n\n micromatch@4.0.8:\n resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}\n engines: {node: '>=8.6'}\n\n minimist@1.2.8:\n resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}\n\n ms@2.1.3:\n resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}\n\n nice-try@1.0.5:\n resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}\n\n node-fetch@2.7.0:\n resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}\n engines: {node: 4.x || >=6.0.0}\n peerDependencies:\n encoding: ^0.1.0\n peerDependenciesMeta:\n encoding:\n optional: true\n\n npm-run-path@2.0.2:\n resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}\n engines: {node: '>=4'}\n\n on-exit-leak-free@2.1.2:\n resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}\n engines: {node: '>=14.0.0'}\n\n once@1.4.0:\n resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}\n\n openai@5.8.2:\n resolution: {integrity: sha512-8C+nzoHYgyYOXhHGN6r0fcb4SznuEn1R7YZMvlqDbnCuE0FM2mm3T1HiYW6WIcMS/F1Of2up/cSPjLPaWt0X9Q==}\n hasBin: true\n peerDependencies:\n ws: ^8.18.0\n zod: ^3.23.8\n peerDependenciesMeta:\n ws:\n optional: true\n zod:\n optional: true\n\n p-finally@1.0.0:\n resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}\n engines: {node: '>=4'}\n\n path-key@2.0.1:\n resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}\n engines: {node: '>=4'}\n\n path-parse@1.0.7:\n resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}\n\n picomatch@2.3.1:\n resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}\n engines: {node: '>=8.6'}\n\n pino-abstract-transport@2.0.0:\n resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}\n\n pino-std-serializers@7.0.0:\n resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}\n\n pino@9.7.0:\n resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==}\n hasBin: true\n\n process-warning@4.0.1:\n resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}\n\n process-warning@5.0.0:\n resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}\n\n pump@3.0.3:\n resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}\n\n queue-microtask@1.2.3:\n resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}\n\n quick-format-unescaped@4.0.4:\n resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}\n\n real-require@0.2.0:\n resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}\n engines: {node: '>= 12.13.0'}\n\n rechoir@0.6.2:\n resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}\n engines: {node: '>= 0.10'}\n\n require-from-string@2.0.2:\n resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}\n engines: {node: '>=0.10.0'}\n\n resolve@1.22.10:\n resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}\n engines: {node: '>= 0.4'}\n hasBin: true\n\n ret@0.5.0:\n resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}\n engines: {node: '>=10'}\n\n reusify@1.1.0:\n resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}\n engines: {iojs: '>=1.0.0', node: '>=0.10.0'}\n\n rfdc@1.4.1:\n resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}\n\n run-parallel@1.2.0:\n resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}\n\n safe-buffer@5.2.1:\n resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}\n\n safe-regex2@5.0.0:\n resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==}\n\n safe-stable-stringify@2.5.0:\n resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}\n engines: {node: '>=10'}\n\n secure-json-parse@4.0.0:\n resolution: {integrity: sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==}\n\n semver@5.7.2:\n resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}\n hasBin: true\n\n semver@7.7.2:\n resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}\n engines: {node: '>=10'}\n hasBin: true\n\n set-cookie-parser@2.7.1:\n resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}\n\n shebang-command@1.2.0:\n resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}\n engines: {node: '>=0.10.0'}\n\n shebang-regex@1.0.0:\n resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}\n engines: {node: '>=0.10.0'}\n\n shelljs@0.9.2:\n resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==}\n engines: {node: '>=18'}\n hasBin: true\n\n shx@0.4.0:\n resolution: {integrity: sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==}\n engines: {node: '>=18'}\n hasBin: true\n\n signal-exit@3.0.7:\n resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}\n\n sonic-boom@4.2.0:\n resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}\n\n split2@4.2.0:\n resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}\n engines: {node: '>= 10.x'}\n\n strip-eof@1.0.0:\n resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}\n engines: {node: '>=0.10.0'}\n\n supports-preserve-symlinks-flag@1.0.0:\n resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}\n engines: {node: '>= 0.4'}\n\n thread-stream@3.1.0:\n resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}\n\n tiktoken@1.0.21:\n resolution: {integrity: sha512-/kqtlepLMptX0OgbYD9aMYbM7EFrMZCL7EoHM8Psmg2FuhXoo/bH64KqOiZGGwa6oS9TPdSEDKBnV2LuB8+5vQ==}\n\n to-regex-range@5.0.1:\n resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}\n engines: {node: '>=8.0'}\n\n toad-cache@3.7.0:\n resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}\n engines: {node: '>=12'}\n\n tr46@0.0.3:\n resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}\n\n typescript@5.8.3:\n resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}\n engines: {node: '>=14.17'}\n hasBin: true\n\n undici-types@7.8.0:\n resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}\n\n undici@7.11.0:\n resolution: {integrity: sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg==}\n engines: {node: '>=20.18.1'}\n\n uuid@11.1.0:\n resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}\n hasBin: true\n\n uuid@9.0.1:\n resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}\n hasBin: true\n\n webidl-conversions@3.0.1:\n resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}\n\n whatwg-url@5.0.0:\n resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}\n\n which@1.3.1:\n resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}\n hasBin: true\n\n wrappy@1.0.2:\n resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}\n\n ws@8.18.3:\n resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}\n engines: {node: '>=10.0.0'}\n peerDependencies:\n bufferutil: ^4.0.1\n utf-8-validate: '>=5.0.2'\n peerDependenciesMeta:\n bufferutil:\n optional: true\n utf-8-validate:\n optional: true\n\n zod-to-json-schema@3.24.6:\n resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==}\n peerDependencies:\n zod: ^3.24.1\n\n zod@3.25.67:\n resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==}\n\nsnapshots:\n\n '@anthropic-ai/sdk@0.54.0': {}\n\n '@esbuild/aix-ppc64@0.25.5':\n optional: true\n\n '@esbuild/android-arm64@0.25.5':\n optional: true\n\n '@esbuild/android-arm@0.25.5':\n optional: true\n\n '@esbuild/android-x64@0.25.5':\n optional: true\n\n '@esbuild/darwin-arm64@0.25.5':\n optional: true\n\n '@esbuild/darwin-x64@0.25.5':\n optional: true\n\n '@esbuild/freebsd-arm64@0.25.5':\n optional: true\n\n '@esbuild/freebsd-x64@0.25.5':\n optional: true\n\n '@esbuild/linux-arm64@0.25.5':\n optional: true\n\n '@esbuild/linux-arm@0.25.5':\n optional: true\n\n '@esbuild/linux-ia32@0.25.5':\n optional: true\n\n '@esbuild/linux-loong64@0.25.5':\n optional: true\n\n '@esbuild/linux-mips64el@0.25.5':\n optional: true\n\n '@esbuild/linux-ppc64@0.25.5':\n optional: true\n\n '@esbuild/linux-riscv64@0.25.5':\n optional: true\n\n '@esbuild/linux-s390x@0.25.5':\n optional: true\n\n '@esbuild/linux-x64@0.25.5':\n optional: true\n\n '@esbuild/netbsd-arm64@0.25.5':\n optional: true\n\n '@esbuild/netbsd-x64@0.25.5':\n optional: true\n\n '@esbuild/openbsd-arm64@0.25.5':\n optional: true\n\n '@esbuild/openbsd-x64@0.25.5':\n optional: true\n\n '@esbuild/sunos-x64@0.25.5':\n optional: true\n\n '@esbuild/win32-arm64@0.25.5':\n optional: true\n\n '@esbuild/win32-ia32@0.25.5':\n optional: true\n\n '@esbuild/win32-x64@0.25.5':\n optional: true\n\n '@fastify/ajv-compiler@4.0.2':\n dependencies:\n ajv: 8.17.1\n ajv-formats: 3.0.1(ajv@8.17.1)\n fast-uri: 3.0.6\n\n '@fastify/cors@11.0.1':\n dependencies:\n fastify-plugin: 5.0.1\n toad-cache: 3.7.0\n\n '@fastify/error@4.2.0': {}\n\n '@fastify/fast-json-stringify-compiler@5.0.3':\n dependencies:\n fast-json-stringify: 6.0.1\n\n '@fastify/forwarded@3.0.0': {}\n\n '@fastify/merge-json-schemas@0.2.1':\n dependencies:\n dequal: 2.0.3\n\n '@fastify/proxy-addr@5.0.0':\n dependencies:\n '@fastify/forwarded': 3.0.0\n ipaddr.js: 2.2.0\n\n '@google/genai@1.8.0':\n dependencies:\n google-auth-library: 9.15.1\n ws: 8.18.3\n zod: 3.25.67\n zod-to-json-schema: 3.24.6(zod@3.25.67)\n transitivePeerDependencies:\n - bufferutil\n - encoding\n - supports-color\n - utf-8-validate\n\n '@musistudio/llms@1.0.14(ws@8.18.3)(zod@3.25.67)':\n dependencies:\n '@anthropic-ai/sdk': 0.54.0\n '@fastify/cors': 11.0.1\n '@google/genai': 1.8.0\n dotenv: 16.6.1\n fastify: 5.4.0\n json5: 2.2.3\n openai: 5.8.2(ws@8.18.3)(zod@3.25.67)\n undici: 7.11.0\n uuid: 11.1.0\n transitivePeerDependencies:\n - '@modelcontextprotocol/sdk'\n - bufferutil\n - encoding\n - supports-color\n - utf-8-validate\n - ws\n - zod\n\n '@nodelib/fs.scandir@2.1.5':\n dependencies:\n '@nodelib/fs.stat': 2.0.5\n run-parallel: 1.2.0\n\n '@nodelib/fs.stat@2.0.5': {}\n\n '@nodelib/fs.walk@1.2.8':\n dependencies:\n '@nodelib/fs.scandir': 2.1.5\n fastq: 1.19.1\n\n '@types/node@24.0.15':\n dependencies:\n undici-types: 7.8.0\n\n abstract-logging@2.0.1: {}\n\n agent-base@7.1.3: {}\n\n ajv-formats@3.0.1(ajv@8.17.1):\n optionalDependencies:\n ajv: 8.17.1\n\n ajv@8.17.1:\n dependencies:\n fast-deep-equal: 3.1.3\n fast-uri: 3.0.6\n json-schema-traverse: 1.0.0\n require-from-string: 2.0.2\n\n atomic-sleep@1.0.0: {}\n\n avvio@9.1.0:\n dependencies:\n '@fastify/error': 4.2.0\n fastq: 1.19.1\n\n base64-js@1.5.1: {}\n\n bignumber.js@9.3.0: {}\n\n braces@3.0.3:\n dependencies:\n fill-range: 7.1.1\n\n buffer-equal-constant-time@1.0.1: {}\n\n cookie@1.0.2: {}\n\n cross-spawn@6.0.6:\n dependencies:\n nice-try: 1.0.5\n path-key: 2.0.1\n semver: 5.7.2\n shebang-command: 1.2.0\n which: 1.3.1\n\n debug@4.4.1:\n dependencies:\n ms: 2.1.3\n\n dequal@2.0.3: {}\n\n dotenv@16.6.1: {}\n\n ecdsa-sig-formatter@1.0.11:\n dependencies:\n safe-buffer: 5.2.1\n\n end-of-stream@1.4.5:\n dependencies:\n once: 1.4.0\n\n esbuild@0.25.5:\n optionalDependencies:\n '@esbuild/aix-ppc64': 0.25.5\n '@esbuild/android-arm': 0.25.5\n '@esbuild/android-arm64': 0.25.5\n '@esbuild/android-x64': 0.25.5\n '@esbuild/darwin-arm64': 0.25.5\n '@esbuild/darwin-x64': 0.25.5\n '@esbuild/freebsd-arm64': 0.25.5\n '@esbuild/freebsd-x64': 0.25.5\n '@esbuild/linux-arm': 0.25.5\n '@esbuild/linux-arm64': 0.25.5\n '@esbuild/linux-ia32': 0.25.5\n '@esbuild/linux-loong64': 0.25.5\n '@esbuild/linux-mips64el': 0.25.5\n '@esbuild/linux-ppc64': 0.25.5\n '@esbuild/linux-riscv64': 0.25.5\n '@esbuild/linux-s390x': 0.25.5\n '@esbuild/linux-x64': 0.25.5\n '@esbuild/netbsd-arm64': 0.25.5\n '@esbuild/netbsd-x64': 0.25.5\n '@esbuild/openbsd-arm64': 0.25.5\n '@esbuild/openbsd-x64': 0.25.5\n '@esbuild/sunos-x64': 0.25.5\n '@esbuild/win32-arm64': 0.25.5\n '@esbuild/win32-ia32': 0.25.5\n '@esbuild/win32-x64': 0.25.5\n\n execa@1.0.0:\n dependencies:\n cross-spawn: 6.0.6\n get-stream: 4.1.0\n is-stream: 1.1.0\n npm-run-path: 2.0.2\n p-finally: 1.0.0\n signal-exit: 3.0.7\n strip-eof: 1.0.0\n\n extend@3.0.2: {}\n\n fast-decode-uri-component@1.0.1: {}\n\n fast-deep-equal@3.1.3: {}\n\n fast-glob@3.3.3:\n dependencies:\n '@nodelib/fs.stat': 2.0.5\n '@nodelib/fs.walk': 1.2.8\n glob-parent: 5.1.2\n merge2: 1.4.1\n micromatch: 4.0.8\n\n fast-json-stringify@6.0.1:\n dependencies:\n '@fastify/merge-json-schemas': 0.2.1\n ajv: 8.17.1\n ajv-formats: 3.0.1(ajv@8.17.1)\n fast-uri: 3.0.6\n json-schema-ref-resolver: 2.0.1\n rfdc: 1.4.1\n\n fast-querystring@1.1.2:\n dependencies:\n fast-decode-uri-component: 1.0.1\n\n fast-redact@3.5.0: {}\n\n fast-uri@3.0.6: {}\n\n fastify-plugin@5.0.1: {}\n\n fastify@5.4.0:\n dependencies:\n '@fastify/ajv-compiler': 4.0.2\n '@fastify/error': 4.2.0\n '@fastify/fast-json-stringify-compiler': 5.0.3\n '@fastify/proxy-addr': 5.0.0\n abstract-logging: 2.0.1\n avvio: 9.1.0\n fast-json-stringify: 6.0.1\n find-my-way: 9.3.0\n light-my-request: 6.6.0\n pino: 9.7.0\n process-warning: 5.0.0\n rfdc: 1.4.1\n secure-json-parse: 4.0.0\n semver: 7.7.2\n toad-cache: 3.7.0\n\n fastq@1.19.1:\n dependencies:\n reusify: 1.1.0\n\n fill-range@7.1.1:\n dependencies:\n to-regex-range: 5.0.1\n\n find-my-way@9.3.0:\n dependencies:\n fast-deep-equal: 3.1.3\n fast-querystring: 1.1.2\n safe-regex2: 5.0.0\n\n function-bind@1.1.2: {}\n\n gaxios@6.7.1:\n dependencies:\n extend: 3.0.2\n https-proxy-agent: 7.0.6\n is-stream: 2.0.1\n node-fetch: 2.7.0\n uuid: 9.0.1\n transitivePeerDependencies:\n - encoding\n - supports-color\n\n gcp-metadata@6.1.1:\n dependencies:\n gaxios: 6.7.1\n google-logging-utils: 0.0.2\n json-bigint: 1.0.0\n transitivePeerDependencies:\n - encoding\n - supports-color\n\n get-stream@4.1.0:\n dependencies:\n pump: 3.0.3\n\n glob-parent@5.1.2:\n dependencies:\n is-glob: 4.0.3\n\n google-auth-library@9.15.1:\n dependencies:\n base64-js: 1.5.1\n ecdsa-sig-formatter: 1.0.11\n gaxios: 6.7.1\n gcp-metadata: 6.1.1\n gtoken: 7.1.0\n jws: 4.0.0\n transitivePeerDependencies:\n - encoding\n - supports-color\n\n google-logging-utils@0.0.2: {}\n\n gtoken@7.1.0:\n dependencies:\n gaxios: 6.7.1\n jws: 4.0.0\n transitivePeerDependencies:\n - encoding\n - supports-color\n\n hasown@2.0.2:\n dependencies:\n function-bind: 1.1.2\n\n https-proxy-agent@7.0.6:\n dependencies:\n agent-base: 7.1.3\n debug: 4.4.1\n transitivePeerDependencies:\n - supports-color\n\n interpret@1.4.0: {}\n\n ipaddr.js@2.2.0: {}\n\n is-core-module@2.16.1:\n dependencies:\n hasown: 2.0.2\n\n is-extglob@2.1.1: {}\n\n is-glob@4.0.3:\n dependencies:\n is-extglob: 2.1.1\n\n is-number@7.0.0: {}\n\n is-stream@1.1.0: {}\n\n is-stream@2.0.1: {}\n\n isexe@2.0.0: {}\n\n json-bigint@1.0.0:\n dependencies:\n bignumber.js: 9.3.0\n\n json-schema-ref-resolver@2.0.1:\n dependencies:\n dequal: 2.0.3\n\n json-schema-traverse@1.0.0: {}\n\n json5@2.2.3: {}\n\n jwa@2.0.1:\n dependencies:\n buffer-equal-constant-time: 1.0.1\n ecdsa-sig-formatter: 1.0.11\n safe-buffer: 5.2.1\n\n jws@4.0.0:\n dependencies:\n jwa: 2.0.1\n safe-buffer: 5.2.1\n\n light-my-request@6.6.0:\n dependencies:\n cookie: 1.0.2\n process-warning: 4.0.1\n set-cookie-parser: 2.7.1\n\n merge2@1.4.1: {}\n\n micromatch@4.0.8:\n dependencies:\n braces: 3.0.3\n picomatch: 2.3.1\n\n minimist@1.2.8: {}\n\n ms@2.1.3: {}\n\n nice-try@1.0.5: {}\n\n node-fetch@2.7.0:\n dependencies:\n whatwg-url: 5.0.0\n\n npm-run-path@2.0.2:\n dependencies:\n path-key: 2.0.1\n\n on-exit-leak-free@2.1.2: {}\n\n once@1.4.0:\n dependencies:\n wrappy: 1.0.2\n\n openai@5.8.2(ws@8.18.3)(zod@3.25.67):\n optionalDependencies:\n ws: 8.18.3\n zod: 3.25.67\n\n p-finally@1.0.0: {}\n\n path-key@2.0.1: {}\n\n path-parse@1.0.7: {}\n\n picomatch@2.3.1: {}\n\n pino-abstract-transport@2.0.0:\n dependencies:\n split2: 4.2.0\n\n pino-std-serializers@7.0.0: {}\n\n pino@9.7.0:\n dependencies:\n atomic-sleep: 1.0.0\n fast-redact: 3.5.0\n on-exit-leak-free: 2.1.2\n pino-abstract-transport: 2.0.0\n pino-std-serializers: 7.0.0\n process-warning: 5.0.0\n quick-format-unescaped: 4.0.4\n real-require: 0.2.0\n safe-stable-stringify: 2.5.0\n sonic-boom: 4.2.0\n thread-stream: 3.1.0\n\n process-warning@4.0.1: {}\n\n process-warning@5.0.0: {}\n\n pump@3.0.3:\n dependencies:\n end-of-stream: 1.4.5\n once: 1.4.0\n\n queue-microtask@1.2.3: {}\n\n quick-format-unescaped@4.0.4: {}\n\n real-require@0.2.0: {}\n\n rechoir@0.6.2:\n dependencies:\n resolve: 1.22.10\n\n require-from-string@2.0.2: {}\n\n resolve@1.22.10:\n dependencies:\n is-core-module: 2.16.1\n path-parse: 1.0.7\n supports-preserve-symlinks-flag: 1.0.0\n\n ret@0.5.0: {}\n\n reusify@1.1.0: {}\n\n rfdc@1.4.1: {}\n\n run-parallel@1.2.0:\n dependencies:\n queue-microtask: 1.2.3\n\n safe-buffer@5.2.1: {}\n\n safe-regex2@5.0.0:\n dependencies:\n ret: 0.5.0\n\n safe-stable-stringify@2.5.0: {}\n\n secure-json-parse@4.0.0: {}\n\n semver@5.7.2: {}\n\n semver@7.7.2: {}\n\n set-cookie-parser@2.7.1: {}\n\n shebang-command@1.2.0:\n dependencies:\n shebang-regex: 1.0.0\n\n shebang-regex@1.0.0: {}\n\n shelljs@0.9.2:\n dependencies:\n execa: 1.0.0\n fast-glob: 3.3.3\n interpret: 1.4.0\n rechoir: 0.6.2\n\n shx@0.4.0:\n dependencies:\n minimist: 1.2.8\n shelljs: 0.9.2\n\n signal-exit@3.0.7: {}\n\n sonic-boom@4.2.0:\n dependencies:\n atomic-sleep: 1.0.0\n\n split2@4.2.0: {}\n\n strip-eof@1.0.0: {}\n\n supports-preserve-symlinks-flag@1.0.0: {}\n\n thread-stream@3.1.0:\n dependencies:\n real-require: 0.2.0\n\n tiktoken@1.0.21: {}\n\n to-regex-range@5.0.1:\n dependencies:\n is-number: 7.0.0\n\n toad-cache@3.7.0: {}\n\n tr46@0.0.3: {}\n\n typescript@5.8.3: {}\n\n undici-types@7.8.0: {}\n\n undici@7.11.0: {}\n\n uuid@11.1.0: {}\n\n uuid@9.0.1: {}\n\n webidl-conversions@3.0.1: {}\n\n whatwg-url@5.0.0:\n dependencies:\n tr46: 0.0.3\n webidl-conversions: 3.0.1\n\n which@1.3.1:\n dependencies:\n isexe: 2.0.0\n\n wrappy@1.0.2: {}\n\n ws@8.18.3: {}\n\n zod-to-json-schema@3.24.6(zod@3.25.67):\n dependencies:\n zod: 3.25.67\n\n zod@3.25.67: {}\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml +--- a/pnpm-lock.yaml (revision 6883fff352909c2152cbbe003a17d6da9af2fb47) ++++ b/pnpm-lock.yaml (date 1753541491339) +@@ -9,8 +9,8 @@ + .: + dependencies: + '@musistudio/llms': +- specifier: ^1.0.14 +- version: 1.0.14(ws@8.18.3)(zod@3.25.67) ++ specifier: file:../llms ++ version: file:../llms(ws@8.18.3)(zod@3.25.67) + dotenv: + specifier: ^16.4.7 + version: 16.6.1 +@@ -226,8 +226,8 @@ + '@modelcontextprotocol/sdk': + optional: true + +- '@musistudio/llms@1.0.14': +- resolution: {integrity: sha512-56+i7hAmdx4QUFBD5ey0EbWPlzQ882d9PCZB1Ky5mvMt5LLFx5x2RzfiJo0LWdvEInfPRAIufgwt8lISyApOUQ==} ++ '@musistudio/llms@file:../llms': ++ resolution: {directory: ../llms, type: directory} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} +@@ -832,7 +832,7 @@ + - supports-color + - utf-8-validate + +- '@musistudio/llms@1.0.14(ws@8.18.3)(zod@3.25.67)': ++ '@musistudio/llms@file:../llms(ws@8.18.3)(zod@3.25.67)': + dependencies: + '@anthropic-ai/sdk': 0.54.0 + '@fastify/cors': 11.0.1 +Index: src/cli.ts +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>#!/usr/bin/env node\nimport { run } from \"./index\";\nimport { showStatus } from \"./utils/status\";\nimport { executeCodeCommand } from \"./utils/codeCommand\";\nimport { cleanupPidFile, isServiceRunning } from \"./utils/processCheck\";\nimport { version } from \"../package.json\";\nimport { spawn } from \"child_process\";\nimport { PID_FILE, REFERENCE_COUNT_FILE } from \"./constants\";\nimport fs, { existsSync, readFileSync } from \"fs\";\nimport {join} from \"path\";\n\nconst command = process.argv[2];\n\nconst HELP_TEXT = `\nUsage: ccr [command]\n\nCommands:\n start Start server \n stop Stop server\n restart Restart server\n status Show server status\n code Execute claude command\n -v, version Show version information\n -h, help Show help information\n\nExample:\n ccr start\n ccr code \"Write a Hello World\"\n`;\n\nasync function waitForService(\n timeout = 10000,\n initialDelay = 1000\n): Promise {\n // Wait for an initial period to let the service initialize\n await new Promise((resolve) => setTimeout(resolve, initialDelay));\n\n const startTime = Date.now();\n while (Date.now() - startTime < timeout) {\n if (isServiceRunning()) {\n // Wait for an additional short period to ensure service is fully ready\n await new Promise((resolve) => setTimeout(resolve, 500));\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n return false;\n}\n\nasync function main() {\n switch (command) {\n case \"start\":\n run();\n break;\n case \"stop\":\n try {\n const pid = parseInt(readFileSync(PID_FILE, \"utf-8\"));\n process.kill(pid);\n cleanupPidFile();\n if (existsSync(REFERENCE_COUNT_FILE)) {\n try {\n fs.unlinkSync(REFERENCE_COUNT_FILE);\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n console.log(\n \"claude code router service has been successfully stopped.\"\n );\n } catch (e) {\n console.log(\n \"Failed to stop the service. It may have already been stopped.\"\n );\n cleanupPidFile();\n }\n break;\n case \"status\":\n await showStatus();\n break;\n case \"code\":\n if (!isServiceRunning()) {\n console.log(\"Service not running, starting service...\");\n const cliPath = join(__dirname, \"cli.js\");\n const startProcess = spawn(\"node\", [cliPath, \"start\"], {\n detached: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let errorMessage = \"\";\n startProcess.stderr?.on(\"data\", (data) => {\n errorMessage += data.toString();\n });\n\n startProcess.on(\"error\", (error) => {\n console.error(\"Failed to start service:\", error.message);\n process.exit(1);\n });\n\n startProcess.on(\"close\", (code) => {\n if (code !== 0 && errorMessage) {\n console.error(\"Failed to start service:\", errorMessage.trim());\n process.exit(1);\n }\n });\n\n startProcess.unref();\n\n if (await waitForService()) {\n executeCodeCommand(process.argv.slice(3));\n } else {\n console.error(\n \"Service startup timeout, please manually run `ccr start` to start the service\"\n );\n process.exit(1);\n }\n } else {\n executeCodeCommand(process.argv.slice(3));\n }\n break;\n case \"-v\":\n case \"version\":\n console.log(`claude-code-router version: ${version}`);\n break;\n case \"restart\":\n // Stop the service if it's running\n try {\n const pid = parseInt(readFileSync(PID_FILE, \"utf-8\"));\n process.kill(pid);\n cleanupPidFile();\n if (existsSync(REFERENCE_COUNT_FILE)) {\n try {\n fs.unlinkSync(REFERENCE_COUNT_FILE);\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n console.log(\"claude code router service has been stopped.\");\n } catch (e) {\n console.log(\"Service was not running or failed to stop.\");\n cleanupPidFile();\n }\n\n // Start the service again in the background\n console.log(\"Starting claude code router service...\");\n const cliPath = join(__dirname, \"cli.js\");\n const startProcess = spawn(\"node\", [cliPath, \"start\"], {\n detached: true,\n stdio: \"ignore\",\n });\n\n startProcess.on(\"error\", (error) => {\n console.error(\"Failed to start service:\", error);\n process.exit(1);\n });\n\n startProcess.unref();\n console.log(\"✅ Service started successfully in the background.\");\n break;\n case \"-h\":\n case \"help\":\n console.log(HELP_TEXT);\n break;\n default:\n console.log(HELP_TEXT);\n process.exit(1);\n }\n}\n\nmain().catch(console.error);\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/cli.ts b/src/cli.ts +--- a/src/cli.ts (revision 6883fff352909c2152cbbe003a17d6da9af2fb47) ++++ b/src/cli.ts (date 1753524202996) +@@ -2,12 +2,13 @@ + import { run } from "./index"; + import { showStatus } from "./utils/status"; + import { executeCodeCommand } from "./utils/codeCommand"; +-import { cleanupPidFile, isServiceRunning } from "./utils/processCheck"; ++import { cleanupPidFile, isServiceRunning, getServiceInfo } from "./utils/processCheck"; + import { version } from "../package.json"; + import { spawn } from "child_process"; + import { PID_FILE, REFERENCE_COUNT_FILE } from "./constants"; + import fs, { existsSync, readFileSync } from "fs"; + import {join} from "path"; ++import { openInBrowser } from "./utils"; + + const command = process.argv[2]; + +@@ -19,6 +20,7 @@ + stop Stop server + restart Restart server + status Show server status ++ ui Open service in browser + code Execute claude command + -v, version Show version information + -h, help Show help information +@@ -76,6 +78,53 @@ + break; + case "status": + await showStatus(); ++ break; ++ case "ui": ++ if (!isServiceRunning()) { ++ console.log("Service not running, starting service..."); ++ const cliPath = join(__dirname, "cli.js"); ++ const startProcess = spawn("node", [cliPath, "start"], { ++ detached: true, ++ stdio: ["ignore", "pipe", "pipe"], ++ }); ++ ++ let errorMessage = ""; ++ startProcess.stderr?.on("data", (data) => { ++ errorMessage += data.toString(); ++ }); ++ ++ startProcess.on("error", (error) => { ++ console.error("Failed to start service:", error.message); ++ process.exit(1); ++ }); ++ ++ startProcess.on("close", (code) => { ++ if (code !== 0 && errorMessage) { ++ console.error("Failed to start service:", errorMessage.trim()); ++ process.exit(1); ++ } ++ }); ++ ++ startProcess.unref(); ++ ++ if (!(await waitForService())) { ++ console.error( ++ "Service startup timeout, please manually run `ccr start` to start the service" ++ ); ++ process.exit(1); ++ } ++ } ++ ++ // Get service info and open in browser ++ try { ++ const serviceInfo = await getServiceInfo(); ++ const url = serviceInfo.endpoint; ++ console.log(`Opening ${url} in your browser...`); ++ await openInBrowser(`${url}/ui`); ++ } catch (error: any) { ++ console.error("Failed to open browser:", error.message); ++ process.exit(1); ++ } + break; + case "code": + if (!isServiceRunning()) { +Index: package-lock.json +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>{\n \"name\": \"@musistudio/claude-code-router\",\n \"version\": \"1.0.23\",\n \"lockfileVersion\": 3,\n \"requires\": true,\n \"packages\": {\n \"\": {\n \"name\": \"@musistudio/claude-code-router\",\n \"version\": \"1.0.23\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@musistudio/llms\": \"^1.0.10\",\n \"dotenv\": \"^16.4.7\",\n \"tiktoken\": \"^1.0.21\",\n \"uuid\": \"^11.1.0\"\n },\n \"bin\": {\n \"ccr\": \"dist/cli.js\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^24.0.15\",\n \"esbuild\": \"^0.25.1\",\n \"fastify\": \"^5.4.0\",\n \"shx\": \"^0.4.0\",\n \"typescript\": \"^5.8.2\"\n }\n },\n \"node_modules/@anthropic-ai/sdk\": {\n \"version\": \"0.54.0\",\n \"resolved\": \"https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.54.0.tgz\",\n \"integrity\": \"sha512-xyoCtHJnt/qg5GG6IgK+UJEndz8h8ljzt/caKXmq3LfBF81nC/BW6E4x2rOWCZcvsLyVW+e8U5mtIr6UCE/kJw==\",\n \"license\": \"MIT\",\n \"bin\": {\n \"anthropic-ai-sdk\": \"bin/cli\"\n }\n },\n \"node_modules/@esbuild/darwin-arm64\": {\n \"version\": \"0.25.5\",\n \"resolved\": \"https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz\",\n \"integrity\": \"sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==\",\n \"cpu\": [\n \"arm64\"\n ],\n \"dev\": true,\n \"license\": \"MIT\",\n \"optional\": true,\n \"os\": [\n \"darwin\"\n ],\n \"engines\": {\n \"node\": \">=18\"\n }\n },\n \"node_modules/@fastify/ajv-compiler\": {\n \"version\": \"4.0.2\",\n \"resolved\": \"https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.2.tgz\",\n \"integrity\": \"sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"ajv\": \"^8.12.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"fast-uri\": \"^3.0.0\"\n }\n },\n \"node_modules/@fastify/cors\": {\n \"version\": \"11.0.1\",\n \"resolved\": \"https://registry.npmjs.org/@fastify/cors/-/cors-11.0.1.tgz\",\n \"integrity\": \"sha512-dmZaE7M1f4SM8ZZuk5RhSsDJ+ezTgI7v3HHRj8Ow9CneczsPLZV6+2j2uwdaSLn8zhTv6QV0F4ZRcqdalGx1pQ==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"fastify-plugin\": \"^5.0.0\",\n \"toad-cache\": \"^3.7.0\"\n }\n },\n \"node_modules/@fastify/error\": {\n \"version\": \"4.2.0\",\n \"resolved\": \"https://registry.npmjs.org/@fastify/error/-/error-4.2.0.tgz\",\n \"integrity\": \"sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\"\n },\n \"node_modules/@fastify/fast-json-stringify-compiler\": {\n \"version\": \"5.0.3\",\n \"resolved\": \"https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.3.tgz\",\n \"integrity\": \"sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"fast-json-stringify\": \"^6.0.0\"\n }\n },\n \"node_modules/@fastify/forwarded\": {\n \"version\": \"3.0.0\",\n \"resolved\": \"https://registry.npmjs.org/@fastify/forwarded/-/forwarded-3.0.0.tgz\",\n \"integrity\": \"sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA==\",\n \"license\": \"MIT\"\n },\n \"node_modules/@fastify/merge-json-schemas\": {\n \"version\": \"0.2.1\",\n \"resolved\": \"https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz\",\n \"integrity\": \"sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"dequal\": \"^2.0.3\"\n }\n },\n \"node_modules/@fastify/proxy-addr\": {\n \"version\": \"5.0.0\",\n \"resolved\": \"https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.0.0.tgz\",\n \"integrity\": \"sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@fastify/forwarded\": \"^3.0.0\",\n \"ipaddr.js\": \"^2.1.0\"\n }\n },\n \"node_modules/@google/genai\": {\n \"version\": \"1.9.0\",\n \"resolved\": \"https://registry.npmjs.org/@google/genai/-/genai-1.9.0.tgz\",\n \"integrity\": \"sha512-w9P93OXKPMs9H1mfAx9+p3zJqQGrWBGdvK/SVc7cLZEXNHr/3+vW2eif7ZShA6wU24rNLn9z9MK2vQFUvNRI2Q==\",\n \"license\": \"Apache-2.0\",\n \"dependencies\": {\n \"google-auth-library\": \"^9.14.2\",\n \"ws\": \"^8.18.0\"\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"peerDependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.11.0\"\n },\n \"peerDependenciesMeta\": {\n \"@modelcontextprotocol/sdk\": {\n \"optional\": true\n }\n }\n },\n \"node_modules/@musistudio/llms\": {\n \"version\": \"1.0.10\",\n \"resolved\": \"https://registry.npmjs.org/@musistudio/llms/-/llms-1.0.10.tgz\",\n \"integrity\": \"sha512-s3FUykkR/IykIHb5a/5GXfwB3MSf3DjGbJlmK9injoKhSVhA9SgbP8nG2cj3AlC1Ve5bFyLS5OR4R7wxWB4oqQ==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@anthropic-ai/sdk\": \"^0.54.0\",\n \"@fastify/cors\": \"^11.0.1\",\n \"@google/genai\": \"^1.7.0\",\n \"dotenv\": \"^16.5.0\",\n \"fastify\": \"^5.4.0\",\n \"openai\": \"^5.6.0\",\n \"undici\": \"^7.10.0\",\n \"uuid\": \"^11.1.0\"\n }\n },\n \"node_modules/@nodelib/fs.scandir\": {\n \"version\": \"2.1.5\",\n \"resolved\": \"https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz\",\n \"integrity\": \"sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@nodelib/fs.stat\": \"2.0.5\",\n \"run-parallel\": \"^1.1.9\"\n },\n \"engines\": {\n \"node\": \">= 8\"\n }\n },\n \"node_modules/@nodelib/fs.stat\": {\n \"version\": \"2.0.5\",\n \"resolved\": \"https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz\",\n \"integrity\": \"sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">= 8\"\n }\n },\n \"node_modules/@nodelib/fs.walk\": {\n \"version\": \"1.2.8\",\n \"resolved\": \"https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz\",\n \"integrity\": \"sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@nodelib/fs.scandir\": \"2.1.5\",\n \"fastq\": \"^1.6.0\"\n },\n \"engines\": {\n \"node\": \">= 8\"\n }\n },\n \"node_modules/@types/node\": {\n \"version\": \"24.0.15\",\n \"resolved\": \"https://registry.npmjs.org/@types/node/-/node-24.0.15.tgz\",\n \"integrity\": \"sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"undici-types\": \"~7.8.0\"\n }\n },\n \"node_modules/abstract-logging\": {\n \"version\": \"2.0.1\",\n \"resolved\": \"https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz\",\n \"integrity\": \"sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==\",\n \"license\": \"MIT\"\n },\n \"node_modules/agent-base\": {\n \"version\": \"7.1.4\",\n \"resolved\": \"https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz\",\n \"integrity\": \"sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">= 14\"\n }\n },\n \"node_modules/ajv\": {\n \"version\": \"8.17.1\",\n \"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz\",\n \"integrity\": \"sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"fast-deep-equal\": \"^3.1.3\",\n \"fast-uri\": \"^3.0.1\",\n \"json-schema-traverse\": \"^1.0.0\",\n \"require-from-string\": \"^2.0.2\"\n },\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/epoberezkin\"\n }\n },\n \"node_modules/ajv-formats\": {\n \"version\": \"3.0.1\",\n \"resolved\": \"https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz\",\n \"integrity\": \"sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"ajv\": \"^8.0.0\"\n },\n \"peerDependencies\": {\n \"ajv\": \"^8.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"ajv\": {\n \"optional\": true\n }\n }\n },\n \"node_modules/atomic-sleep\": {\n \"version\": \"1.0.0\",\n \"resolved\": \"https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz\",\n \"integrity\": \"sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=8.0.0\"\n }\n },\n \"node_modules/avvio\": {\n \"version\": \"9.1.0\",\n \"resolved\": \"https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz\",\n \"integrity\": \"sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@fastify/error\": \"^4.0.0\",\n \"fastq\": \"^1.17.1\"\n }\n },\n \"node_modules/base64-js\": {\n \"version\": \"1.5.1\",\n \"resolved\": \"https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz\",\n \"integrity\": \"sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/feross\"\n },\n {\n \"type\": \"patreon\",\n \"url\": \"https://www.patreon.com/feross\"\n },\n {\n \"type\": \"consulting\",\n \"url\": \"https://feross.org/support\"\n }\n ],\n \"license\": \"MIT\"\n },\n \"node_modules/bignumber.js\": {\n \"version\": \"9.3.1\",\n \"resolved\": \"https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz\",\n \"integrity\": \"sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \"*\"\n }\n },\n \"node_modules/braces\": {\n \"version\": \"3.0.3\",\n \"resolved\": \"https://registry.npmjs.org/braces/-/braces-3.0.3.tgz\",\n \"integrity\": \"sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"fill-range\": \"^7.1.1\"\n },\n \"engines\": {\n \"node\": \">=8\"\n }\n },\n \"node_modules/buffer-equal-constant-time\": {\n \"version\": \"1.0.1\",\n \"resolved\": \"https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz\",\n \"integrity\": \"sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==\",\n \"license\": \"BSD-3-Clause\"\n },\n \"node_modules/cookie\": {\n \"version\": \"1.0.2\",\n \"resolved\": \"https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz\",\n \"integrity\": \"sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=18\"\n }\n },\n \"node_modules/cross-spawn\": {\n \"version\": \"6.0.6\",\n \"resolved\": \"https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz\",\n \"integrity\": \"sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"nice-try\": \"^1.0.4\",\n \"path-key\": \"^2.0.1\",\n \"semver\": \"^5.5.0\",\n \"shebang-command\": \"^1.2.0\",\n \"which\": \"^1.2.9\"\n },\n \"engines\": {\n \"node\": \">=4.8\"\n }\n },\n \"node_modules/cross-spawn/node_modules/semver\": {\n \"version\": \"5.7.2\",\n \"resolved\": \"https://registry.npmjs.org/semver/-/semver-5.7.2.tgz\",\n \"integrity\": \"sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==\",\n \"dev\": true,\n \"license\": \"ISC\",\n \"bin\": {\n \"semver\": \"bin/semver\"\n }\n },\n \"node_modules/debug\": {\n \"version\": \"4.4.1\",\n \"resolved\": \"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz\",\n \"integrity\": \"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"ms\": \"^2.1.3\"\n },\n \"engines\": {\n \"node\": \">=6.0\"\n },\n \"peerDependenciesMeta\": {\n \"supports-color\": {\n \"optional\": true\n }\n }\n },\n \"node_modules/dequal\": {\n \"version\": \"2.0.3\",\n \"resolved\": \"https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz\",\n \"integrity\": \"sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=6\"\n }\n },\n \"node_modules/dotenv\": {\n \"version\": \"16.5.0\",\n \"resolved\": \"https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz\",\n \"integrity\": \"sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==\",\n \"license\": \"BSD-2-Clause\",\n \"engines\": {\n \"node\": \">=12\"\n },\n \"funding\": {\n \"url\": \"https://dotenvx.com\"\n }\n },\n \"node_modules/ecdsa-sig-formatter\": {\n \"version\": \"1.0.11\",\n \"resolved\": \"https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz\",\n \"integrity\": \"sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==\",\n \"license\": \"Apache-2.0\",\n \"dependencies\": {\n \"safe-buffer\": \"^5.0.1\"\n }\n },\n \"node_modules/end-of-stream\": {\n \"version\": \"1.4.5\",\n \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz\",\n \"integrity\": \"sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"once\": \"^1.4.0\"\n }\n },\n \"node_modules/esbuild\": {\n \"version\": \"0.25.5\",\n \"resolved\": \"https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz\",\n \"integrity\": \"sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==\",\n \"dev\": true,\n \"hasInstallScript\": true,\n \"license\": \"MIT\",\n \"bin\": {\n \"esbuild\": \"bin/esbuild\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"optionalDependencies\": {\n \"@esbuild/aix-ppc64\": \"0.25.5\",\n \"@esbuild/android-arm\": \"0.25.5\",\n \"@esbuild/android-arm64\": \"0.25.5\",\n \"@esbuild/android-x64\": \"0.25.5\",\n \"@esbuild/darwin-arm64\": \"0.25.5\",\n \"@esbuild/darwin-x64\": \"0.25.5\",\n \"@esbuild/freebsd-arm64\": \"0.25.5\",\n \"@esbuild/freebsd-x64\": \"0.25.5\",\n \"@esbuild/linux-arm\": \"0.25.5\",\n \"@esbuild/linux-arm64\": \"0.25.5\",\n \"@esbuild/linux-ia32\": \"0.25.5\",\n \"@esbuild/linux-loong64\": \"0.25.5\",\n \"@esbuild/linux-mips64el\": \"0.25.5\",\n \"@esbuild/linux-ppc64\": \"0.25.5\",\n \"@esbuild/linux-riscv64\": \"0.25.5\",\n \"@esbuild/linux-s390x\": \"0.25.5\",\n \"@esbuild/linux-x64\": \"0.25.5\",\n \"@esbuild/netbsd-arm64\": \"0.25.5\",\n \"@esbuild/netbsd-x64\": \"0.25.5\",\n \"@esbuild/openbsd-arm64\": \"0.25.5\",\n \"@esbuild/openbsd-x64\": \"0.25.5\",\n \"@esbuild/sunos-x64\": \"0.25.5\",\n \"@esbuild/win32-arm64\": \"0.25.5\",\n \"@esbuild/win32-ia32\": \"0.25.5\",\n \"@esbuild/win32-x64\": \"0.25.5\"\n }\n },\n \"node_modules/execa\": {\n \"version\": \"1.0.0\",\n \"resolved\": \"https://registry.npmjs.org/execa/-/execa-1.0.0.tgz\",\n \"integrity\": \"sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"cross-spawn\": \"^6.0.0\",\n \"get-stream\": \"^4.0.0\",\n \"is-stream\": \"^1.1.0\",\n \"npm-run-path\": \"^2.0.0\",\n \"p-finally\": \"^1.0.0\",\n \"signal-exit\": \"^3.0.0\",\n \"strip-eof\": \"^1.0.0\"\n },\n \"engines\": {\n \"node\": \">=6\"\n }\n },\n \"node_modules/execa/node_modules/is-stream\": {\n \"version\": \"1.1.0\",\n \"resolved\": \"https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz\",\n \"integrity\": \"sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=0.10.0\"\n }\n },\n \"node_modules/extend\": {\n \"version\": \"3.0.2\",\n \"resolved\": \"https://registry.npmjs.org/extend/-/extend-3.0.2.tgz\",\n \"integrity\": \"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==\",\n \"license\": \"MIT\"\n },\n \"node_modules/fast-decode-uri-component\": {\n \"version\": \"1.0.1\",\n \"resolved\": \"https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz\",\n \"integrity\": \"sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==\",\n \"license\": \"MIT\"\n },\n \"node_modules/fast-deep-equal\": {\n \"version\": \"3.1.3\",\n \"resolved\": \"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz\",\n \"integrity\": \"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==\",\n \"license\": \"MIT\"\n },\n \"node_modules/fast-glob\": {\n \"version\": \"3.3.3\",\n \"resolved\": \"https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz\",\n \"integrity\": \"sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@nodelib/fs.stat\": \"^2.0.2\",\n \"@nodelib/fs.walk\": \"^1.2.3\",\n \"glob-parent\": \"^5.1.2\",\n \"merge2\": \"^1.3.0\",\n \"micromatch\": \"^4.0.8\"\n },\n \"engines\": {\n \"node\": \">=8.6.0\"\n }\n },\n \"node_modules/fast-json-stringify\": {\n \"version\": \"6.0.1\",\n \"resolved\": \"https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.1.tgz\",\n \"integrity\": \"sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@fastify/merge-json-schemas\": \"^0.2.0\",\n \"ajv\": \"^8.12.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"fast-uri\": \"^3.0.0\",\n \"json-schema-ref-resolver\": \"^2.0.0\",\n \"rfdc\": \"^1.2.0\"\n }\n },\n \"node_modules/fast-querystring\": {\n \"version\": \"1.1.2\",\n \"resolved\": \"https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz\",\n \"integrity\": \"sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"fast-decode-uri-component\": \"^1.0.1\"\n }\n },\n \"node_modules/fast-redact\": {\n \"version\": \"3.5.0\",\n \"resolved\": \"https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz\",\n \"integrity\": \"sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=6\"\n }\n },\n \"node_modules/fast-uri\": {\n \"version\": \"3.0.6\",\n \"resolved\": \"https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz\",\n \"integrity\": \"sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"BSD-3-Clause\"\n },\n \"node_modules/fastify\": {\n \"version\": \"5.4.0\",\n \"resolved\": \"https://registry.npmjs.org/fastify/-/fastify-5.4.0.tgz\",\n \"integrity\": \"sha512-I4dVlUe+WNQAhKSyv15w+dwUh2EPiEl4X2lGYMmNSgF83WzTMAPKGdWEv5tPsCQOb+SOZwz8Vlta2vF+OeDgRw==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@fastify/ajv-compiler\": \"^4.0.0\",\n \"@fastify/error\": \"^4.0.0\",\n \"@fastify/fast-json-stringify-compiler\": \"^5.0.0\",\n \"@fastify/proxy-addr\": \"^5.0.0\",\n \"abstract-logging\": \"^2.0.1\",\n \"avvio\": \"^9.0.0\",\n \"fast-json-stringify\": \"^6.0.0\",\n \"find-my-way\": \"^9.0.0\",\n \"light-my-request\": \"^6.0.0\",\n \"pino\": \"^9.0.0\",\n \"process-warning\": \"^5.0.0\",\n \"rfdc\": \"^1.3.1\",\n \"secure-json-parse\": \"^4.0.0\",\n \"semver\": \"^7.6.0\",\n \"toad-cache\": \"^3.7.0\"\n }\n },\n \"node_modules/fastify-plugin\": {\n \"version\": \"5.0.1\",\n \"resolved\": \"https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.0.1.tgz\",\n \"integrity\": \"sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==\",\n \"license\": \"MIT\"\n },\n \"node_modules/fastq\": {\n \"version\": \"1.19.1\",\n \"resolved\": \"https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz\",\n \"integrity\": \"sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==\",\n \"license\": \"ISC\",\n \"dependencies\": {\n \"reusify\": \"^1.0.4\"\n }\n },\n \"node_modules/fill-range\": {\n \"version\": \"7.1.1\",\n \"resolved\": \"https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz\",\n \"integrity\": \"sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"to-regex-range\": \"^5.0.1\"\n },\n \"engines\": {\n \"node\": \">=8\"\n }\n },\n \"node_modules/find-my-way\": {\n \"version\": \"9.3.0\",\n \"resolved\": \"https://registry.npmjs.org/find-my-way/-/find-my-way-9.3.0.tgz\",\n \"integrity\": \"sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"fast-deep-equal\": \"^3.1.3\",\n \"fast-querystring\": \"^1.0.0\",\n \"safe-regex2\": \"^5.0.0\"\n },\n \"engines\": {\n \"node\": \">=20\"\n }\n },\n \"node_modules/function-bind\": {\n \"version\": \"1.1.2\",\n \"resolved\": \"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz\",\n \"integrity\": \"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"funding\": {\n \"url\": \"https://github.com/sponsors/ljharb\"\n }\n },\n \"node_modules/gaxios\": {\n \"version\": \"6.7.1\",\n \"resolved\": \"https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz\",\n \"integrity\": \"sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==\",\n \"license\": \"Apache-2.0\",\n \"dependencies\": {\n \"extend\": \"^3.0.2\",\n \"https-proxy-agent\": \"^7.0.1\",\n \"is-stream\": \"^2.0.0\",\n \"node-fetch\": \"^2.6.9\",\n \"uuid\": \"^9.0.1\"\n },\n \"engines\": {\n \"node\": \">=14\"\n }\n },\n \"node_modules/gaxios/node_modules/uuid\": {\n \"version\": \"9.0.1\",\n \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz\",\n \"integrity\": \"sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==\",\n \"funding\": [\n \"https://github.com/sponsors/broofa\",\n \"https://github.com/sponsors/ctavan\"\n ],\n \"license\": \"MIT\",\n \"bin\": {\n \"uuid\": \"dist/bin/uuid\"\n }\n },\n \"node_modules/gcp-metadata\": {\n \"version\": \"6.1.1\",\n \"resolved\": \"https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz\",\n \"integrity\": \"sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==\",\n \"license\": \"Apache-2.0\",\n \"dependencies\": {\n \"gaxios\": \"^6.1.1\",\n \"google-logging-utils\": \"^0.0.2\",\n \"json-bigint\": \"^1.0.0\"\n },\n \"engines\": {\n \"node\": \">=14\"\n }\n },\n \"node_modules/get-stream\": {\n \"version\": \"4.1.0\",\n \"resolved\": \"https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz\",\n \"integrity\": \"sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"pump\": \"^3.0.0\"\n },\n \"engines\": {\n \"node\": \">=6\"\n }\n },\n \"node_modules/glob-parent\": {\n \"version\": \"5.1.2\",\n \"resolved\": \"https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz\",\n \"integrity\": \"sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==\",\n \"dev\": true,\n \"license\": \"ISC\",\n \"dependencies\": {\n \"is-glob\": \"^4.0.1\"\n },\n \"engines\": {\n \"node\": \">= 6\"\n }\n },\n \"node_modules/google-auth-library\": {\n \"version\": \"9.15.1\",\n \"resolved\": \"https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz\",\n \"integrity\": \"sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==\",\n \"license\": \"Apache-2.0\",\n \"dependencies\": {\n \"base64-js\": \"^1.3.0\",\n \"ecdsa-sig-formatter\": \"^1.0.11\",\n \"gaxios\": \"^6.1.1\",\n \"gcp-metadata\": \"^6.1.0\",\n \"gtoken\": \"^7.0.0\",\n \"jws\": \"^4.0.0\"\n },\n \"engines\": {\n \"node\": \">=14\"\n }\n },\n \"node_modules/google-logging-utils\": {\n \"version\": \"0.0.2\",\n \"resolved\": \"https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz\",\n \"integrity\": \"sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==\",\n \"license\": \"Apache-2.0\",\n \"engines\": {\n \"node\": \">=14\"\n }\n },\n \"node_modules/gtoken\": {\n \"version\": \"7.1.0\",\n \"resolved\": \"https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz\",\n \"integrity\": \"sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"gaxios\": \"^6.0.0\",\n \"jws\": \"^4.0.0\"\n },\n \"engines\": {\n \"node\": \">=14.0.0\"\n }\n },\n \"node_modules/hasown\": {\n \"version\": \"2.0.2\",\n \"resolved\": \"https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz\",\n \"integrity\": \"sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"function-bind\": \"^1.1.2\"\n },\n \"engines\": {\n \"node\": \">= 0.4\"\n }\n },\n \"node_modules/https-proxy-agent\": {\n \"version\": \"7.0.6\",\n \"resolved\": \"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz\",\n \"integrity\": \"sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"agent-base\": \"^7.1.2\",\n \"debug\": \"4\"\n },\n \"engines\": {\n \"node\": \">= 14\"\n }\n },\n \"node_modules/interpret\": {\n \"version\": \"1.4.0\",\n \"resolved\": \"https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz\",\n \"integrity\": \"sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">= 0.10\"\n }\n },\n \"node_modules/ipaddr.js\": {\n \"version\": \"2.2.0\",\n \"resolved\": \"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz\",\n \"integrity\": \"sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">= 10\"\n }\n },\n \"node_modules/is-core-module\": {\n \"version\": \"2.16.1\",\n \"resolved\": \"https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz\",\n \"integrity\": \"sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"hasown\": \"^2.0.2\"\n },\n \"engines\": {\n \"node\": \">= 0.4\"\n },\n \"funding\": {\n \"url\": \"https://github.com/sponsors/ljharb\"\n }\n },\n \"node_modules/is-extglob\": {\n \"version\": \"2.1.1\",\n \"resolved\": \"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz\",\n \"integrity\": \"sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=0.10.0\"\n }\n },\n \"node_modules/is-glob\": {\n \"version\": \"4.0.3\",\n \"resolved\": \"https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz\",\n \"integrity\": \"sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"is-extglob\": \"^2.1.1\"\n },\n \"engines\": {\n \"node\": \">=0.10.0\"\n }\n },\n \"node_modules/is-number\": {\n \"version\": \"7.0.0\",\n \"resolved\": \"https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz\",\n \"integrity\": \"sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=0.12.0\"\n }\n },\n \"node_modules/is-stream\": {\n \"version\": \"2.0.1\",\n \"resolved\": \"https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz\",\n \"integrity\": \"sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=8\"\n },\n \"funding\": {\n \"url\": \"https://github.com/sponsors/sindresorhus\"\n }\n },\n \"node_modules/isexe\": {\n \"version\": \"2.0.0\",\n \"resolved\": \"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz\",\n \"integrity\": \"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==\",\n \"dev\": true,\n \"license\": \"ISC\"\n },\n \"node_modules/json-bigint\": {\n \"version\": \"1.0.0\",\n \"resolved\": \"https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz\",\n \"integrity\": \"sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"bignumber.js\": \"^9.0.0\"\n }\n },\n \"node_modules/json-schema-ref-resolver\": {\n \"version\": \"2.0.1\",\n \"resolved\": \"https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-2.0.1.tgz\",\n \"integrity\": \"sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"dequal\": \"^2.0.3\"\n }\n },\n \"node_modules/json-schema-traverse\": {\n \"version\": \"1.0.0\",\n \"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz\",\n \"integrity\": \"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==\",\n \"license\": \"MIT\"\n },\n \"node_modules/jwa\": {\n \"version\": \"2.0.1\",\n \"resolved\": \"https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz\",\n \"integrity\": \"sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"buffer-equal-constant-time\": \"^1.0.1\",\n \"ecdsa-sig-formatter\": \"1.0.11\",\n \"safe-buffer\": \"^5.0.1\"\n }\n },\n \"node_modules/jws\": {\n \"version\": \"4.0.0\",\n \"resolved\": \"https://registry.npmjs.org/jws/-/jws-4.0.0.tgz\",\n \"integrity\": \"sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"jwa\": \"^2.0.0\",\n \"safe-buffer\": \"^5.0.1\"\n }\n },\n \"node_modules/light-my-request\": {\n \"version\": \"6.6.0\",\n \"resolved\": \"https://registry.npmjs.org/light-my-request/-/light-my-request-6.6.0.tgz\",\n \"integrity\": \"sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"BSD-3-Clause\",\n \"dependencies\": {\n \"cookie\": \"^1.0.1\",\n \"process-warning\": \"^4.0.0\",\n \"set-cookie-parser\": \"^2.6.0\"\n }\n },\n \"node_modules/light-my-request/node_modules/process-warning\": {\n \"version\": \"4.0.1\",\n \"resolved\": \"https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz\",\n \"integrity\": \"sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\"\n },\n \"node_modules/merge2\": {\n \"version\": \"1.4.1\",\n \"resolved\": \"https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz\",\n \"integrity\": \"sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">= 8\"\n }\n },\n \"node_modules/micromatch\": {\n \"version\": \"4.0.8\",\n \"resolved\": \"https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz\",\n \"integrity\": \"sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"braces\": \"^3.0.3\",\n \"picomatch\": \"^2.3.1\"\n },\n \"engines\": {\n \"node\": \">=8.6\"\n }\n },\n \"node_modules/minimist\": {\n \"version\": \"1.2.8\",\n \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz\",\n \"integrity\": \"sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"funding\": {\n \"url\": \"https://github.com/sponsors/ljharb\"\n }\n },\n \"node_modules/ms\": {\n \"version\": \"2.1.3\",\n \"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz\",\n \"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n \"license\": \"MIT\"\n },\n \"node_modules/nice-try\": {\n \"version\": \"1.0.5\",\n \"resolved\": \"https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz\",\n \"integrity\": \"sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==\",\n \"dev\": true,\n \"license\": \"MIT\"\n },\n \"node_modules/node-fetch\": {\n \"version\": \"2.7.0\",\n \"resolved\": \"https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz\",\n \"integrity\": \"sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"whatwg-url\": \"^5.0.0\"\n },\n \"engines\": {\n \"node\": \"4.x || >=6.0.0\"\n },\n \"peerDependencies\": {\n \"encoding\": \"^0.1.0\"\n },\n \"peerDependenciesMeta\": {\n \"encoding\": {\n \"optional\": true\n }\n }\n },\n \"node_modules/npm-run-path\": {\n \"version\": \"2.0.2\",\n \"resolved\": \"https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz\",\n \"integrity\": \"sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"path-key\": \"^2.0.0\"\n },\n \"engines\": {\n \"node\": \">=4\"\n }\n },\n \"node_modules/on-exit-leak-free\": {\n \"version\": \"2.1.2\",\n \"resolved\": \"https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz\",\n \"integrity\": \"sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=14.0.0\"\n }\n },\n \"node_modules/once\": {\n \"version\": \"1.4.0\",\n \"resolved\": \"https://registry.npmjs.org/once/-/once-1.4.0.tgz\",\n \"integrity\": \"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==\",\n \"dev\": true,\n \"license\": \"ISC\",\n \"dependencies\": {\n \"wrappy\": \"1\"\n }\n },\n \"node_modules/openai\": {\n \"version\": \"5.9.0\",\n \"resolved\": \"https://registry.npmjs.org/openai/-/openai-5.9.0.tgz\",\n \"integrity\": \"sha512-cmLC0pfqLLhBGxE4aZPyRPjydgYCncppV2ClQkKmW79hNjCvmzkfhz8rN5/YVDmjVQlFV+UsF1JIuNjNgeagyQ==\",\n \"license\": \"Apache-2.0\",\n \"bin\": {\n \"openai\": \"bin/cli\"\n },\n \"peerDependencies\": {\n \"ws\": \"^8.18.0\",\n \"zod\": \"^3.23.8\"\n },\n \"peerDependenciesMeta\": {\n \"ws\": {\n \"optional\": true\n },\n \"zod\": {\n \"optional\": true\n }\n }\n },\n \"node_modules/p-finally\": {\n \"version\": \"1.0.0\",\n \"resolved\": \"https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz\",\n \"integrity\": \"sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=4\"\n }\n },\n \"node_modules/path-key\": {\n \"version\": \"2.0.1\",\n \"resolved\": \"https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz\",\n \"integrity\": \"sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=4\"\n }\n },\n \"node_modules/path-parse\": {\n \"version\": \"1.0.7\",\n \"resolved\": \"https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz\",\n \"integrity\": \"sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==\",\n \"dev\": true,\n \"license\": \"MIT\"\n },\n \"node_modules/picomatch\": {\n \"version\": \"2.3.1\",\n \"resolved\": \"https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz\",\n \"integrity\": \"sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=8.6\"\n },\n \"funding\": {\n \"url\": \"https://github.com/sponsors/jonschlinkert\"\n }\n },\n \"node_modules/pino\": {\n \"version\": \"9.7.0\",\n \"resolved\": \"https://registry.npmjs.org/pino/-/pino-9.7.0.tgz\",\n \"integrity\": \"sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"atomic-sleep\": \"^1.0.0\",\n \"fast-redact\": \"^3.1.1\",\n \"on-exit-leak-free\": \"^2.1.0\",\n \"pino-abstract-transport\": \"^2.0.0\",\n \"pino-std-serializers\": \"^7.0.0\",\n \"process-warning\": \"^5.0.0\",\n \"quick-format-unescaped\": \"^4.0.3\",\n \"real-require\": \"^0.2.0\",\n \"safe-stable-stringify\": \"^2.3.1\",\n \"sonic-boom\": \"^4.0.1\",\n \"thread-stream\": \"^3.0.0\"\n },\n \"bin\": {\n \"pino\": \"bin.js\"\n }\n },\n \"node_modules/pino-abstract-transport\": {\n \"version\": \"2.0.0\",\n \"resolved\": \"https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz\",\n \"integrity\": \"sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"split2\": \"^4.0.0\"\n }\n },\n \"node_modules/pino-std-serializers\": {\n \"version\": \"7.0.0\",\n \"resolved\": \"https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz\",\n \"integrity\": \"sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==\",\n \"license\": \"MIT\"\n },\n \"node_modules/process-warning\": {\n \"version\": \"5.0.0\",\n \"resolved\": \"https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz\",\n \"integrity\": \"sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\"\n },\n \"node_modules/pump\": {\n \"version\": \"3.0.3\",\n \"resolved\": \"https://registry.npmjs.org/pump/-/pump-3.0.3.tgz\",\n \"integrity\": \"sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"end-of-stream\": \"^1.1.0\",\n \"once\": \"^1.3.1\"\n }\n },\n \"node_modules/queue-microtask\": {\n \"version\": \"1.2.3\",\n \"resolved\": \"https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz\",\n \"integrity\": \"sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==\",\n \"dev\": true,\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/feross\"\n },\n {\n \"type\": \"patreon\",\n \"url\": \"https://www.patreon.com/feross\"\n },\n {\n \"type\": \"consulting\",\n \"url\": \"https://feross.org/support\"\n }\n ],\n \"license\": \"MIT\"\n },\n \"node_modules/quick-format-unescaped\": {\n \"version\": \"4.0.4\",\n \"resolved\": \"https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz\",\n \"integrity\": \"sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==\",\n \"license\": \"MIT\"\n },\n \"node_modules/real-require\": {\n \"version\": \"0.2.0\",\n \"resolved\": \"https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz\",\n \"integrity\": \"sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">= 12.13.0\"\n }\n },\n \"node_modules/rechoir\": {\n \"version\": \"0.6.2\",\n \"resolved\": \"https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz\",\n \"integrity\": \"sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==\",\n \"dev\": true,\n \"dependencies\": {\n \"resolve\": \"^1.1.6\"\n },\n \"engines\": {\n \"node\": \">= 0.10\"\n }\n },\n \"node_modules/require-from-string\": {\n \"version\": \"2.0.2\",\n \"resolved\": \"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz\",\n \"integrity\": \"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=0.10.0\"\n }\n },\n \"node_modules/resolve\": {\n \"version\": \"1.22.10\",\n \"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz\",\n \"integrity\": \"sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"is-core-module\": \"^2.16.0\",\n \"path-parse\": \"^1.0.7\",\n \"supports-preserve-symlinks-flag\": \"^1.0.0\"\n },\n \"bin\": {\n \"resolve\": \"bin/resolve\"\n },\n \"engines\": {\n \"node\": \">= 0.4\"\n },\n \"funding\": {\n \"url\": \"https://github.com/sponsors/ljharb\"\n }\n },\n \"node_modules/ret\": {\n \"version\": \"0.5.0\",\n \"resolved\": \"https://registry.npmjs.org/ret/-/ret-0.5.0.tgz\",\n \"integrity\": \"sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=10\"\n }\n },\n \"node_modules/reusify\": {\n \"version\": \"1.1.0\",\n \"resolved\": \"https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz\",\n \"integrity\": \"sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"iojs\": \">=1.0.0\",\n \"node\": \">=0.10.0\"\n }\n },\n \"node_modules/rfdc\": {\n \"version\": \"1.4.1\",\n \"resolved\": \"https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz\",\n \"integrity\": \"sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==\",\n \"license\": \"MIT\"\n },\n \"node_modules/run-parallel\": {\n \"version\": \"1.2.0\",\n \"resolved\": \"https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz\",\n \"integrity\": \"sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==\",\n \"dev\": true,\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/feross\"\n },\n {\n \"type\": \"patreon\",\n \"url\": \"https://www.patreon.com/feross\"\n },\n {\n \"type\": \"consulting\",\n \"url\": \"https://feross.org/support\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"queue-microtask\": \"^1.2.2\"\n }\n },\n \"node_modules/safe-buffer\": {\n \"version\": \"5.2.1\",\n \"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz\",\n \"integrity\": \"sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/feross\"\n },\n {\n \"type\": \"patreon\",\n \"url\": \"https://www.patreon.com/feross\"\n },\n {\n \"type\": \"consulting\",\n \"url\": \"https://feross.org/support\"\n }\n ],\n \"license\": \"MIT\"\n },\n \"node_modules/safe-regex2\": {\n \"version\": \"5.0.0\",\n \"resolved\": \"https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.0.0.tgz\",\n \"integrity\": \"sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"MIT\",\n \"dependencies\": {\n \"ret\": \"~0.5.0\"\n }\n },\n \"node_modules/safe-stable-stringify\": {\n \"version\": \"2.5.0\",\n \"resolved\": \"https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz\",\n \"integrity\": \"sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=10\"\n }\n },\n \"node_modules/secure-json-parse\": {\n \"version\": \"4.0.0\",\n \"resolved\": \"https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.0.0.tgz\",\n \"integrity\": \"sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==\",\n \"funding\": [\n {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/fastify\"\n },\n {\n \"type\": \"opencollective\",\n \"url\": \"https://opencollective.com/fastify\"\n }\n ],\n \"license\": \"BSD-3-Clause\"\n },\n \"node_modules/semver\": {\n \"version\": \"7.7.2\",\n \"resolved\": \"https://registry.npmjs.org/semver/-/semver-7.7.2.tgz\",\n \"integrity\": \"sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==\",\n \"license\": \"ISC\",\n \"bin\": {\n \"semver\": \"bin/semver.js\"\n },\n \"engines\": {\n \"node\": \">=10\"\n }\n },\n \"node_modules/set-cookie-parser\": {\n \"version\": \"2.7.1\",\n \"resolved\": \"https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz\",\n \"integrity\": \"sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==\",\n \"license\": \"MIT\"\n },\n \"node_modules/shebang-command\": {\n \"version\": \"1.2.0\",\n \"resolved\": \"https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz\",\n \"integrity\": \"sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"shebang-regex\": \"^1.0.0\"\n },\n \"engines\": {\n \"node\": \">=0.10.0\"\n }\n },\n \"node_modules/shebang-regex\": {\n \"version\": \"1.0.0\",\n \"resolved\": \"https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz\",\n \"integrity\": \"sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=0.10.0\"\n }\n },\n \"node_modules/shelljs\": {\n \"version\": \"0.9.2\",\n \"resolved\": \"https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz\",\n \"integrity\": \"sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==\",\n \"dev\": true,\n \"license\": \"BSD-3-Clause\",\n \"dependencies\": {\n \"execa\": \"^1.0.0\",\n \"fast-glob\": \"^3.3.2\",\n \"interpret\": \"^1.0.0\",\n \"rechoir\": \"^0.6.2\"\n },\n \"bin\": {\n \"shjs\": \"bin/shjs\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n },\n \"node_modules/shx\": {\n \"version\": \"0.4.0\",\n \"resolved\": \"https://registry.npmjs.org/shx/-/shx-0.4.0.tgz\",\n \"integrity\": \"sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"minimist\": \"^1.2.8\",\n \"shelljs\": \"^0.9.2\"\n },\n \"bin\": {\n \"shx\": \"lib/cli.js\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n },\n \"node_modules/signal-exit\": {\n \"version\": \"3.0.7\",\n \"resolved\": \"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz\",\n \"integrity\": \"sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==\",\n \"dev\": true,\n \"license\": \"ISC\"\n },\n \"node_modules/sonic-boom\": {\n \"version\": \"4.2.0\",\n \"resolved\": \"https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz\",\n \"integrity\": \"sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"atomic-sleep\": \"^1.0.0\"\n }\n },\n \"node_modules/split2\": {\n \"version\": \"4.2.0\",\n \"resolved\": \"https://registry.npmjs.org/split2/-/split2-4.2.0.tgz\",\n \"integrity\": \"sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==\",\n \"license\": \"ISC\",\n \"engines\": {\n \"node\": \">= 10.x\"\n }\n },\n \"node_modules/strip-eof\": {\n \"version\": \"1.0.0\",\n \"resolved\": \"https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz\",\n \"integrity\": \"sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=0.10.0\"\n }\n },\n \"node_modules/supports-preserve-symlinks-flag\": {\n \"version\": \"1.0.0\",\n \"resolved\": \"https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz\",\n \"integrity\": \"sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">= 0.4\"\n },\n \"funding\": {\n \"url\": \"https://github.com/sponsors/ljharb\"\n }\n },\n \"node_modules/thread-stream\": {\n \"version\": \"3.1.0\",\n \"resolved\": \"https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz\",\n \"integrity\": \"sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"real-require\": \"^0.2.0\"\n }\n },\n \"node_modules/tiktoken\": {\n \"version\": \"1.0.21\",\n \"resolved\": \"https://registry.npmjs.org/tiktoken/-/tiktoken-1.0.21.tgz\",\n \"integrity\": \"sha512-/kqtlepLMptX0OgbYD9aMYbM7EFrMZCL7EoHM8Psmg2FuhXoo/bH64KqOiZGGwa6oS9TPdSEDKBnV2LuB8+5vQ==\",\n \"license\": \"MIT\"\n },\n \"node_modules/to-regex-range\": {\n \"version\": \"5.0.1\",\n \"resolved\": \"https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz\",\n \"integrity\": \"sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==\",\n \"dev\": true,\n \"license\": \"MIT\",\n \"dependencies\": {\n \"is-number\": \"^7.0.0\"\n },\n \"engines\": {\n \"node\": \">=8.0\"\n }\n },\n \"node_modules/toad-cache\": {\n \"version\": \"3.7.0\",\n \"resolved\": \"https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz\",\n \"integrity\": \"sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=12\"\n }\n },\n \"node_modules/tr46\": {\n \"version\": \"0.0.3\",\n \"resolved\": \"https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz\",\n \"integrity\": \"sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==\",\n \"license\": \"MIT\"\n },\n \"node_modules/typescript\": {\n \"version\": \"5.8.3\",\n \"resolved\": \"https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz\",\n \"integrity\": \"sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==\",\n \"dev\": true,\n \"license\": \"Apache-2.0\",\n \"bin\": {\n \"tsc\": \"bin/tsc\",\n \"tsserver\": \"bin/tsserver\"\n },\n \"engines\": {\n \"node\": \">=14.17\"\n }\n },\n \"node_modules/undici\": {\n \"version\": \"7.11.0\",\n \"resolved\": \"https://registry.npmjs.org/undici/-/undici-7.11.0.tgz\",\n \"integrity\": \"sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=20.18.1\"\n }\n },\n \"node_modules/undici-types\": {\n \"version\": \"7.8.0\",\n \"resolved\": \"https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz\",\n \"integrity\": \"sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==\",\n \"dev\": true,\n \"license\": \"MIT\"\n },\n \"node_modules/uuid\": {\n \"version\": \"11.1.0\",\n \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz\",\n \"integrity\": \"sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==\",\n \"funding\": [\n \"https://github.com/sponsors/broofa\",\n \"https://github.com/sponsors/ctavan\"\n ],\n \"license\": \"MIT\",\n \"bin\": {\n \"uuid\": \"dist/esm/bin/uuid\"\n }\n },\n \"node_modules/webidl-conversions\": {\n \"version\": \"3.0.1\",\n \"resolved\": \"https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz\",\n \"integrity\": \"sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==\",\n \"license\": \"BSD-2-Clause\"\n },\n \"node_modules/whatwg-url\": {\n \"version\": \"5.0.0\",\n \"resolved\": \"https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz\",\n \"integrity\": \"sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"tr46\": \"~0.0.3\",\n \"webidl-conversions\": \"^3.0.0\"\n }\n },\n \"node_modules/which\": {\n \"version\": \"1.3.1\",\n \"resolved\": \"https://registry.npmjs.org/which/-/which-1.3.1.tgz\",\n \"integrity\": \"sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==\",\n \"dev\": true,\n \"license\": \"ISC\",\n \"dependencies\": {\n \"isexe\": \"^2.0.0\"\n },\n \"bin\": {\n \"which\": \"bin/which\"\n }\n },\n \"node_modules/wrappy\": {\n \"version\": \"1.0.2\",\n \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz\",\n \"integrity\": \"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==\",\n \"dev\": true,\n \"license\": \"ISC\"\n },\n \"node_modules/ws\": {\n \"version\": \"8.18.3\",\n \"resolved\": \"https://registry.npmjs.org/ws/-/ws-8.18.3.tgz\",\n \"integrity\": \"sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=10.0.0\"\n },\n \"peerDependencies\": {\n \"bufferutil\": \"^4.0.1\",\n \"utf-8-validate\": \">=5.0.2\"\n },\n \"peerDependenciesMeta\": {\n \"bufferutil\": {\n \"optional\": true\n },\n \"utf-8-validate\": {\n \"optional\": true\n }\n }\n }\n }\n}\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/package-lock.json b/package-lock.json +--- a/package-lock.json (revision 6883fff352909c2152cbbe003a17d6da9af2fb47) ++++ b/package-lock.json (date 1753523832439) +@@ -1,16 +1,17 @@ + { + "name": "@musistudio/claude-code-router", +- "version": "1.0.23", ++ "version": "1.0.27", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@musistudio/claude-code-router", +- "version": "1.0.23", ++ "version": "1.0.27", + "license": "MIT", + "dependencies": { +- "@musistudio/llms": "^1.0.10", ++ "@musistudio/llms": "^1.0.14", + "dotenv": "^16.4.7", ++ "json5": "^2.2.3", + "tiktoken": "^1.0.21", + "uuid": "^11.1.0" + }, +@@ -184,9 +185,9 @@ + } + }, + "node_modules/@musistudio/llms": { +- "version": "1.0.10", +- "resolved": "https://registry.npmjs.org/@musistudio/llms/-/llms-1.0.10.tgz", +- "integrity": "sha512-s3FUykkR/IykIHb5a/5GXfwB3MSf3DjGbJlmK9injoKhSVhA9SgbP8nG2cj3AlC1Ve5bFyLS5OR4R7wxWB4oqQ==", ++ "version": "1.0.14", ++ "resolved": "https://registry.npmjs.org/@musistudio/llms/-/llms-1.0.14.tgz", ++ "integrity": "sha512-56+i7hAmdx4QUFBD5ey0EbWPlzQ882d9PCZB1Ky5mvMt5LLFx5x2RzfiJo0LWdvEInfPRAIufgwt8lISyApOUQ==", + "license": "MIT", + "dependencies": { + "@anthropic-ai/sdk": "^0.54.0", +@@ -194,6 +195,7 @@ + "@google/genai": "^1.7.0", + "dotenv": "^16.5.0", + "fastify": "^5.4.0", ++ "json5": "^2.2.3", + "openai": "^5.6.0", + "undici": "^7.10.0", + "uuid": "^11.1.0" +@@ -958,6 +960,18 @@ + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, ++ "node_modules/json5": { ++ "version": "2.2.3", ++ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", ++ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", ++ "license": "MIT", ++ "bin": { ++ "json5": "lib/cli.js" ++ }, ++ "engines": { ++ "node": ">=6" ++ } ++ }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..058607d --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1753546022239 + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8189744..659af2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,27 +1,16 @@ { "name": "claude-code-router", - "version": "0.1.0", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "claude-code-router", - "version": "0.1.0", + "version": "3.0.0", "dependencies": { - "@the-next-ai/ai-gateway": "file:../../next-ai/gateway", - "baseui": "^16.1.1", - "clsx": "^2.1.1", - "lucide-react": "^1.17.0", - "motion": "^12.40.0", + "@the-next-ai/ai-gateway": "file:../next-ai/ai-gateway", "node-forge": "^1.4.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "recharts": "^3.8.1", "sql.js": "^1.14.1", - "styletron-engine-atomic": "^1.6.2", - "styletron-react": "^6.1.1", - "tailwind-merge": "^3.6.0", - "tailwindcss": "^4.3.0", "undici": "^7.27.2" }, "devDependencies": { @@ -31,9 +20,20 @@ "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "@types/sql.js": "^1.4.11", + "baseui": "^16.1.1", + "clsx": "^2.1.1", "electron": "^42.3.3", "electron-builder": "^26.8.1", "esbuild": "^0.27.7", + "lucide-react": "^1.17.0", + "motion": "^12.40.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "recharts": "^3.8.1", + "styletron-engine-atomic": "^1.6.2", + "styletron-react": "^6.1.1", + "tailwind-merge": "^3.6.0", + "tailwindcss": "^4.3.0", "typescript": "^5.9.3" } }, @@ -41,6 +41,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -50,12 +51,14 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==", + "dev": true, "license": "MIT" }, "node_modules/@date-io/date-fns": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-2.17.0.tgz", "integrity": "sha512-L0hWZ/mTpy3Gx/xXJ5tq5CzHo0L7ry6KEO9/w/JWiFWFLZgiNVo3ex92gOl3zmzjHqY/3Ev+5sehAr8UnGLEng==", + "dev": true, "license": "MIT", "dependencies": { "@date-io/core": "^2.17.0" @@ -73,6 +76,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.17.0.tgz", "integrity": "sha512-e4nb4CDZU4k0WRVhz1Wvl7d+hFsedObSauDHKtZwU9kt7gdYEAzKgnrSCTHsEaXrDumdrkCYTeZ0Tmyk7uV4tw==", + "dev": true, "license": "MIT", "dependencies": { "@date-io/core": "^2.17.0" @@ -86,6 +90,16 @@ } } }, + "node_modules/@electron-internal/extract-zip": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.3.tgz", + "integrity": "sha512-OjKpjB7gohtEjZiq6nDx1egqjZJhGPN1iFOIED+NFhB/MMkXw/XRcHjh1DGXKT5z2W9eW7Jy2UKU3gpjvusFTQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=22.12.0" + } + }, "node_modules/@electron/asar": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", @@ -122,6 +136,38 @@ "concat-map": "0.0.1" } }, + "node_modules/@electron/asar/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@electron/asar/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@electron/asar/node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -1055,6 +1101,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "dev": true, "license": "ISC", "dependencies": { "get-stream": "^6.0.1", @@ -1064,28 +1111,18 @@ "geojson-rewind": "geojson-rewind" } }, - "node_modules/@mapbox/geojson-rewind/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@mapbox/geojson-types": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==", + "dev": true, "license": "ISC" }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -1094,6 +1131,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", + "dev": true, "license": "BSD-3-Clause", "peerDependencies": { "mapbox-gl": ">=0.32.1 <2.0.0" @@ -1103,24 +1141,28 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "dev": true, "license": "ISC" }, "node_modules/@mapbox/tiny-sdf": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/@mapbox/unitbezier": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@mapbox/point-geometry": "~0.1.0" @@ -1130,6 +1172,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "dev": true, "license": "ISC", "engines": { "node": ">=6.0.0" @@ -1139,6 +1182,7 @@ "version": "3.6.3", "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz", "integrity": "sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.0", @@ -1159,17 +1203,17 @@ } }, "node_modules/@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "detect-libc": "^2.0.3", + "detect-libc": "^1.0.3", "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { "node": ">= 10.0.0" @@ -1179,25 +1223,25 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6" + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", "cpu": [ "arm64" ], @@ -1216,9 +1260,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", "cpu": [ "arm64" ], @@ -1237,9 +1281,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", "cpu": [ "x64" ], @@ -1258,9 +1302,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", "cpu": [ "x64" ], @@ -1279,9 +1323,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", "cpu": [ "arm" ], @@ -1300,9 +1344,9 @@ } }, "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", "cpu": [ "arm" ], @@ -1321,9 +1365,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", "cpu": [ "arm64" ], @@ -1342,9 +1386,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", "cpu": [ "arm64" ], @@ -1363,9 +1407,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", "cpu": [ "x64" ], @@ -1384,9 +1428,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", "cpu": [ "x64" ], @@ -1405,9 +1449,9 @@ } }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", "cpu": [ "arm64" ], @@ -1426,9 +1470,9 @@ } }, "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", "cpu": [ "ia32" ], @@ -1447,9 +1491,9 @@ } }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", "cpu": [ "x64" ], @@ -1468,14 +1512,14 @@ } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.7.0.tgz", - "integrity": "sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", + "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", "dev": true, "license": "MIT", "dependencies": { "@peculiar/utils": "^2.0.2", - "asn1js": "^3.0.6", + "asn1js": "^3.0.10", "tslib": "^2.8.1" } }, @@ -1529,6 +1573,7 @@ "version": "2.12.0", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.12.0.tgz", "integrity": "sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==", + "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", @@ -1555,6 +1600,7 @@ "version": "11.1.8", "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.8.tgz", "integrity": "sha512-/tbkHMW7y10Lx6i1crLjD4/OhNkRG+Fo7byZHtah0547nIeXYcpIXaUh0IAQY6gO5459qpGGYapcEOHtFXkIuA==", + "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -1565,6 +1611,7 @@ "version": "2.6.5-forked.0", "resolved": "https://registry.npmjs.org/@rtsao/csstype/-/csstype-2.6.5-forked.0.tgz", "integrity": "sha512-0HwnY8uPWcCloTgdbbaJG3MbDUfNf6yKWZfCKxFv9yj2Sbp4mSKaIjC7Cr/5L4hMxvrrk85CU3wlAg7EtBBJ1Q==", + "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -1584,12 +1631,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, "license": "MIT" }, "node_modules/@standard-schema/utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "dev": true, "license": "MIT" }, "node_modules/@szmarczak/http-timer": { @@ -1606,68 +1655,68 @@ } }, "node_modules/@tailwindcss/cli": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.3.0.tgz", - "integrity": "sha512-X9kdlqyMopO9fewbgHsEeuy31YzMHbdZ9VsKt004tB+mxSg1CNbyhZYCzvhciN0AM4R4b5lvIprPjtNq7iQxpQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.3.1.tgz", + "integrity": "sha512-ZWPy20rF+TBfTImxDMG3Wr75Y3RpaPlo9lc+oJbInlMyjT+XPkTVKVIL5RZ7JirXuIahcfHoLNFRmDorKi+JQQ==", "dev": true, "license": "MIT", "dependencies": { - "@parcel/watcher": "^2.5.1", - "@tailwindcss/node": "4.3.0", - "@tailwindcss/oxide": "4.3.0", - "enhanced-resolve": "^5.21.0", + "@parcel/watcher": "2.5.1", + "@tailwindcss/node": "4.3.1", + "@tailwindcss/oxide": "4.3.1", + "enhanced-resolve": "5.21.6", "mri": "^1.2.0", "picocolors": "^1.1.1", - "tailwindcss": "4.3.0" + "tailwindcss": "4.3.1" }, "bin": { "tailwindcss": "dist/index.mjs" } }, "node_modules/@tailwindcss/node": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", - "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.1.tgz", + "integrity": "sha512-6NDaqRoAMSXD1mr/RXu0HBvNE9a2n5tHPsxu9XHLws8o4Twes5rBM2205SUUiJ9goAtadrN6xTGX0UDEwp/N4A==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.21.0", - "jiti": "^2.6.1", + "enhanced-resolve": "5.21.6", + "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", - "tailwindcss": "4.3.0" + "tailwindcss": "4.3.1" } }, "node_modules/@tailwindcss/oxide": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", - "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.1.tgz", + "integrity": "sha512-yVPyo8RNkabVr3O2EhHEE0Rewu7YKzc1DhIqfL46LKveFrmu9XbDazNOJY7/GRuvw1h6u3utWnR29H/p5JPlgA==", "dev": true, "license": "MIT", "engines": { "node": ">= 20" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.3.0", - "@tailwindcss/oxide-darwin-arm64": "4.3.0", - "@tailwindcss/oxide-darwin-x64": "4.3.0", - "@tailwindcss/oxide-freebsd-x64": "4.3.0", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", - "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", - "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", - "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", - "@tailwindcss/oxide-linux-x64-musl": "4.3.0", - "@tailwindcss/oxide-wasm32-wasi": "4.3.0", - "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", - "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" + "@tailwindcss/oxide-android-arm64": "4.3.1", + "@tailwindcss/oxide-darwin-arm64": "4.3.1", + "@tailwindcss/oxide-darwin-x64": "4.3.1", + "@tailwindcss/oxide-freebsd-x64": "4.3.1", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.1", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.1", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.1", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.1", + "@tailwindcss/oxide-linux-x64-musl": "4.3.1", + "@tailwindcss/oxide-wasm32-wasi": "4.3.1", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.1", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.1" } }, "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", - "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.1.tgz", + "integrity": "sha512-SVlyf61g374l5cHyg8x9kf5xmLcOaxvOTsbsqDnSsDJaKOEFZ7GCvi84VAVGpxojYOs1+3K6M0UjXfqPU8vmOQ==", "cpu": [ "arm64" ], @@ -1682,9 +1731,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", - "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.1.tgz", + "integrity": "sha512-hVnWLwv+e/l7c4WKyVtHVrIPvYdqWHjRB3MDIqARynzFtnQg85kmQEFCbV9Ja0VVx4xXTIiDWY60Y7iz/iNoDA==", "cpu": [ "arm64" ], @@ -1699,9 +1748,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", - "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.1.tgz", + "integrity": "sha512-Cf7abu0WVgbhU7ANgPUnSAvm7nCvMweusHb8FnaHlLfv/Caq4GYaEZg7ZImzzmjx4lIAfuS8q+eLIS7A7IzxIg==", "cpu": [ "x64" ], @@ -1716,9 +1765,9 @@ } }, "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", - "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.1.tgz", + "integrity": "sha512-ZZqzX2Y+GXtXXfqSfpJhDm60OoZfvLHLCgm+J7NVqgHHJjG/m9ugZI77RwTsVd4fnBJuCFP6Ae6kTJb71UdS8g==", "cpu": [ "x64" ], @@ -1733,9 +1782,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", - "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.1.tgz", + "integrity": "sha512-/Ah/xik0LaMYfv9DZ0S/t4pBlBNYOcqtRwusjgovHkvT8ixueWCLyJjsaF5kQIckjb4IT8Q6K6p/iPmZMixYgg==", "cpu": [ "arm" ], @@ -1750,9 +1799,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", - "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.1.tgz", + "integrity": "sha512-gqdFoVJlw444GvpnheZLHmvTzSxI/cOUUh2KSNejQjTcYkW062SVD+En0rUgD+QV91bz1XGIGtt1HJd48xUGbQ==", "cpu": [ "arm64" ], @@ -1767,9 +1816,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", - "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.1.tgz", + "integrity": "sha512-Bwv9KwOvE0VKa86xPFif9b9c3Y1NxOV1P0gLti/IYaWEsQYZXDlxfGEtA8mdDZ7SG3wyNXAWYT5SIn3giL57oA==", "cpu": [ "arm64" ], @@ -1784,9 +1833,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", - "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.1.tgz", + "integrity": "sha512-Ymi8O8T15HYQdOUWUtTI6ldN0neHP85FC+Qz32xTcZ7iJXtem/x8ITev0o1e9e5rkqj4lONZfTRLvkmin1+tKg==", "cpu": [ "x64" ], @@ -1801,9 +1850,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", - "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.1.tgz", + "integrity": "sha512-M+P/91qJ6uILLw4k2G93GMDRAXj61SMvFQYt39AqvUqYgExXpLL5aepfns7sj4HiAQeolirQF9E0lzRvdf4zPQ==", "cpu": [ "x64" ], @@ -1818,9 +1867,9 @@ } }, "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", - "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.1.tgz", + "integrity": "sha512-zsM8uOeqvVGHsAXsJxsT28ttosFahLJKCLOTUBqRAtKnVgGSRitds9T432QiT8b77Yga7JIBkulIRRlJPtYhRA==", "bundleDependencies": [ "@napi-rs/wasm-runtime", "@emnapi/core", @@ -1840,7 +1889,7 @@ "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", - "@tybys/wasm-util": "^0.10.1", + "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "engines": { @@ -1848,9 +1897,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", - "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.1.tgz", + "integrity": "sha512-aiNvSq9BsVk8V513lDKlrCFAgf8qBMPZTpgEhInL+NwQqs97mYmupVMrPrgBBSL8Pv/0zXu9MrMF9rMun1ZeNg==", "cpu": [ "arm64" ], @@ -1865,9 +1914,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", - "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.1.tgz", + "integrity": "sha512-xDEyu1rg290472FEGaKHnzyDyh5QH+AlWvsU5hMoMtPpzmKlRI0jaYKCgSHDYtaQWZOYbMaduSyCwFwY4n1HmA==", "cpu": [ "x64" ], @@ -1883,7 +1932,7 @@ }, "node_modules/@the-next-ai/ai-gateway": { "version": "1.0.0", - "resolved": "file:../../next-ai/gateway", + "resolved": "file:../next-ai/ai-gateway", "license": "MIT", "dependencies": { "diff": "^8.0.3", @@ -1899,23 +1948,6 @@ "node": ">=20" } }, - "node_modules/@the-next-ai/ai-gateway/node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", @@ -1933,24 +1965,28 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "dev": true, "license": "MIT" }, "node_modules/@types/d3-color": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "dev": true, "license": "MIT" }, "node_modules/@types/d3-ease": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "dev": true, "license": "MIT" }, "node_modules/@types/d3-interpolate": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dev": true, "license": "MIT", "dependencies": { "@types/d3-color": "*" @@ -1960,12 +1996,14 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "dev": true, "license": "MIT" }, "node_modules/@types/d3-scale": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "dev": true, "license": "MIT", "dependencies": { "@types/d3-time": "*" @@ -1975,6 +2013,7 @@ "version": "3.1.8", "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "dev": true, "license": "MIT", "dependencies": { "@types/d3-path": "*" @@ -1984,12 +2023,14 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "dev": true, "license": "MIT" }, "node_modules/@types/d3-timer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "dev": true, "license": "MIT" }, "node_modules/@types/debug": { @@ -2023,6 +2064,7 @@ "version": "2.0.46", "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz", "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==", + "dev": true, "license": "MIT" }, "node_modules/@types/http-cache-semantics": { @@ -2050,9 +2092,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.20.tgz", - "integrity": "sha512-6tELRwSDYWW9EdZhbeZmYGZ1/7Djkt+Ah3/ScEYT9cDord7UJzasR/4D3VONg9tQI5CDp+/CZC1AXj2pCFOvpw==", + "version": "22.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.21.tgz", + "integrity": "sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==", "dev": true, "license": "MIT", "dependencies": { @@ -2073,14 +2115,14 @@ "version": "15.7.15", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.31", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -2122,18 +2164,8 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", - "license": "MIT" - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } + "license": "MIT" }, "node_modules/@xmldom/xmldom": { "version": "0.8.13", @@ -2231,9 +2263,9 @@ } }, "node_modules/app-builder-lib": { - "version": "26.15.2", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.2.tgz", - "integrity": "sha512-3mYfKOjr/ZY7gFESOcq8kylBMgGPpmlQYnpBVit4p6zIg0t/8bkWBILdMMtnjFyN2jllyBf225T8dLlz3D6oBQ==", + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.3.tgz", + "integrity": "sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==", "dev": true, "license": "MIT", "dependencies": { @@ -2251,7 +2283,7 @@ "ajv": "^8.18.0", "asn1js": "^3.0.10", "async-exit-hook": "^2.0.1", - "builder-util": "26.15.0", + "builder-util": "26.15.3", "builder-util-runtime": "9.7.0", "chromium-pickle-js": "^0.2.0", "ci-info": "4.3.1", @@ -2259,7 +2291,7 @@ "dotenv": "^16.4.5", "dotenv-expand": "^11.0.6", "ejs": "^3.1.8", - "electron-publish": "26.15.1", + "electron-publish": "26.15.3", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "isbinaryfile": "^5.0.0", @@ -2283,8 +2315,8 @@ "node": ">=14.0.0" }, "peerDependencies": { - "dmg-builder": "26.15.2", - "electron-builder-squirrel-windows": "26.15.2" + "dmg-builder": "26.15.3", + "electron-builder-squirrel-windows": "26.15.3" } }, "node_modules/app-builder-lib/node_modules/@electron/get": { @@ -2462,6 +2494,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz", "integrity": "sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==", + "dev": true, "license": "MIT", "dependencies": { "core-js": "^2.5.0" @@ -2498,9 +2531,10 @@ "license": "MIT" }, "node_modules/axe-core": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.0.tgz", - "integrity": "sha512-FTavr/7Ba0IptwGOPxnQvdyW2tAsdLBMTBXz7rKH6xJ2skpyxpBxyHkDdBs4lf69yRqYpkqCdfhnwS8YULGOmg==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz", + "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==", + "dev": true, "license": "MPL-2.0", "engines": { "node": ">=4" @@ -2540,6 +2574,7 @@ "version": "16.1.1", "resolved": "https://registry.npmjs.org/baseui/-/baseui-16.1.1.tgz", "integrity": "sha512-pux441GCtmYrI8NE1SYqwsDnBad47msc7T/6p9JhHYrqYKo2y52YAO+7oSoFqIdaJxoY9r443U14hDkF68p56w==", + "dev": true, "license": "MIT", "dependencies": { "@date-io/date-fns": "^2.13.1", @@ -2586,12 +2621,21 @@ "version": "2.6.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.11.tgz", "integrity": "sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseui/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, "license": "MIT" }, "node_modules/baseui/node_modules/react-uid": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/react-uid/-/react-uid-2.3.0.tgz", "integrity": "sha512-tsPZ77GR0pISGYmpCLHAbZTabKXZ7zBniKPVqVMMfnXFyo39zq5g/psIlD5vLTKkjQEhWOO8JhqcHnxkwNu6eA==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^1.10.0" @@ -2613,6 +2657,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.2.tgz", "integrity": "sha512-MYXhTY1BZpdJFjUovvYHVBmkq79szK/k7V3MO+36gJkWGkrXKtyr4vCPtpphaTLRAdDNoYEYFZWE8LjN+PIHNg==", + "dev": true, "license": "MIT", "engines": { "node": ">8.0.0" @@ -2626,6 +2671,7 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.5.tgz", "integrity": "sha512-HeTwlNa37AFa8MDZFZOKcNEkuF2YflA0hpGPiTT9vR7OawEt+GZbfM6wqkBahD3D3pUjIabQYzsnY/BSJbgq6Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", @@ -2643,6 +2689,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, "license": "0BSD" }, "node_modules/bluebird": { @@ -2673,14 +2720,17 @@ "node": "18 || 20 || >=22" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, "engines": { - "node": "*" + "node": ">=8" } }, "node_modules/buffer-from": { @@ -2691,9 +2741,9 @@ "license": "MIT" }, "node_modules/builder-util": { - "version": "26.15.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.15.0.tgz", - "integrity": "sha512-dUx+HxVbiNsNQ4mGe1PyoC/tBmsHwBNDLdBuqWCj+rhHFE9lHgrXiGYKAM1uNlznhAaUSyMlms84VeSSr3gOBA==", + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.15.3.tgz", + "integrity": "sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==", "dev": true, "license": "MIT", "dependencies": { @@ -2769,6 +2819,22 @@ "node": ">=8" } }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -2787,6 +2853,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/card-validator/-/card-validator-6.2.0.tgz", "integrity": "sha512-1vYv45JaE9NmixZr4dl6ykzbFKv7imI9L7MQDs235b/a7EGbG8rrEsipeHtVvscLSUbl3RX6UP5gyOe0Y2FlHA==", + "dev": true, "license": "MIT", "dependencies": { "credit-card-type": "^8.0.0" @@ -2874,6 +2941,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2913,13 +2981,13 @@ } }, "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/compare-version": { @@ -2957,6 +3025,7 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, "hasInstallScript": true, "license": "MIT" }, @@ -2971,6 +3040,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-8.3.0.tgz", "integrity": "sha512-czfZUpQ7W9CDxZL4yFLb1kFtM/q2lTOY975hL2aO+DC8+GRNDVSXVCHXhVFZPxiUKmQCZbFP8vIhxx5TBQaThw==", + "dev": true, "license": "MIT" }, "node_modules/cross-dirname": { @@ -3024,6 +3094,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", + "dev": true, "license": "MIT", "dependencies": { "hyphenate-style-name": "^1.0.2", @@ -3034,18 +3105,21 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", + "dev": true, "license": "MIT" }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, "license": "MIT" }, "node_modules/d3": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "dev": true, "license": "ISC", "dependencies": { "d3-array": "3", @@ -3087,6 +3161,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dev": true, "license": "ISC", "dependencies": { "internmap": "1 - 2" @@ -3099,6 +3174,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3108,6 +3184,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dev": true, "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", @@ -3124,6 +3201,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dev": true, "license": "ISC", "dependencies": { "d3-path": "1 - 3" @@ -3136,6 +3214,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3145,6 +3224,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dev": true, "license": "ISC", "dependencies": { "d3-array": "^3.2.0" @@ -3157,6 +3237,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dev": true, "license": "ISC", "dependencies": { "delaunator": "5" @@ -3169,6 +3250,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3178,6 +3260,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dev": true, "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", @@ -3191,6 +3274,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dev": true, "license": "ISC", "dependencies": { "commander": "7", @@ -3212,19 +3296,11 @@ "node": ">=12" } }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/d3-ease": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=12" @@ -3234,6 +3310,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dev": true, "license": "ISC", "dependencies": { "d3-dsv": "1 - 3" @@ -3246,6 +3323,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dev": true, "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", @@ -3260,6 +3338,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3269,6 +3348,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "dev": true, "license": "ISC", "dependencies": { "d3-array": "2.5.0 - 3" @@ -3281,6 +3361,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3290,6 +3371,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dev": true, "license": "ISC", "dependencies": { "d3-color": "1 - 3" @@ -3302,6 +3384,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3311,6 +3394,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3320,6 +3404,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3329,6 +3414,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3338,6 +3424,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dev": true, "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", @@ -3354,6 +3441,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dev": true, "license": "ISC", "dependencies": { "d3-color": "1 - 3", @@ -3367,6 +3455,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3376,6 +3465,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dev": true, "license": "ISC", "dependencies": { "d3-path": "^3.1.0" @@ -3388,6 +3478,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dev": true, "license": "ISC", "dependencies": { "d3-array": "2 - 3" @@ -3400,6 +3491,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dev": true, "license": "ISC", "dependencies": { "d3-time": "1 - 3" @@ -3412,6 +3504,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -3421,6 +3514,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dev": true, "license": "ISC", "dependencies": { "d3-color": "1 - 3", @@ -3440,6 +3534,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dev": true, "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", @@ -3456,6 +3551,7 @@ "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.21.0" @@ -3472,6 +3568,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz", "integrity": "sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==", + "dev": true, "license": "MIT", "peerDependencies": { "date-fns": ">=2.0.0" @@ -3499,6 +3596,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "dev": true, "license": "MIT" }, "node_modules/decompress-response": { @@ -3582,6 +3680,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==", + "dev": true, "license": "ISC", "dependencies": { "robust-predicates": "^3.0.2" @@ -3607,13 +3706,16 @@ } }, "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, "node_modules/detect-node": { @@ -3628,6 +3730,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "dev": true, "license": "MIT" }, "node_modules/diff": { @@ -3682,14 +3785,14 @@ } }, "node_modules/dmg-builder": { - "version": "26.15.2", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.15.2.tgz", - "integrity": "sha512-fMkjRqKyPtsz4Kzu/qGP0BGjqzMCIgp+/7kw/u6YH6lvn/8hvL3c0TXhoFayBoYdpPCnEinnCHztd4bW7/jetA==", + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.15.3.tgz", + "integrity": "sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "26.15.2", - "builder-util": "26.15.0", + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0" } @@ -3698,6 +3801,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", @@ -3762,6 +3866,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "dev": true, "license": "ISC" }, "node_modules/ejs": { @@ -3781,15 +3886,15 @@ } }, "node_modules/electron": { - "version": "42.3.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-42.3.3.tgz", - "integrity": "sha512-0MwYp9wTb7TrtTalOYqeW+suqd9T/Znstr/nDLKqFGIjHdBZX339guo3mQqTPURRZ/UQmYM4uMpzKpI5wLptfQ==", + "version": "42.4.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-42.4.1.tgz", + "integrity": "sha512-8CYHJP5O4wFO+ycoJR98yy907MmPeo+vWXrzjxmGGgRNKqv8pOjjm+wphO0CCgQJnBU7+QUPSJS4QXhbKrO50w==", "dev": true, "license": "MIT", "dependencies": { + "@electron-internal/extract-zip": "^1.0.1", "@electron/get": "^5.0.0", - "@types/node": "^24.9.0", - "extract-zip": "^2.0.1" + "@types/node": "^24.9.0" }, "bin": { "electron": "cli.js", @@ -3800,18 +3905,18 @@ } }, "node_modules/electron-builder": { - "version": "26.15.2", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.2.tgz", - "integrity": "sha512-veKM9+dCljaC5A74Pwc0ZWQ9arOHREXWh9hUIf8NGg49ch7x+IB4QhbMzIrV5ONZIXM2OEkaxW11cAPjPtoi4A==", + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.3.tgz", + "integrity": "sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "26.15.2", - "builder-util": "26.15.0", + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", "builder-util-runtime": "9.7.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", - "dmg-builder": "26.15.2", + "dmg-builder": "26.15.3", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", @@ -3826,28 +3931,28 @@ } }, "node_modules/electron-builder-squirrel-windows": { - "version": "26.15.2", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.2.tgz", - "integrity": "sha512-PNl+SSRoma9mXhxycNGxutZPgvmK19v41mn8F9oecpAU2QNAldpB4HfMuA1LwFC2j8aRzzV5M9HKlKe6dfpvNw==", + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz", + "integrity": "sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "app-builder-lib": "26.15.2", - "builder-util": "26.15.0", + "app-builder-lib": "26.15.3", + "builder-util": "26.15.3", "electron-winstaller": "5.4.0" } }, "node_modules/electron-publish": { - "version": "26.15.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.1.tgz", - "integrity": "sha512-BMgMHOyexWn0UnOC+Afffw0DMrr0yfLp4U8YsLXwoJ3Da7LS7WUnz21teYZqO0gaApE1KgsjREWmbPqvF5JcPg==", + "version": "26.15.3", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.3.tgz", + "integrity": "sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==", "dev": true, "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", "aws4": "^1.13.2", - "builder-util": "26.15.0", + "builder-util": "26.15.3", "builder-util-runtime": "9.7.0", "chalk": "^4.1.2", "form-data": "^4.0.5", @@ -3917,9 +4022,9 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.1.tgz", - "integrity": "sha512-RSpUJGmvsJ1ZeBehQZFhIdpsz+bIpES0nIQXko4Ybq+N+kX6XvOq3Jo+iJ82FWLdblFq85AsMikd3m35jgezYg==", + "version": "24.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz", + "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", "dev": true, "license": "MIT", "dependencies": { @@ -3951,9 +4056,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz", - "integrity": "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==", + "version": "5.21.6", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz", + "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4034,9 +4139,10 @@ } }, "node_modules/es-toolkit": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.47.0.tgz", - "integrity": "sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==", + "version": "1.47.1", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.47.1.tgz", + "integrity": "sha512-5RAqEwf4P4E17p+W75KLOWw/nOvKZzSQpxM32IpI2KZLaVonjTrZ0Ai5ghMaVI9eKC2p8eoQgcBdkEDgzFk6+Q==", + "dev": true, "license": "MIT", "workspaces": [ "docs", @@ -4121,6 +4227,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, "license": "MIT" }, "node_modules/exponential-backoff": { @@ -4130,27 +4237,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", @@ -4254,38 +4340,11 @@ "reusify": "^1.0.4" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/file-selector": { "version": "0.1.19", "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.1.19.tgz", "integrity": "sha512-kCWw3+Aai8Uox+5tHCNgMFaUdgidxvMnLWO6fM5sZ0hA2wlHP5/DHGF0ECe84BiB95qdJbKNEJhWKVDvMN+JDQ==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.1" @@ -4334,6 +4393,19 @@ "node": ">=10" } }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-my-way": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.6.0.tgz", @@ -4352,6 +4424,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.6.tgz", "integrity": "sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.3" @@ -4361,17 +4434,17 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -4381,6 +4454,7 @@ "version": "12.40.0", "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.40.0.tgz", "integrity": "sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==", + "dev": true, "license": "MIT", "dependencies": { "motion-dom": "^12.40.0", @@ -4440,6 +4514,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "dev": true, "license": "ISC" }, "node_modules/get-caller-file": { @@ -4492,16 +4567,13 @@ } }, "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4511,61 +4583,26 @@ "version": "3.4.4", "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", + "dev": true, "license": "MIT" }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -4653,12 +4690,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", + "dev": true, "license": "ISC" }, "node_modules/hammerjs": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -4796,12 +4835,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -4814,6 +4855,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -4834,6 +4876,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -4863,6 +4906,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz", "integrity": "sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA==", + "dev": true, "license": "MIT", "dependencies": { "css-in-js-utils": "^2.0.0" @@ -4872,6 +4916,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -4881,6 +4926,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" @@ -4928,6 +4974,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4962,6 +5018,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4999,6 +5056,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -5094,12 +5152,14 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.1.tgz", "integrity": "sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA==", + "dev": true, "license": "MIT" }, "node_modules/kdbush": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==", + "dev": true, "license": "ISC" }, "node_modules/keyv": { @@ -5417,6 +5477,16 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/lodash": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", @@ -5428,6 +5498,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -5460,9 +5531,10 @@ } }, "node_modules/lucide-react": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.17.0.tgz", - "integrity": "sha512-9FA9evdox/JQL5PT57fdA1x/yg8T7knJ98+zjTL3UfKza6pflQUUh3XtaQIHKvnsJw1lmsEyHVlt5jchYxOQ5w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.20.0.tgz", + "integrity": "sha512-jhXLeC/7m0/tjL1nzMdKk6x256zWA6AtbhTVreHOiKPoeX2d6MK4FbyIQPpVq0E6iPWBisyy1TW+pEge/uMEuQ==", + "dev": true, "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -5482,6 +5554,7 @@ "version": "1.13.3", "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz", "integrity": "sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==", + "dev": true, "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", @@ -5539,8 +5612,23 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.0.tgz", "integrity": "sha512-7g0+ejkOaI9w5x6LvQwmj68kUj6rxROywPSCqmclG/HBacmFnZqhVscQ8kovkn9FBCNJmOz6SY42+jnvZzDWdw==", + "dev": true, "license": "MIT" }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -5606,6 +5694,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5637,6 +5726,7 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.3.tgz", "integrity": "sha512-Z5z/+FzZqOSO3juSVKV3zcm4R2eAlWwlKMcqHmyFEJAaLILNcDKnIbnb4/kbcGyIuhtdWrzu8WOIR7uM6I34aw==", + "dev": true, "license": "MIT", "dependencies": { "@types/hammerjs": "^2.0.41", @@ -5665,12 +5755,14 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-2.0.5.tgz", "integrity": "sha512-ST0PnThzWKcgSLyc+ugLVql45PvESt3Ul/wrdV/OPc/6Pr8dbLAIJsN1cIp41FLzbN+srVTNIRn+5Cju0nyV6A==", + "dev": true, "license": "MIT" }, "node_modules/moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "dev": true, "license": "MIT", "engines": { "node": "*" @@ -5680,6 +5772,7 @@ "version": "12.40.0", "resolved": "https://registry.npmjs.org/motion/-/motion-12.40.0.tgz", "integrity": "sha512-yjrHUrBFW6kQvjJwRsoiPSAhC5tRwRqNGJWmiJ4CrGnbKp0V88AdzkhBmDoqIsIPfarOe0Uddd37Xq43/gIocA==", + "dev": true, "license": "MIT", "dependencies": { "framer-motion": "^12.40.0", @@ -5706,6 +5799,7 @@ "version": "12.40.0", "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.40.0.tgz", "integrity": "sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==", + "dev": true, "license": "MIT", "dependencies": { "motion-utils": "^12.39.0" @@ -5715,6 +5809,7 @@ "version": "12.39.0", "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz", "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==", + "dev": true, "license": "MIT" }, "node_modules/mri": { @@ -5738,6 +5833,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "dev": true, "license": "MIT" }, "node_modules/node-abi": { @@ -5825,9 +5921,9 @@ } }, "node_modules/node-gyp/node_modules/undici": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.26.0.tgz", - "integrity": "sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz", + "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==", "dev": true, "license": "MIT", "engines": { @@ -5890,6 +5986,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5926,9 +6023,9 @@ } }, "node_modules/openai": { - "version": "6.42.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-6.42.0.tgz", - "integrity": "sha512-1WFEt/uXMXOLhYRNkgJWo08Y2YNvNwpVU72K7ibrWgWpNOXd4VojXLbe6SQ4bLiUQ3Y8jz4IiyVkylJCL1DtZg==", + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.43.0.tgz", + "integrity": "sha512-wVjioGjbnAZycj5mmkFVxbBxLEp+NkKpdMscCYP9LTbq+nbf1WTMVp+ovmD35jgyco4tldWZJkcqdmlh3O9yHQ==", "license": "Apache-2.0", "peerDependencies": { "ws": "^8.18.0", @@ -6018,6 +6115,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "ieee754": "^1.1.12", @@ -6042,13 +6140,6 @@ "url": "https://github.com/sponsors/jet2jet" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6057,13 +6148,13 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -6156,6 +6247,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.17.8" @@ -6169,6 +6261,7 @@ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -6209,6 +6302,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "dev": true, "license": "ISC" }, "node_modules/proc-log": { @@ -6272,6 +6366,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -6283,6 +6378,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "dev": true, "license": "MIT", "dependencies": { "react-is": "^16.3.2", @@ -6296,12 +6392,14 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, "license": "MIT" }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, "license": "MIT" }, "node_modules/proper-lockfile": { @@ -6320,6 +6418,7 @@ "version": "3.6.1", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.1.tgz", "integrity": "sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==", + "dev": true, "license": "MIT" }, "node_modules/pump": { @@ -6376,12 +6475,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "dev": true, "license": "ISC" }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -6394,6 +6495,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.8.tgz", "integrity": "sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13" @@ -6406,6 +6508,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -6419,6 +6522,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-9.0.0.tgz", "integrity": "sha512-wZ2o9B2qkdE3RumWhfyZT9swgJYJPeU5qHEcMU8weYpmLex1eeWX0CC32/Y0VutB+BBi2D+iePV/YZIiB4kZGw==", + "dev": true, "license": "MIT", "dependencies": { "attr-accept": "^1.1.3", @@ -6437,6 +6541,7 @@ "version": "2.13.7", "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.13.7.tgz", "integrity": "sha512-20lpZHEQrXPb+pp1tzd4ULL6DyO5D2KnR0G69tTDdydrmNhU7pdFmbQUYVyHUgp+xN29IuFR0PVuhOmvaZL9Og==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", @@ -6457,9 +6562,10 @@ } }, "node_modules/react-hook-form": { - "version": "7.77.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.77.0.tgz", - "integrity": "sha512-Sslh9YDYc0GDlWT/lxasnIduNo4v3yyvqRGvmGKUre5AFjDs/HV9/OafHGD8d+sB2yoL4UIL9L8X9i0WlZZebg==", + "version": "7.79.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.79.0.tgz", + "integrity": "sha512-mhYp/MTmXvzYX6AJcJVko0rktoIhhmRnEouObj4wF5i/tCttgJvnp1+9wRkpITZjDTqpo4IOSJqu0dBlPlV/Lw==", + "dev": true, "license": "MIT", "engines": { "node": ">=18.0.0" @@ -6476,6 +6582,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/react-input-mask/-/react-input-mask-2.0.4.tgz", "integrity": "sha512-1hwzMr/aO9tXfiroiVCx5EtKohKwLk/NT8QlJXHQ4N+yJJFyUuMT+zfTpLBwX/lK3PkuMlievIffncpMZ3HGRQ==", + "dev": true, "license": "MIT", "dependencies": { "invariant": "^2.2.4", @@ -6487,21 +6594,25 @@ } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "license": "MIT" + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "dev": true, "license": "MIT" }, "node_modules/react-map-gl": { "version": "5.2.13", "resolved": "https://registry.npmjs.org/react-map-gl/-/react-map-gl-5.2.13.tgz", "integrity": "sha512-yYqpZJADB7o5epiYpkcUED5MWevFnOsVn9mgKfizxjsenLMpVNgNgb/x0e9DS4VZtpOLWW2ZXYBB4BJZJlZmTQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", @@ -6523,6 +6634,7 @@ "version": "1.0.26", "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.26.tgz", "integrity": "sha512-CblNyiNVw2o+hsa5/49NH2ogGxZ+t+3aweRvNSq7TVjDIlwk7ir4lencEg5HxHeSzwNarSkNkiu0qJSOXtxm5A==", + "dev": true, "license": "MIT", "peerDependencies": { "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0", @@ -6533,6 +6645,7 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/react-movable/-/react-movable-3.4.1.tgz", "integrity": "sha512-VTrBKjRWV4yVUDGj5dIZIhf07fyoFDXzIV6xs3KNNHpgPbkPT7FNu/Vbe11ZjHmT48uOykCmRMpS66DrzRbZZg==", + "dev": true, "license": "MIT", "peerDependencies": { "react": "*", @@ -6543,6 +6656,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/react-multi-ref/-/react-multi-ref-1.0.2.tgz", "integrity": "sha512-6oS5yzrZ4UrdMHbF6QAnnaoIe9h8R+Xv4m8uJWVK8/Q4RCc6RTT0XJ/LZ7llVgFcVbnDHeUAcVIhtRgFyzjJpA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.4" @@ -6552,6 +6666,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/react-range/-/react-range-1.10.0.tgz", "integrity": "sha512-kDo0LiBUHIQIP8menx0UoxTnHr7UXBYpIYl/DR9jCaO1o29VwvCLpkP/qOTNQz5hkJadPg1uEM07XJcJ1XGoKw==", + "dev": true, "license": "MIT", "peerDependencies": { "react": "*", @@ -6562,6 +6677,7 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.3.0.tgz", "integrity": "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==", + "dev": true, "license": "MIT", "dependencies": { "@types/use-sync-external-store": "^0.0.6", @@ -6585,6 +6701,7 @@ "version": "9.22.6", "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.22.6.tgz", "integrity": "sha512-U5j7KuUQt3AaMatlMJ0UJddqSiX+Km0YJxSqbAzIiGw5EmNz0khMyqP2hzgu4+QUtm+QPIrxzUX4raJxmVJnHg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.7.2", @@ -6603,6 +6720,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6650,6 +6768,7 @@ "version": "3.8.1", "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.8.1.tgz", "integrity": "sha512-mwzmO1s9sFL0TduUpwndxCUNoXsBw3u3E/0+A+cLcrSfQitSG62L32N69GhqUrrT5qKcAE3pCGVINC6pqkBBQg==", + "dev": true, "license": "MIT", "workspaces": [ "www" @@ -6680,12 +6799,14 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "dev": true, "license": "MIT" }, "node_modules/redux-thunk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "dev": true, "license": "MIT", "peerDependencies": { "redux": "^5.0.0" @@ -6732,12 +6853,14 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "dev": true, "license": "MIT" }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true, "license": "MIT" }, "node_modules/resolve-alpn": { @@ -6751,6 +6874,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dev": true, "license": "MIT", "dependencies": { "protocol-buffers-schema": "^3.3.1" @@ -6819,6 +6943,63 @@ "rimraf": "bin.js" } }, + "node_modules/rimraf/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/roarr": { "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", @@ -6842,12 +7023,14 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", + "dev": true, "license": "Unlicense" }, "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/safe-buffer": { @@ -6892,6 +7075,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, "license": "MIT" }, "node_modules/sanitize-filename": { @@ -6918,6 +7102,7 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -6940,9 +7125,9 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz", - "integrity": "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7140,6 +7325,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/styletron-engine-atomic/-/styletron-engine-atomic-1.6.2.tgz", "integrity": "sha512-vWSIxpCkYbVD3xhnxYwnJDJePD8p8pJCu7g1zFxdQIM4z34Eo1zj3LgXJI6yeNMrJ7PkE56SYK6ZOo3hpTOBzA==", + "dev": true, "license": "MIT", "dependencies": { "inline-style-prefixer": "^5.1.0", @@ -7150,6 +7336,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/styletron-react/-/styletron-react-6.1.1.tgz", "integrity": "sha512-K04BwKZTrdRG/wR5BaFG8z0bFu1jkT2HAp0UP5ZeMAKW6Ix8J3yuROWLoLUMZafaRRQ9LjiLpIl65u75L7YZow==", + "dev": true, "license": "MIT", "dependencies": { "prop-types": "^15.6.0", @@ -7163,6 +7350,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/styletron-standard/-/styletron-standard-3.1.0.tgz", "integrity": "sha512-Cr2q0IFsag6OaIeD/LBNRuCxNTPa/WtTbKP1X3o50mDudN8FGwmD5h1sMJ/Bu5+mO/2NfrNAv9V9zUXn6lXXMA==", + "dev": true, "license": "MIT", "dependencies": { "@rtsao/csstype": "2.6.5-forked.0", @@ -7187,6 +7375,7 @@ "version": "7.1.5", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "dev": true, "license": "ISC", "dependencies": { "kdbush": "^3.0.0" @@ -7209,6 +7398,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "dev": true, "license": "MIT", "funding": { "type": "github", @@ -7216,9 +7406,10 @@ } }, "node_modules/tailwindcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", - "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.1.tgz", + "integrity": "sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q==", + "dev": true, "license": "MIT" }, "node_modules/tapable": { @@ -7330,6 +7521,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { @@ -7349,10 +7541,42 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "dev": true, "license": "ISC" }, "node_modules/tmp": { @@ -7375,6 +7599,19 @@ "tmp": "^0.2.0" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/toad-cache": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.1.tgz", @@ -7398,6 +7635,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, "license": "0BSD" }, "node_modules/type-fest": { @@ -7429,9 +7667,9 @@ } }, "node_modules/undici": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.27.2.tgz", - "integrity": "sha512-uZsKNuzQxDMUY6M3pIMvy5tvlGmtq8XJ2oLAkfRKGNu+1VQAIvLy2xIVG5ATZl5wDXl/tddByAWCizRbOme+TA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", "license": "MIT", "engines": { "node": ">=20.18.1" @@ -7487,6 +7725,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -7508,6 +7747,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "dev": true, "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", @@ -7530,6 +7770,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "dev": true, "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -7553,6 +7794,7 @@ "version": "37.3.6", "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz", "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==", + "dev": true, "license": "MIT AND ISC", "dependencies": { "@types/d3-array": "^3.0.3", @@ -7576,6 +7818,7 @@ "resolved": "https://registry.npmjs.org/viewport-mercator-project/-/viewport-mercator-project-7.0.4.tgz", "integrity": "sha512-0jzpL6pIMocCKWg1C3mqi/N4UPgZC3FzwghEm1H+XsUo8hNZAyJc3QR7YqC816ibOR8aWT5pCsV+gCu8/BMJgg==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, "license": "MIT", "dependencies": { "@math.gl/web-mercator": "^3.5.5" @@ -7585,6 +7828,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dev": true, "license": "MIT", "dependencies": { "@mapbox/point-geometry": "0.1.0", @@ -7596,6 +7840,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" @@ -7733,17 +7978,6 @@ "node": ">=12" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 9e29fd9..1d7437c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@the-next-ai/ai-gateway": "file:../../next-ai/gateway", + "@the-next-ai/ai-gateway": "file:../next-ai/ai-gateway", "node-forge": "^1.4.0", "sql.js": "^1.14.1", "undici": "^7.27.2" diff --git a/src/main/constants.ts b/src/main/constants.ts index 2af652c..74aec99 100644 --- a/src/main/constants.ts +++ b/src/main/constants.ts @@ -5,6 +5,7 @@ export { IPC_CHANNELS } from "../shared/ipc-channels"; export const APP_NAME = "Claude Code Router"; export const CONFIGDIR = path.join(app.getPath("home"), ".claude-code-router"); export const CONFIG_FILE = path.join(CONFIGDIR, "config.json"); +export const ONBOARDING_FINISHED_FILE = path.join(CONFIGDIR, ".onboard_finished"); export const DATADIR = app.getPath("userData"); export const API_KEYS_DB_FILE = path.join(DATADIR, "api-keys.sqlite"); export const CERTDIR = path.join(DATADIR, "certs"); diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 5264046..afa1389 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -1,10 +1,10 @@ import { app, BrowserWindow, dialog, ipcMain, shell, type OpenDialogOptions } from "electron"; -import { existsSync, readFileSync, statSync } from "node:fs"; +import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs"; import net from "node:net"; import path from "node:path"; import { builtInBrowserService } from "./built-in-browser"; import { loadAppConfig, saveApiKeysConfig, saveAppConfig } from "./config"; -import { API_KEYS_DB_FILE, APP_NAME, CONFIGDIR, CONFIG_FILE, DATADIR, GATEWAY_CONFIG_FILE, IPC_CHANNELS, PROXY_CA_CERT_FILE, REQUEST_LOGS_DB_FILE, USAGE_DB_FILE } from "./constants"; +import { API_KEYS_DB_FILE, APP_NAME, CONFIGDIR, CONFIG_FILE, DATADIR, GATEWAY_CONFIG_FILE, IPC_CHANNELS, ONBOARDING_FINISHED_FILE, PROXY_CA_CERT_FILE, REQUEST_LOGS_DB_FILE, USAGE_DB_FILE } from "./constants"; import { deepLinkService } from "./deep-link"; import { gatewayService } from "./gateway/service"; import { probeGatewayProvider } from "./provider-probe"; @@ -60,6 +60,7 @@ ipcMain.handle(IPC_CHANNELS.appGetInfo, () => { }); ipcMain.handle(IPC_CHANNELS.appGetConfig, () => loadAppConfig()); +ipcMain.handle(IPC_CHANNELS.appGetOnboardingFinished, () => existsSync(ONBOARDING_FINISHED_FILE)); ipcMain.handle(IPC_CHANNELS.appGetPendingProviderDeepLinks, () => deepLinkService.consumePendingProviderRequests()); ipcMain.handle(IPC_CHANNELS.appGetAgentAnalysis, (_event, filter?: AgentAnalysisFilter) => getAgentAnalysis(filter)); ipcMain.handle(IPC_CHANNELS.appGetGatewayStatus, () => gatewayService.getStatus()); @@ -142,6 +143,11 @@ ipcMain.handle(IPC_CHANNELS.appSaveApiKeys, async (_event, apiKeys: ApiKeyConfig await applyProfileIfServiceRunning(savedConfig, gatewayService.getStatus()); return savedConfig; }); +ipcMain.handle(IPC_CHANNELS.appSetOnboardingFinished, () => { + mkdirSync(CONFIGDIR, { recursive: true }); + writeFileSync(ONBOARDING_FINISHED_FILE, `${new Date().toISOString()}\n`, "utf8"); + return true; +}); ipcMain.handle(IPC_CHANNELS.appRestartGateway, async () => { const config = await loadAppConfig(); const status = await gatewayService.start(config); diff --git a/src/main/preload.ts b/src/main/preload.ts index 1395612..936c523 100644 --- a/src/main/preload.ts +++ b/src/main/preload.ts @@ -32,6 +32,7 @@ contextBridge.exposeInMainWorld("ccr", { getAppInfo: () => ipcRenderer.invoke(IPC_CHANNELS.appGetInfo) as Promise, getConfig: () => ipcRenderer.invoke(IPC_CHANNELS.appGetConfig) as Promise, getGatewayStatus: () => ipcRenderer.invoke(IPC_CHANNELS.appGetGatewayStatus) as Promise, + getOnboardingFinished: () => ipcRenderer.invoke(IPC_CHANNELS.appGetOnboardingFinished) as Promise, getPendingProviderDeepLinks: () => ipcRenderer.invoke(IPC_CHANNELS.appGetPendingProviderDeepLinks) as Promise, getPluginMarketplace: () => ipcRenderer.invoke(IPC_CHANNELS.appGetPluginMarketplace) as Promise, getProxyCertificateStatus: () => ipcRenderer.invoke(IPC_CHANNELS.appGetProxyCertificateStatus) as Promise, @@ -50,6 +51,7 @@ contextBridge.exposeInMainWorld("ccr", { saveApiKeys: (apiKeys: ApiKeyConfig[]) => ipcRenderer.invoke(IPC_CHANNELS.appSaveApiKeys, apiKeys) as Promise, saveConfig: (config: AppConfig) => ipcRenderer.invoke(IPC_CHANNELS.appSaveConfig, config) as Promise, selectPluginDirectory: () => ipcRenderer.invoke(IPC_CHANNELS.appSelectPluginDirectory) as Promise, + setOnboardingFinished: () => ipcRenderer.invoke(IPC_CHANNELS.appSetOnboardingFinished) as Promise, setProxyNetworkCaptureEnabled: (enabled: boolean) => ipcRenderer.invoke(IPC_CHANNELS.appSetProxyNetworkCaptureEnabled, enabled) as Promise, setTrayDetailOpen: (open: boolean, provider?: string) => ipcRenderer.invoke(IPC_CHANNELS.appSetTrayDetailOpen, open, provider) as Promise, showMainWindow: () => ipcRenderer.invoke(IPC_CHANNELS.appShowMainWindow) as Promise, diff --git a/src/renderer/pages/home/App.tsx b/src/renderer/pages/home/App.tsx index f2e90a0..0ee9ac2 100644 --- a/src/renderer/pages/home/App.tsx +++ b/src/renderer/pages/home/App.tsx @@ -188,7 +188,6 @@ type AppCopy = { }; const languagePreferenceStorageKey = "ccr.ui.language"; -const onboardingCompletionStorageKey = "ccr.onboarding.completed"; const appCopy: Record = { en: { @@ -839,7 +838,7 @@ const appCopy: Record = { "System Proxy": "系统代理", "This action is applied immediately to the draft config and will auto-save with other changes.": "此操作会立即应用到草稿配置,并随其他变更自动保存。", "This provider link came from an external website. Review details before importing.": "这个供应商链接来自外部网站。导入前请确认下面的内容。", - "Three steps to connect a provider to your agent.": "三步把供应商接入你的 Agent。", + "Welcome to CCR": "欢迎使用CCR", "Trusted": "已信任", "Small fast model": "小模型", "Unknown": "未知", @@ -1014,6 +1013,34 @@ const navigation: Array<{ icon: LucideIcon; id: NavigationId }> = [ const onboardingStepOrder: OnboardingStepId[] = ["provider", "profile", "enter"]; +function isOnboardingProviderReady(config: AppConfig): boolean { + return config.Providers.length > 0; +} + +function isOnboardingProfileReady(config: AppConfig): boolean { + return config.profile.enabled && config.profile.profiles.some((profile) => profile.enabled); +} + +function getDefaultOnboardingStep(config: AppConfig): OnboardingStepId { + if (!isOnboardingProviderReady(config)) { + return "provider"; + } + if (!isOnboardingProfileReady(config)) { + return "profile"; + } + return "enter"; +} + +function getNextOnboardingStep(activeStep: OnboardingStepId, config: AppConfig): OnboardingStepId | undefined { + const activeIndex = onboardingStepOrder.indexOf(activeStep); + for (const step of onboardingStepOrder.slice(activeIndex + 1)) { + if (step === "enter" || step === getDefaultOnboardingStep(config)) { + return step; + } + } + return undefined; +} + const motionEase = [0.22, 1, 0.36, 1] as const; const reducedMotionTransition = { duration: 0.12, ease: "easeOut" } as const; const pageSpringTransition = { damping: 34, mass: 0.78, stiffness: 420, type: "spring" } as const; @@ -1536,10 +1563,12 @@ type AppToast = { }; function App() { - const [activeView, setActiveView] = useState(() => readOnboardingCompleted() ? "overview" : "onboarding"); - const [onboardingStep, setOnboardingStep] = useState("provider"); + const [activeView, setActiveView] = useState("onboarding"); + const [onboardingStep, setOnboardingStep] = useState(() => getDefaultOnboardingStep(fallbackConfig)); const [appInfo, setAppInfo] = useState(fallbackInfo); const [draftConfig, setDraftConfig] = useState(fallbackConfig); + const [configLoaded, setConfigLoaded] = useState(() => !window.ccr); + const [onboardingStatusLoaded, setOnboardingStatusLoaded] = useState(() => !window.ccr); const [gatewayStatus, setGatewayStatus] = useState(fallbackGatewayStatus); const [proxyCertificateStatus, setProxyCertificateStatus] = useState(fallbackProxyCertificateStatus); const [proxyNetworkSnapshot, setProxyNetworkSnapshot] = useState(fallbackProxyNetworkSnapshot); @@ -1661,7 +1690,16 @@ function App() { } void window.ccr.getAppInfo().then(setAppInfo); - void window.ccr.getConfig().then(syncConfigState); + void window.ccr.getConfig() + .then(syncConfigState) + .catch(() => { + // Fall back to the bundled defaults; the rest of the UI can still render. + }) + .finally(() => setConfigLoaded(true)); + void window.ccr.getOnboardingFinished() + .then((finished) => setActiveView(finished ? "overview" : "onboarding")) + .catch(() => setActiveView("onboarding")) + .finally(() => setOnboardingStatusLoaded(true)); void window.ccr.getPluginMarketplace().then(setPluginMarketplace).catch(() => setPluginMarketplace([])); void window.ccr.getProxyCertificateStatus().then(setProxyCertificateStatus); const refreshRuntimeStatus = () => { @@ -1907,6 +1945,18 @@ function App() { } }, [activeView, networkCaptureEnabled]); + useEffect(() => { + if (activeView !== "onboarding" || !configLoaded || !onboardingStatusLoaded) { + return; + } + const defaultStep = getDefaultOnboardingStep(draftConfig); + const defaultIndex = onboardingStepOrder.indexOf(defaultStep); + setOnboardingStep((current) => { + const currentIndex = onboardingStepOrder.indexOf(current); + return defaultIndex > currentIndex ? defaultStep : current; + }); + }, [activeView, configLoaded, onboardingStatusLoaded, draftConfig]); + useEffect(() => () => { if (toastTimer.current !== undefined) { window.clearTimeout(toastTimer.current); @@ -2237,7 +2287,7 @@ function App() { setProviderEditIndex(undefined); setProviderAddOpen(false); if (activeView === "onboarding") { - setOnboardingStep("profile"); + setOnboardingStep(getDefaultOnboardingStep(next)); } } } @@ -2277,7 +2327,7 @@ function App() { setProviderDeepLinkRequest(undefined); showToast(`${copy.text["Imported provider"] ?? "Imported provider"} ${importedProviderName}`.trim()); if (activeView === "onboarding") { - setOnboardingStep("profile"); + setOnboardingStep(getDefaultOnboardingStep(next)); } } } catch (error) { @@ -2909,8 +2959,15 @@ function App() { } } - function completeOnboarding() { - persistOnboardingCompleted(); + async function completeOnboarding() { + if (window.ccr) { + try { + await window.ccr.setOnboardingFinished(); + } catch (error) { + setActionError(error instanceof Error ? error.message : String(error)); + return; + } + } setActiveView("overview"); } @@ -3183,18 +3240,20 @@ function App() { {activeView === "onboarding" ? (
- setActiveView("profile")} - onOpenProviders={() => setActiveView("providers")} - onSelectStep={setOnboardingStep} - /> + {configLoaded && onboardingStatusLoaded ? ( + setActiveView("profile")} + onOpenProviders={() => setActiveView("providers")} + onSelectStep={setOnboardingStep} + /> + ) : null}
) : ( <> @@ -3748,13 +3807,13 @@ function OnboardingView({ const t = useAppText(); const shouldReduceMotion = useReducedMotion(); const [selectedAgent, setSelectedAgent] = useState("claude-code"); - const providerReady = config.Providers.length > 0; - const profileReady = config.profile.enabled && config.profile.profiles.some((profile) => profile.enabled); + const providerReady = isOnboardingProviderReady(config); + const profileReady = isOnboardingProfileReady(config); const routeReady = providerReady && profileReady; const activeIndex = Math.max(0, onboardingStepOrder.indexOf(activeStep)); const activeDetails = onboardingStepDetails[activeStep]; const previousStep = onboardingStepOrder[activeIndex - 1]; - const nextStep = onboardingStepOrder[activeIndex + 1]; + const nextStep = getNextOnboardingStep(activeStep, config); const firstProvider = config.Providers[0]; const providerNames = config.Providers.map((provider) => provider.name).filter(Boolean).slice(0, 3).join(", "); const selectedAgentProfiles = config.profile.profiles.filter((profile) => profile.agent === selectedAgent); @@ -3791,7 +3850,7 @@ function OnboardingView({ transition={{ duration: 0.16 }} >
-

{t("Three steps to connect a provider to your agent.")}

+

{t("Welcome to CCR")}

@@ -10590,22 +10649,6 @@ function readLanguagePreference(): AppLanguagePreference { } } -function readOnboardingCompleted(): boolean { - try { - return window.localStorage.getItem(onboardingCompletionStorageKey) === "true"; - } catch { - return false; - } -} - -function persistOnboardingCompleted() { - try { - window.localStorage.setItem(onboardingCompletionStorageKey, "true"); - } catch { - // If storage is unavailable, onboarding can reappear on the next launch. - } -} - function persistLanguagePreference(language: AppLanguagePreference) { try { if (language === "system") { diff --git a/src/renderer/types/electron.d.ts b/src/renderer/types/electron.d.ts index 6b5b8ef..fdb609e 100644 --- a/src/renderer/types/electron.d.ts +++ b/src/renderer/types/electron.d.ts @@ -34,6 +34,7 @@ declare global { getAppInfo: () => Promise; getConfig: () => Promise; getGatewayStatus: () => Promise; + getOnboardingFinished: () => Promise; getPendingProviderDeepLinks: () => Promise; getPluginMarketplace: () => Promise; getProxyCertificateStatus: () => Promise; @@ -52,6 +53,7 @@ declare global { saveApiKeys: (apiKeys: ApiKeyConfig[]) => Promise; saveConfig: (config: AppConfig) => Promise; selectPluginDirectory: () => Promise; + setOnboardingFinished: () => Promise; setProxyNetworkCaptureEnabled: (enabled: boolean) => Promise; setTrayDetailOpen: (open: boolean, provider?: string) => Promise; showMainWindow: () => Promise; diff --git a/src/shared/ipc-channels.ts b/src/shared/ipc-channels.ts index 4c07d4b..99ede23 100644 --- a/src/shared/ipc-channels.ts +++ b/src/shared/ipc-channels.ts @@ -5,6 +5,7 @@ export const IPC_CHANNELS = { appGetAgentAnalysis: "ccr:app:get-agent-analysis", appGetGatewayStatus: "ccr:app:get-gateway-status", appGetInfo: "ccr:app:get-info", + appGetOnboardingFinished: "ccr:app:get-onboarding-finished", appGetPendingProviderDeepLinks: "ccr:app:get-pending-provider-deep-links", appGetProxyCertificateStatus: "ccr:app:get-proxy-certificate-status", appGetProxyNetworkCaptures: "ccr:app:get-proxy-network-captures", @@ -27,6 +28,7 @@ export const IPC_CHANNELS = { appStartGateway: "ccr:app:start-gateway", appStopGateway: "ccr:app:stop-gateway", appSaveConfig: "ccr:app:save-config", + appSetOnboardingFinished: "ccr:app:set-onboarding-finished", appSetTrayDetailOpen: "ccr:app:set-tray-detail-open", appSetProxyNetworkCaptureEnabled: "ccr:app:set-proxy-network-capture-enabled", appSelectPluginDirectory: "ccr:app:select-plugin-directory",