From cda69383f092d0f805ddacd056806724bce9d144 Mon Sep 17 00:00:00 2001 From: "Tommy D. Rossi" Date: Thu, 15 Jan 2026 13:32:54 +0100 Subject: [PATCH] clean up deps: remove unused, update zod v4, replace chalk with picocolors --- playwriter/package.json | 10 +- playwriter/src/cdp-relay.ts | 68 ++--- pnpm-lock.yaml | 522 +++++++++++++++++++----------------- 3 files changed, 307 insertions(+), 293 deletions(-) diff --git a/playwriter/package.json b/playwriter/package.json index aec9cfd..b59c853 100644 --- a/playwriter/package.json +++ b/playwriter/package.json @@ -32,6 +32,7 @@ "@types/ws": "^8.18.1", "@vitest/ui": "^4.0.8", "bippy": "^0.5.27", + "devtools-protocol": "^0.0.1568893", "image-size": "^2.0.2", "mcp-extension": "workspace:*", "vite-node": "^5.0.0", @@ -40,22 +41,19 @@ "dependencies": { "@hono/node-server": "^1.19.6", "@hono/node-ws": "^1.2.0", - "@modelcontextprotocol/sdk": "^1.21.1", + "@modelcontextprotocol/sdk": "^1.25.2", "cac": "^6.7.14", - "chalk": "^5.6.2", - "colord": "^2.9.3", - "devtools-protocol": "^0.0.1543509", "diff": "^8.0.2", "hono": "^4.10.6", "kill-port-process": "^3.2.1", + "picocolors": "^1.1.1", "playwright-core": "^1.56.1", "posthtml": "^0.16.7", "posthtml-beautify": "^0.7.0", "string-dedent": "^3.0.2", "strip-ansi": "^7.1.2", - "user-agents": "^1.1.669", "ws": "^8.18.3", - "zod": "^3" + "zod": "^4.3.5" }, "optionalDependencies": { "sharp": "^0.34.5" diff --git a/playwriter/src/cdp-relay.ts b/playwriter/src/cdp-relay.ts index 69d4297..3f91aa6 100644 --- a/playwriter/src/cdp-relay.ts +++ b/playwriter/src/cdp-relay.ts @@ -6,7 +6,7 @@ import type { WSContext } from 'hono/ws' import type { Protocol } from './cdp-types.js' import type { CDPCommand, CDPResponseBase, CDPEventBase, CDPEventFor, RelayServerEvents } from './cdp-types.js' import type { ExtensionMessage, ExtensionEventMessage } from './protocol.js' -import chalk from 'chalk' +import pc from 'picocolors' import { EventEmitter } from 'node:events' import { VERSION } from './utils.js' @@ -150,17 +150,17 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. } } - const detailsStr = details.length > 0 ? ` ${chalk.gray(details.join(', '))}` : '' + const detailsStr = details.length > 0 ? ` ${pc.gray(details.join(', '))}` : '' if (direction === 'from-playwright') { - const clientLabel = clientId ? chalk.blue(`[${clientId}]`) : '' - logger?.log(chalk.cyan('← Playwright'), clientLabel + ':', method + detailsStr) + const clientLabel = clientId ? pc.blue(`[${clientId}]`) : '' + logger?.log(pc.cyan('← Playwright'), clientLabel + ':', method + detailsStr) } else if (direction === 'from-extension') { - logger?.log(chalk.yellow('← Extension:'), method + detailsStr) + logger?.log(pc.yellow('← Extension:'), method + detailsStr) } else if (direction === 'to-playwright') { - const color = source === 'server' ? chalk.magenta : chalk.green - const sourceLabel = source === 'server' ? chalk.gray(' (server-generated)') : '' - const clientLabel = clientId ? chalk.blue(`[${clientId}]`) : chalk.blue('[ALL]') + const color = source === 'server' ? pc.magenta : pc.green + const sourceLabel = source === 'server' ? pc.gray(' (server-generated)') : '' + const clientLabel = clientId ? pc.blue(`[${clientId}]`) : pc.blue('[ALL]') logger?.log(color('→ Playwright'), clientLabel + ':', method + detailsStr + sourceLabel) } } @@ -246,7 +246,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. } try { - logger?.log(chalk.blue('Auto-creating initial tab for Playwright client')) + logger?.log(pc.blue('Auto-creating initial tab for Playwright client')) const result = await sendToExtension({ method: 'createInitialTab', timeout: 10000 }) as { success: boolean tabId: number @@ -259,7 +259,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. targetId: result.targetInfo.targetId, targetInfo: result.targetInfo }) - logger?.log(chalk.blue(`Auto-created tab, now have ${connectedTargets.size} targets, url: ${result.targetInfo.url}`)) + logger?.log(pc.blue(`Auto-created tab, now have ${connectedTargets.size} targets, url: ${result.targetInfo.url}`)) } } catch (e) { logger?.error('Failed to auto-create initial tab:', e) @@ -377,7 +377,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. } const timeout = setTimeout(() => { emitter.off('cdp:event', handler) - logger?.log(chalk.yellow(`IMPORTANT: Runtime.enable timed out waiting for main frame executionContextCreated (sessionId: ${sessionId}). This may cause pages to not be visible immediately.`)) + logger?.log(pc.yellow(`IMPORTANT: Runtime.enable timed out waiting for main frame executionContextCreated (sessionId: ${sessionId}). This may cause pages to not be visible immediately.`)) resolve() }, 3000) emitter.on('cdp:event', handler) @@ -500,7 +500,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. try { const { level, args } = await c.req.json() const logFn = (logger as any)?.[level] || logger?.log - const prefix = chalk.red(`[MCP] [${level.toUpperCase()}]`) + const prefix = pc.red(`[MCP] [${level.toUpperCase()}]`) logFn?.(prefix, ...args) return c.json({ ok: true }) } catch { @@ -520,11 +520,11 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. if (origin.startsWith('chrome-extension://')) { const extensionId = origin.replace('chrome-extension://', '') if (!OUR_EXTENSION_IDS.includes(extensionId)) { - logger?.log(chalk.red(`Rejecting /cdp WebSocket from unknown extension: ${extensionId}`)) + logger?.log(pc.red(`Rejecting /cdp WebSocket from unknown extension: ${extensionId}`)) return c.text('Forbidden', 403) } } else { - logger?.log(chalk.red(`Rejecting /cdp WebSocket from origin: ${origin}`)) + logger?.log(pc.red(`Rejecting /cdp WebSocket from origin: ${origin}`)) return c.text('Forbidden', 403) } } @@ -543,14 +543,14 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. return { async onOpen(_event, ws) { if (playwrightClients.has(clientId)) { - logger?.log(chalk.red(`Rejecting duplicate client ID: ${clientId}`)) + logger?.log(pc.red(`Rejecting duplicate client ID: ${clientId}`)) ws.close(1000, 'Client ID already connected') return } // Add client first so it can receive Target.attachedToTarget events playwrightClients.set(clientId, { id: clientId, ws }) - logger?.log(chalk.green(`Playwright client connected: ${clientId} (${playwrightClients.size} total) (extension? ${!!extensionWs}) (${connectedTargets.size} pages)`)) + logger?.log(pc.green(`Playwright client connected: ${clientId} (${playwrightClients.size} total) (extension? ${!!extensionWs}) (${connectedTargets.size} pages)`)) }, async onMessage(event, ws) { @@ -607,9 +607,9 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. } } satisfies CDPEventFor<'Target.attachedToTarget'> if (!target.targetInfo.url) { - logger?.error(chalk.red('[Server] WARNING: Target.attachedToTarget sent with empty URL!'), JSON.stringify(attachedPayload)) + logger?.error(pc.red('[Server] WARNING: Target.attachedToTarget sent with empty URL!'), JSON.stringify(attachedPayload)) } - logger?.log(chalk.magenta('[Server] Target.attachedToTarget full payload:'), JSON.stringify(attachedPayload)) + logger?.log(pc.magenta('[Server] Target.attachedToTarget full payload:'), JSON.stringify(attachedPayload)) sendToPlaywright({ message: attachedPayload, clientId, @@ -634,9 +634,9 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. } } satisfies CDPEventFor<'Target.targetCreated'> if (!target.targetInfo.url) { - logger?.error(chalk.red('[Server] WARNING: Target.targetCreated sent with empty URL!'), JSON.stringify(targetCreatedPayload)) + logger?.error(pc.red('[Server] WARNING: Target.targetCreated sent with empty URL!'), JSON.stringify(targetCreatedPayload)) } - logger?.log(chalk.magenta('[Server] Target.targetCreated full payload:'), JSON.stringify(targetCreatedPayload)) + logger?.log(pc.magenta('[Server] Target.targetCreated full payload:'), JSON.stringify(targetCreatedPayload)) sendToPlaywright({ message: targetCreatedPayload, clientId, @@ -661,9 +661,9 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. } } satisfies CDPEventFor<'Target.attachedToTarget'> if (!target.targetInfo.url) { - logger?.error(chalk.red('[Server] WARNING: Target.attachedToTarget (from attachToTarget) sent with empty URL!'), JSON.stringify(attachedPayload)) + logger?.error(pc.red('[Server] WARNING: Target.attachedToTarget (from attachToTarget) sent with empty URL!'), JSON.stringify(attachedPayload)) } - logger?.log(chalk.magenta('[Server] Target.attachedToTarget (from attachToTarget) payload:'), JSON.stringify(attachedPayload)) + logger?.log(pc.magenta('[Server] Target.attachedToTarget (from attachToTarget) payload:'), JSON.stringify(attachedPayload)) sendToPlaywright({ message: attachedPayload, clientId, @@ -689,7 +689,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. onClose() { playwrightClients.delete(clientId) - logger?.log(chalk.yellow(`Playwright client disconnected: ${clientId} (${playwrightClients.size} remaining)`)) + logger?.log(pc.yellow(`Playwright client disconnected: ${clientId} (${playwrightClients.size} remaining)`)) }, onError(event) { @@ -707,7 +707,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. const isLocalhost = remoteAddress === '127.0.0.1' || remoteAddress === '::1' if (!isLocalhost) { - logger?.log(chalk.red(`Rejecting /extension WebSocket from remote IP: ${remoteAddress}`)) + logger?.log(pc.red(`Rejecting /extension WebSocket from remote IP: ${remoteAddress}`)) return c.text('Forbidden - Extension must be local', 403) } @@ -716,13 +716,13 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. // is coming from our specific Chrome Extension, not a malicious website. const origin = c.req.header('origin') if (!origin || !origin.startsWith('chrome-extension://')) { - logger?.log(chalk.red(`Rejecting /extension WebSocket: origin must be chrome-extension://, got: ${origin || 'none'}`)) + logger?.log(pc.red(`Rejecting /extension WebSocket: origin must be chrome-extension://, got: ${origin || 'none'}`)) return c.text('Forbidden', 403) } const extensionId = origin.replace('chrome-extension://', '') if (!OUR_EXTENSION_IDS.includes(extensionId)) { - logger?.log(chalk.red(`Rejecting /extension WebSocket from unknown extension: ${extensionId}`)) + logger?.log(pc.red(`Rejecting /extension WebSocket from unknown extension: ${extensionId}`)) return c.text('Forbidden', 403) } @@ -731,7 +731,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. return { onOpen(_event, ws) { if (extensionWs) { - logger?.log(chalk.yellow('Closing existing extension connection to replace with new one')) + logger?.log(pc.yellow('Closing existing extension connection to replace with new one')) extensionWs.close(4001, 'Extension Replaced') // Clear state from the old connection to prevent leaks @@ -781,7 +781,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. } else if (message.method === 'log') { const { level, args } = message.params const logFn = (logger as any)?.[level] || logger?.log - const prefix = chalk.yellow(`[Extension] [${level.toUpperCase()}]`) + const prefix = pc.yellow(`[Extension] [${level.toUpperCase()}]`) logFn?.(prefix, ...args) } else { const extensionEvent = message as ExtensionEventMessage @@ -809,14 +809,14 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. // These targets can't be properly controlled through chrome.debugger API // and cause issues when Playwright tries to initialize them (issue #14) if (isRestrictedTarget(targetParams.targetInfo)) { - logger?.log(chalk.gray(`[Server] Ignoring restricted target: ${targetParams.targetInfo.type} (${targetParams.targetInfo.url})`)) + logger?.log(pc.gray(`[Server] Ignoring restricted target: ${targetParams.targetInfo.type} (${targetParams.targetInfo.url})`)) return } if (!targetParams.targetInfo.url) { - logger?.error(chalk.red('[Extension] WARNING: Target.attachedToTarget received with empty URL!'), JSON.stringify({ method, params: targetParams, sessionId })) + logger?.error(pc.red('[Extension] WARNING: Target.attachedToTarget received with empty URL!'), JSON.stringify({ method, params: targetParams, sessionId })) } - logger?.log(chalk.yellow('[Extension] Target.attachedToTarget full payload:'), JSON.stringify({ method, params: targetParams, sessionId })) + logger?.log(pc.yellow('[Extension] Target.attachedToTarget full payload:'), JSON.stringify({ method, params: targetParams, sessionId })) // Check if we already sent this target to clients (e.g., from Target.setAutoAttach response) const alreadyConnected = connectedTargets.has(targetParams.sessionId) @@ -854,7 +854,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. for (const [sid, target] of connectedTargets.entries()) { if (target.targetId === crashParams.targetId) { connectedTargets.delete(sid) - logger?.log(chalk.red('[Server] Target crashed, removing:'), crashParams.targetId) + logger?.log(pc.red('[Server] Target crashed, removing:'), crashParams.targetId) break } } @@ -892,7 +892,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. url: frameParams.frame.url, title: frameParams.frame.name || target.targetInfo.title, } - logger?.log(chalk.magenta('[Server] Updated target URL from Page.frameNavigated:'), frameParams.frame.url) + logger?.log(pc.magenta('[Server] Updated target URL from Page.frameNavigated:'), frameParams.frame.url) } } @@ -913,7 +913,7 @@ export async function startPlayWriterCDPRelayServer({ port = 19988, host = '127. ...target.targetInfo, url: navParams.url, } - logger?.log(chalk.magenta('[Server] Updated target URL from Page.navigatedWithinDocument:'), navParams.url) + logger?.log(pc.magenta('[Server] Updated target URL from Page.navigatedWithinDocument:'), navParams.url) } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9482278..a038b02 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,20 +65,11 @@ importers: specifier: ^1.2.0 version: 1.2.0(@hono/node-server@1.19.6(hono@4.10.6))(bufferutil@4.0.9)(hono@4.10.6) '@modelcontextprotocol/sdk': - specifier: ^1.21.1 - version: 1.21.1(@cfworker/json-schema@4.1.1) + specifier: ^1.25.2 + version: 1.25.2(@cfworker/json-schema@4.1.1)(hono@4.10.6)(zod@4.3.5) cac: specifier: ^6.7.14 version: 6.7.14 - chalk: - specifier: ^5.6.2 - version: 5.6.2 - colord: - specifier: ^2.9.3 - version: 2.9.3 - devtools-protocol: - specifier: ^0.0.1543509 - version: 0.0.1543509 diff: specifier: ^8.0.2 version: 8.0.2 @@ -88,6 +79,9 @@ importers: kill-port-process: specifier: ^3.2.1 version: 3.2.1 + picocolors: + specifier: ^1.1.1 + version: 1.1.1 playwright-core: specifier: ^1.56.1 version: 1.56.1 @@ -97,28 +91,22 @@ importers: posthtml-beautify: specifier: ^0.7.0 version: 0.7.0 - sharp: - specifier: ^0.34.5 - version: 0.34.5 string-dedent: specifier: ^3.0.2 version: 3.0.2 strip-ansi: specifier: ^7.1.2 version: 7.1.2 - user-agents: - specifier: ^1.1.669 - version: 1.1.669 ws: specifier: ^8.18.3 version: 8.18.3(bufferutil@4.0.9) zod: - specifier: ^3 - version: 3.25.76 + specifier: ^4.3.5 + version: 4.3.5 devDependencies: '@browserbasehq/stagehand': specifier: ^3.0.5 - version: 3.0.5(@cfworker/json-schema@4.1.1)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(deepmerge@4.3.1)(dotenv@16.6.1)(zod@3.25.76) + version: 3.0.5(@cfworker/json-schema@4.1.1)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(deepmerge@4.3.1)(dotenv@16.6.1)(hono@4.10.6)(zod@4.3.5) '@mizchi/selector-generator': specifier: 1.50.0-next version: 1.50.0-next @@ -137,6 +125,9 @@ importers: bippy: specifier: ^0.5.27 version: 0.5.27(@types/react@19.2.7)(react@19.2.3) + devtools-protocol: + specifier: ^0.0.1568893 + version: 0.0.1568893 image-size: specifier: ^2.0.2 version: 2.0.2 @@ -149,6 +140,10 @@ importers: vitest: specifier: ^4.0.8 version: 4.0.8(@types/node@24.10.1)(@vitest/ui@4.0.8)(jiti@2.6.1)(jsdom@27.2.0(bufferutil@4.0.9))(lightningcss@1.30.2)(tsx@4.20.6) + optionalDependencies: + sharp: + specifier: ^0.34.5 + version: 0.34.5 website: dependencies: @@ -243,8 +238,8 @@ importers: packages: - '@acemir/cssom@0.9.30': - resolution: {integrity: sha512-9CnlMCI0LmCIq0olalQqdWrJHPzm0/tw3gzOA9zJSgvFX7Xau3D24mAGa4BtwxwY69nsuJW6kQqqCzf/mEcQgg==} + '@acemir/cssom@0.9.31': + resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} '@actions/cache@3.3.0': resolution: {integrity: sha512-+eCsMTIZUEm+QA9GqjollOhCdvRrZ1JV8d9Rp34zVNizBkYITO8dhKczP5Xps1dFzc5n59p7vYVtZrGt18bb5Q==} @@ -667,8 +662,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.22': - resolution: {integrity: sha512-qBcx6zYlhleiFfdtzkRgwNC7VVoAwfK76Vmsw5t+PbvtdknO9StgRk7ROvq9so1iqbdW4uLIDAsXRsTfUrIoOw==} + '@csstools/css-syntax-patches-for-csstree@1.0.25': + resolution: {integrity: sha512-g0Kw9W3vjx5BEBAF8c5Fm2NcB/Fs8jJXh85aXqwEXiL+tqtOut07TWgyaGzAAfTM+gKckrrncyeGEZPcaRgm2Q==} engines: {node: '>=18'} '@csstools/css-tokenizer@3.0.4': @@ -1147,6 +1142,12 @@ packages: peerDependencies: hono: ^4 + '@hono/node-server@1.19.9': + resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@hono/node-ws@1.2.0': resolution: {integrity: sha512-OBPQ8OSHBw29mj00wT/xGYtB6HY54j0fNSdVZ7gZM3TUeq0So11GXaWtFf1xWxQNfumKIsj0wRuLKWfVsO5GgQ==} engines: {node: '>=18.14.1'} @@ -1349,11 +1350,12 @@ packages: '@mjackson/node-fetch-server@0.7.0': resolution: {integrity: sha512-un8diyEBKU3BTVj3GzlTPA1kIjCkGdD+AMYQy31Gf9JCkfoZzwgJ79GUtHrF2BN3XPNMLpubbzPcxys+a3uZEw==} - '@modelcontextprotocol/sdk@1.21.1': - resolution: {integrity: sha512-UyLFcJLDvUuZbGnaQqXFT32CpPpGj7VS19roLut6gkQVhb439xUzYWbsUvdI3ZPL+2hnFosuugtYWE0Mcs1rmQ==} + '@modelcontextprotocol/sdk@1.25.2': + resolution: {integrity: sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 peerDependenciesMeta: '@cfworker/json-schema': optional: true @@ -2644,8 +2646,8 @@ packages: resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} brace-expansion@1.1.12: @@ -2711,10 +2713,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} @@ -2764,9 +2762,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -2799,9 +2794,9 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} + content-disposition@1.0.1: + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + engines: {node: '>=18'} content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} @@ -2845,8 +2840,8 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@5.3.5: - resolution: {integrity: sha512-GlsEptulso7Jg0VaOZ8BXQi3AkYM5BOJKEO/rjMidSCq70FkIC5y0eawrCXeYzxgt3OCf4Ls+eoxN+/05vN0Ag==} + cssstyle@5.3.7: + resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} engines: {node: '>=20'} csstype@3.2.3: @@ -2946,8 +2941,8 @@ packages: devtools-protocol@0.0.1464554: resolution: {integrity: sha512-CAoP3lYfwAGQTaAXYvA6JZR0fjGUb7qec1qf4mToyoH2TZgUFeIqYcjh6f9jNuhHfuZiEdH+PONHYrLhRQX6aw==} - devtools-protocol@0.0.1543509: - resolution: {integrity: sha512-JlHmIPtgDeqcL2uwPA7xryDNSb1ug9h11IexYQUG98vcyV6/L3taLRECgUk/B/7yQhXC/sgBzKj9kaB+bxmdWg==} + devtools-protocol@0.0.1568893: + resolution: {integrity: sha512-jSwwNnDwRQ5CQh5DNhnmQGms/pkdOUIrJDlKf7VR9bl/nRlcifyxe1jieFnP7bL1vUIElTcLzxu3AYB8YBBpjQ==} diff@8.0.2: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} @@ -3160,8 +3155,8 @@ packages: resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} exsolve@1.0.8: @@ -3234,9 +3229,9 @@ packages: resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -3426,10 +3421,6 @@ packages: htmlparser2@7.2.0: resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -3461,6 +3452,10 @@ packages: resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -3561,6 +3556,9 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jose@6.1.3: + resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -3607,6 +3605,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -3730,9 +3731,6 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash.clonedeep@4.5.0: - resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} - lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -3813,9 +3811,9 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} @@ -4149,8 +4147,8 @@ packages: resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} hasBin: true - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} pkg-types@2.3.0: @@ -4268,10 +4266,6 @@ packages: resolution: {integrity: sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==} engines: {node: '>=18'} - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - qs@6.14.1: resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} @@ -4293,8 +4287,8 @@ packages: resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} - raw-body@3.0.1: - resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} react-dom@19.2.3: @@ -4443,8 +4437,8 @@ packages: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} sentries@0.2.2: @@ -4454,8 +4448,8 @@ packages: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} set-cookie-parser@2.7.2: @@ -4567,10 +4561,6 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -4822,9 +4812,6 @@ packages: urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} - user-agents@1.1.669: - resolution: {integrity: sha512-pbIzG+AOqCaIpySKJ4IAm1l0VyE4jMnK4y1thV8lm8PYxI+7X5uWcppOK7zY79TCKKTAnJH3/4gaVIZHsjrmJA==} - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -5075,8 +5062,8 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@8.0.0: - resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} whatwg-encoding@3.1.1: @@ -5132,6 +5119,18 @@ packages: utf-8-validate: optional: true + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -5176,22 +5175,25 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} - zod-to-json-schema@3.24.6: - resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} - peerDependencies: - zod: ^3.24.1 - zod-to-json-schema@3.25.0: resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==} peerDependencies: zod: ^3.25 || ^4 + zod-to-json-schema@3.25.1: + resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} + peerDependencies: + zod: ^3.25 || ^4 + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.3.5: + resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} + zustand@5.0.8: resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} engines: {node: '>=12.20.0'} @@ -5212,7 +5214,7 @@ packages: snapshots: - '@acemir/cssom@0.9.30': + '@acemir/cssom@0.9.31': optional: true '@actions/cache@3.3.0': @@ -5251,110 +5253,110 @@ snapshots: '@actions/io@1.1.3': {} - '@ai-sdk/anthropic@2.0.53(zod@3.25.76)': + '@ai-sdk/anthropic@2.0.53(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/azure@2.0.82(zod@3.25.76)': + '@ai-sdk/azure@2.0.82(zod@4.3.5)': dependencies: - '@ai-sdk/openai': 2.0.80(zod@3.25.76) + '@ai-sdk/openai': 2.0.80(zod@4.3.5) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/cerebras@1.0.32(zod@3.25.76)': + '@ai-sdk/cerebras@1.0.32(zod@4.3.5)': dependencies: - '@ai-sdk/openai-compatible': 1.0.28(zod@3.25.76) + '@ai-sdk/openai-compatible': 1.0.28(zod@4.3.5) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/deepseek@1.0.31(zod@3.25.76)': + '@ai-sdk/deepseek@1.0.31(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/gateway@2.0.18(zod@3.25.76)': + '@ai-sdk/gateway@2.0.18(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) '@vercel/oidc': 3.0.5 - zod: 3.25.76 + zod: 4.3.5 - '@ai-sdk/google@2.0.44(zod@3.25.76)': + '@ai-sdk/google@2.0.44(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/groq@2.0.32(zod@3.25.76)': + '@ai-sdk/groq@2.0.32(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/mistral@2.0.25(zod@3.25.76)': + '@ai-sdk/mistral@2.0.25(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/openai-compatible@1.0.28(zod@3.25.76)': + '@ai-sdk/openai-compatible@1.0.28(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/openai@2.0.80(zod@3.25.76)': + '@ai-sdk/openai@2.0.80(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/perplexity@2.0.21(zod@3.25.76)': + '@ai-sdk/perplexity@2.0.21(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/provider-utils@3.0.18(zod@3.25.76)': + '@ai-sdk/provider-utils@3.0.18(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 '@standard-schema/spec': 1.0.0 eventsource-parser: 3.0.6 - zod: 3.25.76 + zod: 4.3.5 '@ai-sdk/provider@2.0.0': dependencies: json-schema: 0.4.0 - '@ai-sdk/togetherai@1.0.29(zod@3.25.76)': + '@ai-sdk/togetherai@1.0.29(zod@4.3.5)': dependencies: - '@ai-sdk/openai-compatible': 1.0.28(zod@3.25.76) + '@ai-sdk/openai-compatible': 1.0.28(zod@4.3.5) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true - '@ai-sdk/xai@2.0.39(zod@3.25.76)': + '@ai-sdk/xai@2.0.39(zod@4.3.5)': dependencies: - '@ai-sdk/openai-compatible': 1.0.28(zod@3.25.76) + '@ai-sdk/openai-compatible': 1.0.28(zod@4.3.5) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true '@anthropic-ai/sdk@0.39.0': @@ -5742,42 +5744,42 @@ snapshots: transitivePeerDependencies: - encoding - '@browserbasehq/stagehand@3.0.5(@cfworker/json-schema@4.1.1)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(deepmerge@4.3.1)(dotenv@16.6.1)(zod@3.25.76)': + '@browserbasehq/stagehand@3.0.5(@cfworker/json-schema@4.1.1)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(deepmerge@4.3.1)(dotenv@16.6.1)(hono@4.10.6)(zod@4.3.5)': dependencies: '@ai-sdk/provider': 2.0.0 '@anthropic-ai/sdk': 0.39.0 '@browserbasehq/sdk': 2.6.0 - '@google/genai': 1.31.0(@modelcontextprotocol/sdk@1.21.1(@cfworker/json-schema@4.1.1))(bufferutil@4.0.9) - '@langchain/openai': 0.4.9(@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)) - '@modelcontextprotocol/sdk': 1.21.1(@cfworker/json-schema@4.1.1) - ai: 5.0.108(zod@3.25.76) + '@google/genai': 1.31.0(@modelcontextprotocol/sdk@1.25.2(@cfworker/json-schema@4.1.1)(hono@4.10.6)(zod@4.3.5))(bufferutil@4.0.9) + '@langchain/openai': 0.4.9(@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5)))(ws@8.18.3(bufferutil@4.0.9)) + '@modelcontextprotocol/sdk': 1.25.2(@cfworker/json-schema@4.1.1)(hono@4.10.6)(zod@4.3.5) + ai: 5.0.108(zod@4.3.5) deepmerge: 4.3.1 devtools-protocol: 0.0.1464554 dotenv: 16.6.1 fetch-cookie: 3.1.0 - openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76) + openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5) pino: 9.14.0 pino-pretty: 13.1.3 playwright: 1.57.0 ws: 8.18.3(bufferutil@4.0.9) - zod: 3.25.76 - zod-to-json-schema: 3.25.0(zod@3.25.76) + zod: 4.3.5 + zod-to-json-schema: 3.25.0(zod@4.3.5) optionalDependencies: - '@ai-sdk/anthropic': 2.0.53(zod@3.25.76) - '@ai-sdk/azure': 2.0.82(zod@3.25.76) - '@ai-sdk/cerebras': 1.0.32(zod@3.25.76) - '@ai-sdk/deepseek': 1.0.31(zod@3.25.76) - '@ai-sdk/google': 2.0.44(zod@3.25.76) - '@ai-sdk/groq': 2.0.32(zod@3.25.76) - '@ai-sdk/mistral': 2.0.25(zod@3.25.76) - '@ai-sdk/openai': 2.0.80(zod@3.25.76) - '@ai-sdk/perplexity': 2.0.21(zod@3.25.76) - '@ai-sdk/togetherai': 1.0.29(zod@3.25.76) - '@ai-sdk/xai': 2.0.39(zod@3.25.76) - '@langchain/core': 0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)) + '@ai-sdk/anthropic': 2.0.53(zod@4.3.5) + '@ai-sdk/azure': 2.0.82(zod@4.3.5) + '@ai-sdk/cerebras': 1.0.32(zod@4.3.5) + '@ai-sdk/deepseek': 1.0.31(zod@4.3.5) + '@ai-sdk/google': 2.0.44(zod@4.3.5) + '@ai-sdk/groq': 2.0.32(zod@4.3.5) + '@ai-sdk/mistral': 2.0.25(zod@4.3.5) + '@ai-sdk/openai': 2.0.80(zod@4.3.5) + '@ai-sdk/perplexity': 2.0.21(zod@4.3.5) + '@ai-sdk/togetherai': 1.0.29(zod@4.3.5) + '@ai-sdk/xai': 2.0.39(zod@4.3.5) + '@langchain/core': 0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5)) bufferutil: 4.0.9 chrome-launcher: 1.2.1 - ollama-ai-provider-v2: 1.5.5(zod@3.25.76) + ollama-ai-provider-v2: 1.5.5(zod@4.3.5) patchright-core: 1.57.0 playwright-core: 1.56.1 puppeteer-core: 22.15.0(bufferutil@4.0.9) @@ -5789,6 +5791,7 @@ snapshots: - bare-abort-controller - bare-buffer - encoding + - hono - react-native-b4a - supports-color - utf-8-validate @@ -5961,7 +5964,7 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 optional: true - '@csstools/css-syntax-patches-for-csstree@1.0.22': + '@csstools/css-syntax-patches-for-csstree@1.0.25': optional: true '@csstools/css-tokenizer@3.0.4': @@ -6199,12 +6202,12 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@google/genai@1.31.0(@modelcontextprotocol/sdk@1.21.1(@cfworker/json-schema@4.1.1))(bufferutil@4.0.9)': + '@google/genai@1.31.0(@modelcontextprotocol/sdk@1.25.2(@cfworker/json-schema@4.1.1)(hono@4.10.6)(zod@4.3.5))(bufferutil@4.0.9)': dependencies: google-auth-library: 10.5.0 ws: 8.18.3(bufferutil@4.0.9) optionalDependencies: - '@modelcontextprotocol/sdk': 1.21.1(@cfworker/json-schema@4.1.1) + '@modelcontextprotocol/sdk': 1.25.2(@cfworker/json-schema@4.1.1)(hono@4.10.6)(zod@4.3.5) transitivePeerDependencies: - bufferutil - supports-color @@ -6214,6 +6217,10 @@ snapshots: dependencies: hono: 4.10.6 + '@hono/node-server@1.19.9(hono@4.10.6)': + dependencies: + hono: 4.10.6 + '@hono/node-ws@1.2.0(@hono/node-server@1.19.6(hono@4.10.6))(bufferutil@4.0.9)(hono@4.10.6)': dependencies: '@hono/node-server': 1.19.6(hono@4.10.6) @@ -6225,7 +6232,8 @@ snapshots: '@iarna/toml@2.2.5': {} - '@img/colour@1.0.0': {} + '@img/colour@1.0.0': + optional: true '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: @@ -6356,14 +6364,14 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76))': + '@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.3.82(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)) + langsmith: 0.3.82(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -6376,9 +6384,9 @@ snapshots: - '@opentelemetry/sdk-trace-base' - openai - '@langchain/openai@0.4.9(@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9))': + '@langchain/openai@0.4.9(@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5)))(ws@8.18.3(bufferutil@4.0.9))': dependencies: - '@langchain/core': 0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)) + '@langchain/core': 0.3.79(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5)) js-tiktoken: 1.0.21 openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76) zod: 3.25.76 @@ -6409,8 +6417,9 @@ snapshots: '@mjackson/node-fetch-server@0.7.0': {} - '@modelcontextprotocol/sdk@1.21.1(@cfworker/json-schema@4.1.1)': + '@modelcontextprotocol/sdk@1.25.2(@cfworker/json-schema@4.1.1)(hono@4.10.6)(zod@4.3.5)': dependencies: + '@hono/node-server': 1.19.9(hono@4.10.6) ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 @@ -6418,15 +6427,18 @@ snapshots: cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.0.6 - express: 5.1.0 - express-rate-limit: 7.5.1(express@5.1.0) - pkce-challenge: 5.0.0 - raw-body: 3.0.1 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) + express: 5.2.1 + express-rate-limit: 7.5.1(express@5.2.1) + jose: 6.1.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.3.5 + zod-to-json-schema: 3.25.1(zod@4.3.5) optionalDependencies: '@cfworker/json-schema': 4.1.1 transitivePeerDependencies: + - hono - supports-color '@nodelib/fs.scandir@2.1.5': @@ -7600,14 +7612,6 @@ snapshots: optionalDependencies: vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) - '@vitest/mocker@4.0.8(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))': - dependencies: - '@vitest/spy': 4.0.8 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) - '@vitest/mocker@4.0.8(vite@7.2.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))': dependencies: '@vitest/spy': 4.0.8 @@ -7659,7 +7663,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.8(@types/node@24.10.1)(@vitest/ui@4.0.8)(jiti@2.6.1)(jsdom@27.2.0(bufferutil@4.0.9))(lightningcss@1.30.2)(tsx@4.20.6) + vitest: 4.0.8(@types/node@25.0.3)(@vitest/ui@4.0.8)(jiti@2.6.1)(jsdom@27.2.0(bufferutil@4.0.9))(lightningcss@1.30.2)(tsx@4.20.6) '@vitest/utils@4.0.16': dependencies: @@ -7716,7 +7720,7 @@ snapshots: accepts@2.0.0: dependencies: - mime-types: 3.0.1 + mime-types: 3.0.2 negotiator: 1.0.0 acorn-import-attributes@1.9.5(acorn@8.15.0): @@ -7731,13 +7735,13 @@ snapshots: dependencies: humanize-ms: 1.2.1 - ai@5.0.108(zod@3.25.76): + ai@5.0.108(zod@4.3.5): dependencies: - '@ai-sdk/gateway': 2.0.18(zod@3.25.76) + '@ai-sdk/gateway': 2.0.18(zod@4.3.5) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) '@opentelemetry/api': 1.9.0 - zod: 3.25.76 + zod: 4.3.5 ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: @@ -7899,16 +7903,16 @@ snapshots: transitivePeerDependencies: - supports-color - body-parser@2.2.0: + body-parser@2.2.2: dependencies: bytes: 3.1.2 content-type: 1.0.5 debug: 4.4.3 - http-errors: 2.0.0 - iconv-lite: 0.6.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.1 + qs: 6.14.1 + raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: - supports-color @@ -7977,8 +7981,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.6.2: {} - chardet@2.1.1: {} chokidar@3.6.0: @@ -8039,8 +8041,6 @@ snapshots: color-name@1.1.4: {} - colord@2.9.3: {} - colorette@2.0.20: {} combined-stream@1.0.8: @@ -8078,9 +8078,7 @@ snapshots: dependencies: safe-buffer: 5.2.1 - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 + content-disposition@1.0.1: {} content-type@1.0.5: {} @@ -8119,11 +8117,12 @@ snapshots: cssesc@3.0.0: {} - cssstyle@5.3.5: + cssstyle@5.3.7: dependencies: '@asamuzakjp/css-color': 4.1.1 - '@csstools/css-syntax-patches-for-csstree': 1.0.22 + '@csstools/css-syntax-patches-for-csstree': 1.0.25 css-tree: 3.1.0 + lru-cache: 11.2.4 optional: true csstype@3.2.3: {} @@ -8188,7 +8187,7 @@ snapshots: devtools-protocol@0.0.1464554: {} - devtools-protocol@0.0.1543509: {} + devtools-protocol@0.0.1568893: {} diff@8.0.2: {} @@ -8450,9 +8449,9 @@ snapshots: expect-type@1.3.0: {} - express-rate-limit@7.5.1(express@5.1.0): + express-rate-limit@7.5.1(express@5.2.1): dependencies: - express: 5.1.0 + express: 5.2.1 express@4.22.1: dependencies: @@ -8490,32 +8489,33 @@ snapshots: transitivePeerDependencies: - supports-color - express@5.1.0: + express@5.2.1: dependencies: accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 + body-parser: 2.2.2 + content-disposition: 1.0.1 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 debug: 4.4.3 + depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.0 + finalhandler: 2.1.1 fresh: 2.0.0 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 2.0.0 - mime-types: 3.0.1 + mime-types: 3.0.2 on-finished: 2.4.1 once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.14.0 + qs: 6.14.1 range-parser: 1.2.1 router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 @@ -8603,7 +8603,7 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@2.1.0: + finalhandler@2.1.1: dependencies: debug: 4.4.3 encodeurl: 2.0.0 @@ -8848,14 +8848,6 @@ snapshots: domutils: 2.8.0 entities: 3.0.1 - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -8891,11 +8883,16 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true iconv-lite@0.7.0: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: optional: true @@ -8979,6 +8976,8 @@ snapshots: jiti@2.6.1: {} + jose@6.1.3: {} + joycon@3.1.1: {} js-beautify@1.15.4: @@ -9004,9 +9003,9 @@ snapshots: jsdom@27.2.0(bufferutil@4.0.9): dependencies: - '@acemir/cssom': 0.9.30 + '@acemir/cssom': 0.9.31 '@asamuzakjp/dom-selector': 6.7.6 - cssstyle: 5.3.5 + cssstyle: 5.3.7 data-urls: 6.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 4.0.0 @@ -9018,11 +9017,11 @@ snapshots: symbol-tree: 3.2.4 tough-cookie: 6.0.0 w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.0 + webidl-conversions: 8.0.1 whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 15.1.0 - ws: 8.18.3(bufferutil@4.0.9) + ws: 8.19.0(bufferutil@4.0.9) xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -9043,6 +9042,8 @@ snapshots: json-schema-traverse@1.0.0: {} + json-schema-typed@8.0.2: {} + json-schema@0.4.0: {} json5@2.2.3: {} @@ -9073,7 +9074,7 @@ snapshots: get-them-args: 1.3.2 pid-from-port: 1.1.3 - langsmith@0.3.82(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)): + langsmith@0.3.82(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5)): dependencies: '@types/uuid': 10.0.0 chalk: 4.1.2 @@ -9084,7 +9085,7 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76) + openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5) lighthouse-logger@2.0.2: dependencies: @@ -9151,8 +9152,6 @@ snapshots: dependencies: p-locate: 6.0.0 - lodash.clonedeep@4.5.0: {} - lodash.startcase@4.4.0: {} lodash@4.17.21: {} @@ -9215,7 +9214,7 @@ snapshots: dependencies: mime-db: 1.52.0 - mime-types@3.0.1: + mime-types@3.0.2: dependencies: mime-db: 1.54.0 @@ -9310,11 +9309,11 @@ snapshots: obug@2.1.1: {} - ollama-ai-provider-v2@1.5.5(zod@3.25.76): + ollama-ai-provider-v2@1.5.5(zod@4.3.5): dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - zod: 3.25.76 + '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) + zod: 4.3.5 optional: true on-exit-leak-free@2.1.2: {} @@ -9348,6 +9347,21 @@ snapshots: transitivePeerDependencies: - encoding + openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@4.3.5): + dependencies: + '@types/node': 18.19.130 + '@types/node-fetch': 2.6.13 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + optionalDependencies: + ws: 8.18.3(bufferutil@4.0.9) + zod: 4.3.5 + transitivePeerDependencies: + - encoding + outdent@0.5.0: {} p-filter@2.1.0: @@ -9522,7 +9536,7 @@ snapshots: sonic-boom: 4.2.0 thread-stream: 3.1.0 - pkce-challenge@5.0.0: {} + pkce-challenge@5.0.1: {} pkg-types@2.3.0: dependencies: @@ -9648,10 +9662,6 @@ snapshots: - utf-8-validate optional: true - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - qs@6.14.1: dependencies: side-channel: 1.1.0 @@ -9671,11 +9681,11 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-body@3.0.1: + raw-body@3.0.2: dependencies: bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.7.0 + http-errors: 2.0.1 + iconv-lite: 0.7.2 unpipe: 1.0.0 react-dom@19.2.3(react@19.2.3): @@ -9870,15 +9880,15 @@ snapshots: transitivePeerDependencies: - supports-color - send@1.2.0: + send@1.2.1: dependencies: debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 + http-errors: 2.0.1 + mime-types: 3.0.2 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 @@ -9904,12 +9914,12 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@2.2.0: + serve-static@2.2.1: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.0 + send: 1.2.1 transitivePeerDependencies: - supports-color @@ -9947,6 +9957,7 @@ snapshots: '@img/sharp-win32-arm64': 0.34.5 '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 + optional: true shebang-command@1.2.0: dependencies: @@ -10048,8 +10059,6 @@ snapshots: stackback@0.0.2: {} - statuses@2.0.1: {} - statuses@2.0.2: {} std-env@3.10.0: {} @@ -10251,7 +10260,7 @@ snapshots: dependencies: content-type: 1.0.5 media-typer: 1.1.0 - mime-types: 3.0.1 + mime-types: 3.0.2 typescript@5.9.3: {} @@ -10290,10 +10299,6 @@ snapshots: urlpattern-polyfill@10.0.0: optional: true - user-agents@1.1.669: - dependencies: - lodash.clonedeep: 4.5.0 - util-deprecate@1.0.2: {} utils-merge@1.0.1: {} @@ -10486,7 +10491,7 @@ snapshots: vitest@4.0.8(@types/node@24.10.1)(@vitest/ui@4.0.8)(jiti@2.6.1)(jsdom@27.2.0(bufferutil@4.0.9))(lightningcss@1.30.2)(tsx@4.20.6): dependencies: '@vitest/expect': 4.0.8 - '@vitest/mocker': 4.0.8(vite@7.2.2(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + '@vitest/mocker': 4.0.8(vite@7.2.2(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) '@vitest/pretty-format': 4.0.8 '@vitest/runner': 4.0.8 '@vitest/snapshot': 4.0.8 @@ -10574,7 +10579,7 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@8.0.0: + webidl-conversions@8.0.1: optional: true whatwg-encoding@3.1.1: @@ -10588,7 +10593,7 @@ snapshots: whatwg-url@15.1.0: dependencies: tr46: 6.0.0 - webidl-conversions: 8.0.0 + webidl-conversions: 8.0.1 optional: true whatwg-url@5.0.0: @@ -10627,6 +10632,11 @@ snapshots: optionalDependencies: bufferutil: 4.0.9 + ws@8.19.0(bufferutil@4.0.9): + optionalDependencies: + bufferutil: 4.0.9 + optional: true + xml-name-validator@5.0.0: optional: true @@ -10668,19 +10678,25 @@ snapshots: yocto-queue@1.2.2: {} - zod-to-json-schema@3.24.6(zod@3.25.76): - dependencies: - zod: 3.25.76 - zod-to-json-schema@3.25.0(zod@3.25.76): dependencies: zod: 3.25.76 + zod-to-json-schema@3.25.0(zod@4.3.5): + dependencies: + zod: 4.3.5 + + zod-to-json-schema@3.25.1(zod@4.3.5): + dependencies: + zod: 4.3.5 + zod@3.23.8: optional: true zod@3.25.76: {} + zod@4.3.5: {} + zustand@5.0.8(@types/react@19.2.7)(react@19.2.3): optionalDependencies: '@types/react': 19.2.7