From 8a877b36b4b495f75c005b8922bf7cf8e46f8d00 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Fri, 23 Jan 2026 12:39:40 +0000 Subject: [PATCH] feat(debug-server): add interactive debug server example (#321) * feat(examples): add debug-server example A comprehensive debug/development server for testing MCP Apps SDK features: - Vanilla TypeScript UI with collapsible panels - Message visualization (sent, received, errors) - Server tool calling interface - Multiple tool endpoints for testing * refactor(debug-server): convert to React - Replace vanilla TypeScript with React components - Add comprehensive Host Styles panel showing all CSS variables grouped by category - Use React hooks (useApp, useHostStyles, useAutoResize) - Cleaner state management with useReducer for event log - Collapsible sections for better organization - CSS modules for scoped styling * fix(debug-server): correct server name in main.ts * Revert "refactor(debug-server): convert to React" This reverts commit 5d22d2daa9a98ba412892447202ef10fbdb62f5b. * fix(debug-server): update default values for multipleBlocks and includeMeta * fix(debug-server): correct serve script and server name - serve script now runs main.ts instead of server.ts - Updated server name to 'Debug Server' - Fixed npx command in comment * fix: increase maxHeight to 6000px and add tools capability to debug app - basic-host: Increase maxHeight from 600 to 6000px - debug-server: Add tools capability to enable oncalltool/onlisttools handlers * fix(debug-server): use consistent callback names for event tracking Event types now match callback names (ontoolinput, ontoolresult, etc.) so the Callback Status panel shows correct counts and payloads. * feat(debug-server): add Update (Image) button for model context * feat(debug-server): add expandable event log entries - Click on any event log row to expand/collapse - Arrow indicator rotates when expanded - Full JSON payload shown indented in pre block - Max height with scroll for large payloads * style(debug-server): format long line in fullPayload function * test(debug-server): add to E2E tests and screenshot specs * chore: regenerate package-lock.json for cross-platform compatibility * update dep --- examples/basic-host/src/implementation.ts | 2 +- examples/basic-host/src/index.tsx | 2 +- examples/debug-server/.gitignore | 2 + examples/debug-server/README.md | 55 ++ examples/debug-server/grid-cell.png | Bin 0 -> 31325 bytes examples/debug-server/main.ts | 94 ++ examples/debug-server/mcp-app.html | 210 +++++ examples/debug-server/package.json | 42 + examples/debug-server/screenshot.png | Bin 0 -> 107493 bytes examples/debug-server/server.ts | 294 ++++++ examples/debug-server/src/global.css | 33 + examples/debug-server/src/mcp-app.css | 367 ++++++++ examples/debug-server/src/mcp-app.ts | 642 +++++++++++++ examples/debug-server/tsconfig.json | 19 + examples/debug-server/tsconfig.server.json | 17 + examples/debug-server/vite.config.ts | 24 + examples/qr-server/package.json | 3 + examples/say-server/package.json | 3 + package-lock.json | 870 +++++++++--------- tests/e2e/generate-grid-screenshots.spec.ts | 1 + tests/e2e/servers.spec.ts | 2 + .../debug-server.png | Bin 0 -> 53549 bytes 22 files changed, 2250 insertions(+), 432 deletions(-) create mode 100644 examples/debug-server/.gitignore create mode 100644 examples/debug-server/README.md create mode 100644 examples/debug-server/grid-cell.png create mode 100644 examples/debug-server/main.ts create mode 100644 examples/debug-server/mcp-app.html create mode 100644 examples/debug-server/package.json create mode 100644 examples/debug-server/screenshot.png create mode 100644 examples/debug-server/server.ts create mode 100644 examples/debug-server/src/global.css create mode 100644 examples/debug-server/src/mcp-app.css create mode 100644 examples/debug-server/src/mcp-app.ts create mode 100644 examples/debug-server/tsconfig.json create mode 100644 examples/debug-server/tsconfig.server.json create mode 100644 examples/debug-server/vite.config.ts create mode 100644 tests/e2e/servers.spec.ts-snapshots/debug-server.png diff --git a/examples/basic-host/src/implementation.ts b/examples/basic-host/src/implementation.ts index b77b8af..f923737 100644 --- a/examples/basic-host/src/implementation.ts +++ b/examples/basic-host/src/implementation.ts @@ -271,7 +271,7 @@ export function newAppBridge( updateModelContext: { text: {} }, }, { hostContext: { - containerDimensions: options?.containerDimensions ?? { maxHeight: 600 }, + containerDimensions: options?.containerDimensions ?? { maxHeight: 6000 }, displayMode: options?.displayMode ?? "inline", availableDisplayModes: ["inline", "fullscreen"], }, diff --git a/examples/basic-host/src/index.tsx b/examples/basic-host/src/index.tsx index baaa7bb..cbed7c7 100644 --- a/examples/basic-host/src/index.tsx +++ b/examples/basic-host/src/index.tsx @@ -422,7 +422,7 @@ function AppIFramePanel({ toolCallInfo, isDestroying, onTeardownComplete }: AppI onDisplayModeChange: setDisplayMode, }, { // Provide container dimensions - maxHeight for flexible sizing - containerDimensions: { maxHeight: 600 }, + containerDimensions: { maxHeight: 6000 }, displayMode: "inline", }); appBridgeRef.current = appBridge; diff --git a/examples/debug-server/.gitignore b/examples/debug-server/.gitignore new file mode 100644 index 0000000..b947077 --- /dev/null +++ b/examples/debug-server/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +dist/ diff --git a/examples/debug-server/README.md b/examples/debug-server/README.md new file mode 100644 index 0000000..89d9a7d --- /dev/null +++ b/examples/debug-server/README.md @@ -0,0 +1,55 @@ +# Debug Server + +A comprehensive testing/debugging tool for the MCP Apps SDK that exercises every capability, callback, and result format combination. + +## Tools + +### debug-tool + +Configurable tool for testing all result variations: + +| Parameter | Type | Default | Description | +| -------------------------- | ----------------------------------------------------------------------------------- | -------- | ------------------------------------------- | +| `contentType` | `"text"` \| `"image"` \| `"audio"` \| `"resource"` \| `"resourceLink"` \| `"mixed"` | `"text"` | Content block type to return | +| `multipleBlocks` | boolean | `false` | Return 3 content blocks | +| `includeStructuredContent` | boolean | `true` | Include structuredContent in result | +| `includeMeta` | boolean | `false` | Include \_meta in result | +| `largeInput` | string | - | Large text input (tests tool-input-partial) | +| `simulateError` | boolean | `false` | Return isError: true | +| `delayMs` | number | - | Delay before response (ms) | + +### debug-refresh + +App-only tool (hidden from model) for polling server state. Returns current timestamp and call counter. + +## App UI + +The debug app provides a dashboard with: + +- **Event Log**: Real-time log of all SDK events with filtering +- **Host Info**: Context, capabilities, container dimensions, styles +- **Callback Status**: Table of all callbacks with call counts +- **Actions**: Buttons to test every SDK method: + - Send messages (text/image) + - Logging (debug/info/warning/error) + - Model context updates + - Display mode requests + - Link opening + - Resize controls + - Server tool calls + - File operations + +## Usage + +```bash +# Build +npm run --workspace examples/debug-server build + +# Run standalone +npm run --workspace examples/debug-server serve + +# Run with all examples +npm start +``` + +Then open `http://localhost:8080/basic-host/` and select "Debug MCP App Server" from the dropdown. diff --git a/examples/debug-server/grid-cell.png b/examples/debug-server/grid-cell.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1814f766337f30486791a35566f2b61dc1a9d3 GIT binary patch literal 31325 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 McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3110", 10); + await startServer(createServer, { port, name: "Debug Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/debug-server/mcp-app.html b/examples/debug-server/mcp-app.html new file mode 100644 index 0000000..63c3444 --- /dev/null +++ b/examples/debug-server/mcp-app.html @@ -0,0 +1,210 @@ + + + + + + + Debug App + + +
+ +
+

+ Event Log +
+ + +
+

+
+
+ + +
+

+ Host Info + ▼ +

+
+
+
+

Context

+
+
+
+

Capabilities

+
+
+
+

Container

+
+
+
+

Styles Sample

+
+
+
+
+
+ + +
+

+ Callback Status + ▼ +

+
+ + + + + + + + + + +
CallbackRegisteredCountLast Payload
+
+
+ + +
+

+ Actions + ▼ +

+
+ +
+

Messages

+
+ + +
+
+ +
+
+ + +
+

Logging

+
+ +
+
+ + + + +
+
+ + +
+

Model Context

+
+ + +
+
+ + +
+
+ + +
+

Display Mode

+
+ + + +
+
+ + +
+

Links

+
+ + +
+
+ + +
+

Size

+
+ +
+
+ + + +
+
+ Current: measuring... +
+
+ + +
+

Server Tools

+
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+
+ +
+
+ +
+
+ +
+
+
+ + + diff --git a/examples/debug-server/package.json b/examples/debug-server/package.json new file mode 100644 index 0000000..226f7e3 --- /dev/null +++ b/examples/debug-server/package.json @@ -0,0 +1,42 @@ +{ + "name": "@modelcontextprotocol/server-debug", + "version": "0.4.1", + "type": "module", + "description": "Debug MCP App Server for testing all SDK capabilities", + "repository": { + "type": "git", + "url": "https://github.com/modelcontextprotocol/ext-apps", + "directory": "examples/debug-server" + }, + "license": "MIT", + "main": "server.ts", + "files": [ + "server.ts", + "dist" + ], + "scripts": { + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", + "watch": "cross-env INPUT=mcp-app.html vite build --watch", + "serve": "bun --watch main.ts", + "start": "cross-env NODE_ENV=development npm run build && npm run serve", + "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", + "prepublishOnly": "npm run build" + }, + "dependencies": { + "@modelcontextprotocol/ext-apps": "^0.4.1", + "@modelcontextprotocol/sdk": "^1.24.0", + "zod": "^4.1.13" + }, + "devDependencies": { + "@types/cors": "^2.8.19", + "@types/express": "^5.0.0", + "@types/node": "^22.0.0", + "concurrently": "^9.2.1", + "cors": "^2.8.5", + "cross-env": "^10.1.0", + "express": "^5.1.0", + "typescript": "^5.9.3", + "vite": "^6.0.0", + "vite-plugin-singlefile": "^2.3.0" + } +} diff --git a/examples/debug-server/screenshot.png b/examples/debug-server/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..869fec089675dd57b253c5a9938d266f53b7cae8 GIT binary patch literal 107493 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 z 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

q4F%&xwFveoi+Ppa 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 literal 0 HcmV?d00001 diff --git a/examples/debug-server/server.ts b/examples/debug-server/server.ts new file mode 100644 index 0000000..fd3452a --- /dev/null +++ b/examples/debug-server/server.ts @@ -0,0 +1,294 @@ +import { + registerAppResource, + registerAppTool, + RESOURCE_MIME_TYPE, +} from "@modelcontextprotocol/ext-apps/server"; +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import type { + CallToolResult, + ReadResourceResult, +} from "@modelcontextprotocol/sdk/types.js"; +import fs from "node:fs/promises"; +import { appendFileSync } from "node:fs"; +import path from "node:path"; +import { z } from "zod"; + +// Works both from source (server.ts) and compiled (dist/server.js) +const DIST_DIR = import.meta.filename.endsWith(".ts") + ? path.join(import.meta.dirname, "dist") + : import.meta.dirname; + +// Track call counter across requests (stateful for demo purposes) +let callCounter = 0; + +// Parse --log-file argument or use default +const DEFAULT_LOG_FILE = "/tmp/mcp-apps-debug-server.log"; +function getLogFilePath(): string { + const logFileArg = process.argv.find((arg) => arg.startsWith("--log-file=")); + if (logFileArg) { + return logFileArg.split("=")[1]; + } + return process.env.DEBUG_LOG_FILE ?? DEFAULT_LOG_FILE; +} + +const logFilePath = getLogFilePath(); + +/** + * Append a log entry to the log file + */ +function appendToLogFile(entry: { + timestamp: string; + type: string; + payload: unknown; +}): void { + try { + const line = JSON.stringify(entry) + "\n"; + appendFileSync(logFilePath, line, "utf-8"); + } catch (e) { + console.error("[debug-server] Failed to write to log file:", e); + } +} + +// Minimal 1x1 blue PNG (base64) +const BLUE_PNG_1X1 = + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg=="; + +// Minimal silent WAV (base64) - 44 byte header + 1 sample +const SILENT_WAV = + "UklGRiYAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQIAAAAAAA=="; + +/** + * Input schema for the debug-tool + */ +const DebugInputSchema = z.object({ + // Content configuration + contentType: z + .enum(["text", "image", "audio", "resource", "resourceLink", "mixed"]) + .default("text"), + multipleBlocks: z.boolean().default(true), + includeStructuredContent: z.boolean().default(true), + includeMeta: z.boolean().default(true), + + // Streaming test (large input) + largeInput: z.string().optional(), + + // Error/delay simulation + simulateError: z.boolean().default(false), + delayMs: z.number().optional(), +}); + +type DebugInput = z.infer; + +/** + * Output schema for structured content + */ +const DebugOutputSchema = z.object({ + config: z.record(z.string(), z.unknown()), + timestamp: z.string(), + counter: z.number(), + largeInputLength: z.number().optional(), +}); + +/** + * Builds content blocks based on configuration + */ +function buildContent(args: DebugInput): CallToolResult["content"] { + const count = args.multipleBlocks ? 3 : 1; + const content: CallToolResult["content"] = []; + + for (let i = 0; i < count; i++) { + const suffix = args.multipleBlocks ? ` #${i + 1}` : ""; + + switch (args.contentType) { + case "text": + content.push({ type: "text", text: `Debug text content${suffix}` }); + break; + case "image": + content.push({ + type: "image", + data: BLUE_PNG_1X1, + mimeType: "image/png", + }); + break; + case "audio": + content.push({ + type: "audio", + data: SILENT_WAV, + mimeType: "audio/wav", + }); + break; + case "resource": + content.push({ + type: "resource", + resource: { + uri: `debug://embedded-resource${suffix.replace(/\s/g, "-")}`, + text: `Embedded resource content${suffix}`, + mimeType: "text/plain", + }, + }); + break; + case "resourceLink": + content.push({ + type: "resource_link", + uri: `debug://linked-resource${suffix.replace(/\s/g, "-")}`, + name: `Linked Resource${suffix}`, + mimeType: "text/plain", + }); + break; + case "mixed": + // Return one of each type (ignore multipleBlocks for mixed) + return [ + { type: "text", text: "Mixed content: text block" }, + { type: "image", data: BLUE_PNG_1X1, mimeType: "image/png" }, + { type: "audio", data: SILENT_WAV, mimeType: "audio/wav" }, + ]; + } + } + + return content; +} + +/** + * Creates a new MCP server instance with debug tools registered. + */ +export function createServer(): McpServer { + const server = new McpServer({ + name: "Debug MCP App Server", + version: "1.0.0", + }); + + const resourceUri = "ui://debug-tool/mcp-app.html"; + + // Main debug tool - exercises all result variations + registerAppTool( + server, + "debug-tool", + { + title: "Debug Tool", + description: + "Comprehensive debug tool for testing MCP Apps SDK. Configure content types, error simulation, delays, and more.", + inputSchema: DebugInputSchema, + outputSchema: DebugOutputSchema, + _meta: { ui: { resourceUri } }, + }, + async (args): Promise => { + // Apply delay if requested + if (args.delayMs && args.delayMs > 0) { + await new Promise((resolve) => setTimeout(resolve, args.delayMs)); + } + + // Build content based on config + const content = buildContent(args); + + // Build result + const result: CallToolResult = { content }; + + // Add structured content if requested + if (args.includeStructuredContent) { + result.structuredContent = { + config: args, + timestamp: new Date().toISOString(), + counter: ++callCounter, + ...(args.largeInput + ? { largeInputLength: args.largeInput.length } + : {}), + }; + } + + // Add _meta if requested + if (args.includeMeta) { + result._meta = { + debugInfo: { + processedAt: Date.now(), + serverVersion: "1.0.0", + }, + }; + } + + // Set error flag if requested + if (args.simulateError) { + result.isError = true; + } + + return result; + }, + ); + + // App-only refresh tool (hidden from model) + registerAppTool( + server, + "debug-refresh", + { + title: "Refresh Debug Info", + description: + "App-only tool for polling server state. Not visible to the model.", + inputSchema: z.object({}), + outputSchema: z.object({ timestamp: z.string(), counter: z.number() }), + _meta: { + ui: { + resourceUri, + visibility: ["app"], + }, + }, + }, + async (): Promise => { + const timestamp = new Date().toISOString(); + return { + content: [{ type: "text", text: `Server timestamp: ${timestamp}` }], + structuredContent: { timestamp, counter: callCounter }, + }; + }, + ); + + // App-only log tool - writes events to log file + registerAppTool( + server, + "debug-log", + { + title: "Log to File", + description: + "App-only tool for logging events to the server log file. Not visible to the model.", + inputSchema: z.object({ + type: z.string(), + payload: z.unknown(), + }), + outputSchema: z.object({ logged: z.boolean(), logFile: z.string() }), + _meta: { + ui: { + resourceUri, + visibility: ["app"], + }, + }, + }, + async (args): Promise => { + const timestamp = new Date().toISOString(); + appendToLogFile({ timestamp, type: args.type, payload: args.payload }); + return { + content: [{ type: "text", text: `Logged to ${logFilePath}` }], + structuredContent: { logged: true, logFile: logFilePath }, + }; + }, + ); + + // Register the resource which returns the bundled HTML/JavaScript for the UI + registerAppResource( + server, + resourceUri, + resourceUri, + { mimeType: RESOURCE_MIME_TYPE }, + async (): Promise => { + const html = await fs.readFile( + path.join(DIST_DIR, "mcp-app.html"), + "utf-8", + ); + + return { + contents: [ + { uri: resourceUri, mimeType: RESOURCE_MIME_TYPE, text: html }, + ], + }; + }, + ); + + return server; +} diff --git a/examples/debug-server/src/global.css b/examples/debug-server/src/global.css new file mode 100644 index 0000000..1886326 --- /dev/null +++ b/examples/debug-server/src/global.css @@ -0,0 +1,33 @@ +* { + box-sizing: border-box; +} + +html, body { + font-family: system-ui, -apple-system, sans-serif; + font-size: 14px; + margin: 0; + padding: 0; +} + +code { + font-family: ui-monospace, "SF Mono", Monaco, "Cascadia Code", Consolas, monospace; + font-size: 0.9em; + background: rgba(0, 0, 0, 0.05); + padding: 0.1em 0.3em; + border-radius: 3px; +} + +@media (prefers-color-scheme: dark) { + code { + background: rgba(255, 255, 255, 0.1); + } +} + +button { + cursor: pointer; +} + +input, select, button { + font-family: inherit; + font-size: inherit; +} diff --git a/examples/debug-server/src/mcp-app.css b/examples/debug-server/src/mcp-app.css new file mode 100644 index 0000000..79a74ed --- /dev/null +++ b/examples/debug-server/src/mcp-app.css @@ -0,0 +1,367 @@ +.main { + --color-primary: #2563eb; + --color-primary-hover: #1d4ed8; + --color-success: #16a34a; + --color-warning: #ca8a04; + --color-error: #dc2626; + --color-border: #e5e7eb; + --color-bg-subtle: #f9fafb; + + width: 100%; + max-width: 800px; + padding: 1rem; + margin: 0 auto; +} + +@media (prefers-color-scheme: dark) { + .main { + --color-border: #374151; + --color-bg-subtle: #1f2937; + } +} + +/* Section styling */ +.section { + border: 1px solid var(--color-border); + border-radius: 8px; + margin-bottom: 1rem; + overflow: hidden; +} + +.section-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.75rem 1rem; + margin: 0; + font-size: 1rem; + font-weight: 600; + background: var(--color-bg-subtle); + border-bottom: 1px solid var(--color-border); +} + +.collapsible .section-header { + cursor: pointer; + user-select: none; +} + +.collapsible .section-header:hover { + background: var(--color-border); +} + +.toggle-icon { + transition: transform 0.2s; +} + +.collapsed .toggle-icon { + transform: rotate(-90deg); +} + +.collapsed .section-content { + display: none; +} + +.section-content { + padding: 1rem; +} + +.header-actions { + display: flex; + gap: 0.5rem; + align-items: center; +} + +/* Event log */ +.event-log { + max-height: 200px; + overflow-y: auto; + padding: 0.5rem; + font-family: ui-monospace, monospace; + font-size: 0.85rem; + background: var(--color-bg-subtle); +} + +.log-entry { + padding: 0.25rem 0; + border-bottom: 1px solid var(--color-border); + cursor: pointer; +} + +.log-entry:hover { + background: var(--color-bg-hover, rgba(0, 0, 0, 0.03)); +} + +.log-entry:last-child { + border-bottom: none; +} + +.log-entry-header { + display: flex; + align-items: center; + gap: 0.25rem; +} + +.log-toggle { + color: #9ca3af; + font-size: 0.7rem; + width: 1rem; + transition: transform 0.15s ease; + user-select: none; +} + +.log-entry.expanded .log-toggle { + transform: rotate(90deg); +} + +.log-time { + color: #6b7280; + margin-right: 0.5rem; +} + +.log-type { + font-weight: 600; + margin-right: 0.5rem; +} + +.log-type.ontoolinput { color: var(--color-primary); } +.log-type.ontoolinputpartial { color: #8b5cf6; } +.log-type.ontoolresult { color: var(--color-success); } +.log-type.ontoolcancelled { color: var(--color-warning); } +.log-type.onhostcontextchanged { color: #7c3aed; } +.log-type.onteardown { color: #f97316; } +.log-type.oncalltool { color: #ec4899; } +.log-type.onlisttools { color: #14b8a6; } +.log-type.onerror { color: var(--color-error); } +.log-type.connected { color: var(--color-success); } +.log-type.update-context { color: #0891b2; } + +.log-payload-preview { + color: #6b7280; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + flex: 1; + min-width: 0; +} + +.log-payload-full { + display: none; + margin: 0.5rem 0 0.25rem 1.25rem; + padding: 0.5rem; + background: var(--color-bg-subtle, #f3f4f6); + border-radius: 4px; + font-size: 0.8rem; + overflow-x: auto; + white-space: pre-wrap; + word-break: break-all; + max-height: 300px; + overflow-y: auto; +} + +.log-entry.expanded .log-payload-full { + display: block; +} + +/* Info grid */ +.info-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1rem; +} + +.info-group h3 { + margin: 0 0 0.5rem 0; + font-size: 0.9rem; + color: #6b7280; +} + +.info-group dl { + margin: 0; + font-size: 0.85rem; +} + +.info-group dt { + font-weight: 600; + color: #374151; +} + +.info-group dd { + margin: 0 0 0.5rem 0; + color: #6b7280; +} + +@media (prefers-color-scheme: dark) { + .info-group dt { color: #d1d5db; } + .info-group dd { color: #9ca3af; } +} + +.styles-sample { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; +} + +.style-swatch { + width: 24px; + height: 24px; + border-radius: 4px; + border: 1px solid var(--color-border); + display: flex; + align-items: center; + justify-content: center; + font-size: 10px; + color: white; + text-shadow: 0 0 2px black; +} + +/* Callback table */ +.callback-table { + width: 100%; + border-collapse: collapse; + font-size: 0.85rem; +} + +.callback-table th, +.callback-table td { + padding: 0.5rem; + text-align: left; + border-bottom: 1px solid var(--color-border); +} + +.callback-table th { + background: var(--color-bg-subtle); + font-weight: 600; +} + +.callback-table .registered-yes { + color: var(--color-success); +} + +.callback-table .registered-no { + color: #9ca3af; +} + +.callback-table .payload-preview { + max-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; + font-family: ui-monospace, monospace; + font-size: 0.8rem; +} + +.callback-table .payload-preview:hover { + white-space: normal; + word-break: break-all; +} + +/* Action groups */ +.action-group { + margin-bottom: 1.5rem; +} + +.action-group:last-child { + margin-bottom: 0; +} + +.action-group h3 { + margin: 0 0 0.75rem 0; + font-size: 0.9rem; + font-weight: 600; + color: #374151; + border-bottom: 1px solid var(--color-border); + padding-bottom: 0.25rem; +} + +@media (prefers-color-scheme: dark) { + .action-group h3 { color: #d1d5db; } +} + +.action-row { + display: flex; + gap: 0.5rem; + align-items: center; + margin-bottom: 0.5rem; +} + +.action-row:last-child { + margin-bottom: 0; +} + +.action-row input[type="text"], +.action-row input[type="url"], +.action-row input[type="number"] { + flex: 1; + padding: 0.5rem; + border: 1px solid var(--color-border); + border-radius: 4px; + background: transparent; +} + +.action-row input[type="file"] { + flex: 1; +} + +.action-row button { + padding: 0.5rem 1rem; + border: none; + border-radius: 4px; + background: var(--color-primary); + color: white; + font-weight: 500; +} + +.action-row button:hover { + background: var(--color-primary-hover); +} + +.btn-row { + flex-wrap: wrap; +} + +.btn-small { + padding: 0.375rem 0.75rem !important; + font-size: 0.85rem; +} + +/* Tool config */ +.tool-config { + background: var(--color-bg-subtle); + padding: 0.75rem; + border-radius: 4px; + margin-bottom: 0.75rem; +} + +.config-row { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.5rem; +} + +.config-row:last-child { + margin-bottom: 0; +} + +.config-row label { + min-width: 120px; + font-size: 0.85rem; +} + +.config-row select, +.config-row input[type="number"] { + padding: 0.25rem 0.5rem; + border: 1px solid var(--color-border); + border-radius: 4px; + background: transparent; +} + +/* Filter select */ +#log-filter { + padding: 0.25rem 0.5rem; + border: 1px solid var(--color-border); + border-radius: 4px; + background: transparent; + font-size: 0.85rem; +} diff --git a/examples/debug-server/src/mcp-app.ts b/examples/debug-server/src/mcp-app.ts new file mode 100644 index 0000000..b1c862d --- /dev/null +++ b/examples/debug-server/src/mcp-app.ts @@ -0,0 +1,642 @@ +/** + * @file Debug App - Comprehensive testing/debugging tool for the MCP Apps SDK. + * + * This app exercises every capability, callback, and result format combination. + */ +import { App, type McpUiHostContext } from "@modelcontextprotocol/ext-apps"; +import "./global.css"; +import "./mcp-app.css"; + +// ============================================================================ +// Types +// ============================================================================ + +interface LogEntry { + time: number; + type: string; + payload: unknown; +} + +interface AppState { + eventLog: LogEntry[]; + callbackCounts: Map; + lastPayloads: Map; + autoResizeCleanup: (() => void) | null; + logFilter: string; +} + +// ============================================================================ +// State +// ============================================================================ + +const state: AppState = { + eventLog: [], + callbackCounts: new Map(), + lastPayloads: new Map(), + autoResizeCleanup: null, + logFilter: "all", +}; + +// Callbacks we track +const CALLBACKS = [ + "ontoolinput", + "ontoolinputpartial", + "ontoolresult", + "ontoolcancelled", + "onhostcontextchanged", + "onteardown", + "oncalltool", + "onlisttools", + "onerror", +] as const; + +// ============================================================================ +// DOM Elements +// ============================================================================ + +const mainEl = document.querySelector(".main") as HTMLElement; +const eventLogEl = document.getElementById("event-log")!; +const logFilterEl = document.getElementById("log-filter") as HTMLSelectElement; +const clearLogBtn = document.getElementById("clear-log-btn")!; + +// Host info +const hostContextInfoEl = document.getElementById("host-context-info")!; +const hostCapabilitiesInfoEl = document.getElementById( + "host-capabilities-info", +)!; +const hostContainerInfoEl = document.getElementById("host-container-info")!; +const hostStylesSampleEl = document.getElementById("host-styles-sample")!; + +// Callback status +const callbackTableBodyEl = document.getElementById("callback-table-body")!; + +// Action elements +const messageTextEl = document.getElementById( + "message-text", +) as HTMLInputElement; +const sendMessageTextBtn = document.getElementById("send-message-text-btn")!; +const sendMessageImageBtn = document.getElementById("send-message-image-btn")!; + +const logDataEl = document.getElementById("log-data") as HTMLInputElement; +const logDebugBtn = document.getElementById("log-debug-btn")!; +const logInfoBtn = document.getElementById("log-info-btn")!; +const logWarningBtn = document.getElementById("log-warning-btn")!; +const logErrorBtn = document.getElementById("log-error-btn")!; + +const contextTextEl = document.getElementById( + "context-text", +) as HTMLInputElement; +const updateContextTextBtn = document.getElementById( + "update-context-text-btn", +)!; +const updateContextStructuredBtn = document.getElementById( + "update-context-structured-btn", +)!; +const updateContextImageBtn = document.getElementById( + "update-context-image-btn", +)!; + +const displayInlineBtn = document.getElementById("display-inline-btn")!; +const displayFullscreenBtn = document.getElementById("display-fullscreen-btn")!; +const displayPipBtn = document.getElementById("display-pip-btn")!; + +const linkUrlEl = document.getElementById("link-url") as HTMLInputElement; +const openLinkBtn = document.getElementById("open-link-btn")!; + +const autoResizeToggleEl = document.getElementById( + "auto-resize-toggle", +) as HTMLInputElement; +const resize200x100Btn = document.getElementById("resize-200x100-btn")!; +const resize400x300Btn = document.getElementById("resize-400x300-btn")!; +const resize800x600Btn = document.getElementById("resize-800x600-btn")!; +const currentSizeEl = document.getElementById("current-size")!; + +// Tool config elements +const toolContentTypeEl = document.getElementById( + "tool-content-type", +) as HTMLSelectElement; +const toolMultipleBlocksEl = document.getElementById( + "tool-multiple-blocks", +) as HTMLInputElement; +const toolStructuredContentEl = document.getElementById( + "tool-structured-content", +) as HTMLInputElement; +const toolIncludeMetaEl = document.getElementById( + "tool-include-meta", +) as HTMLInputElement; +const toolSimulateErrorEl = document.getElementById( + "tool-simulate-error", +) as HTMLInputElement; +const toolDelayMsEl = document.getElementById( + "tool-delay-ms", +) as HTMLInputElement; +const callDebugToolBtn = document.getElementById("call-debug-tool-btn")!; +const callDebugRefreshBtn = document.getElementById("call-debug-refresh-btn")!; + +// ============================================================================ +// Utility Functions +// ============================================================================ + +function formatTime(timestamp: number): string { + const date = new Date(timestamp); + const h = date.getHours().toString().padStart(2, "0"); + const m = date.getMinutes().toString().padStart(2, "0"); + const s = date.getSeconds().toString().padStart(2, "0"); + const ms = date.getMilliseconds().toString().padStart(3, "0"); + return `${h}:${m}:${s}.${ms}`; +} + +function truncatePayload(payload: unknown): string { + const str = JSON.stringify(payload); + if (str.length > 100) { + return str.slice(0, 100) + "..."; + } + return str; +} + +// ============================================================================ +// Rendering Functions +// ============================================================================ + +function renderEventLog(): void { + const filtered = + state.logFilter === "all" + ? state.eventLog + : state.eventLog.filter((e) => e.type === state.logFilter); + + const fullPayload = (payload: unknown) => + JSON.stringify(payload, null, 2) + .replace(//g, ">"); + + eventLogEl.innerHTML = filtered + .map( + (entry, index) => ` +

+
+ ▶ + [${formatTime(entry.time)}] + ${entry.type}: + ${truncatePayload(entry.payload)} +
+
${fullPayload(entry.payload)}
+
+ `, + ) + .join(""); + + // Add click handlers for toggling + eventLogEl.querySelectorAll(".log-entry").forEach((el) => { + el.addEventListener("click", () => { + el.classList.toggle("expanded"); + }); + }); + + // Auto-scroll to bottom + eventLogEl.scrollTop = eventLogEl.scrollHeight; +} + +function renderCallbackStatus(): void { + callbackTableBodyEl.innerHTML = CALLBACKS.map((name) => { + const count = state.callbackCounts.get(name) ?? 0; + const lastPayload = state.lastPayloads.get(name); + const registered = name !== "onerror"; // All callbacks are registered + + return ` + + ${name} + ${registered ? "✓" : "✗"} + ${count} + ${lastPayload ? truncatePayload(lastPayload) : "-"} + + `; + }).join(""); +} + +function renderHostInfo(): void { + const ctx = app.getHostContext(); + const caps = app.getHostCapabilities(); + const version = app.getHostVersion(); + + // Context info + if (ctx) { + hostContextInfoEl.innerHTML = ` +
Theme
${ctx.theme ?? "unknown"}
+
Locale
${ctx.locale ?? "unknown"}
+
TimeZone
${ctx.timeZone ?? "unknown"}
+
Platform
${ctx.platform ?? "unknown"}
+
Display Mode
${ctx.displayMode ?? "unknown"}
+
Host
${version?.name ?? "unknown"} v${version?.version ?? "?"}
+ `; + } else { + hostContextInfoEl.innerHTML = "
No context available
"; + } + + // Capabilities + if (caps) { + hostCapabilitiesInfoEl.innerHTML = ` +
openLinks
${caps.openLinks ? "✓" : "✗"}
+
serverTools
${caps.serverTools ? "✓" : "✗"}
+
serverResources
${caps.serverResources ? "✓" : "✗"}
+
logging
${caps.logging ? "✓" : "✗"}
+
message
${caps.message ? "✓" : "✗"}
+
updateModelContext
${caps.updateModelContext ? "✓" : "✗"}
+ `; + } else { + hostCapabilitiesInfoEl.innerHTML = "
No capabilities available
"; + } + + // Container info + if (ctx?.containerDimensions) { + const dims = ctx.containerDimensions; + hostContainerInfoEl.innerHTML = ` +
Width
${"width" in dims ? dims.width + "px" : `max ${dims.maxWidth ?? "?"}px`}
+
Height
${"height" in dims ? dims.height + "px" : `max ${dims.maxHeight ?? "?"}px`}
+
Safe Area
${ctx.safeAreaInsets ? `T${ctx.safeAreaInsets.top} R${ctx.safeAreaInsets.right} B${ctx.safeAreaInsets.bottom} L${ctx.safeAreaInsets.left}` : "none"}
+ `; + } else { + hostContainerInfoEl.innerHTML = "
No container info
"; + } + + // Styles sample + if (ctx?.styles) { + const styleVars = Object.entries(ctx.styles).slice(0, 6); + hostStylesSampleEl.innerHTML = styleVars + .map(([key, value]) => { + const color = String(value); + return `
`; + }) + .join(""); + } else { + hostStylesSampleEl.innerHTML = "No styles"; + } +} + +function updateCurrentSize(): void { + const w = document.documentElement.scrollWidth; + const h = document.documentElement.scrollHeight; + currentSizeEl.textContent = `${w}x${h}`; +} + +// ============================================================================ +// Event Logging +// ============================================================================ + +/** + * Send a log entry to the server's debug-log tool (writes to file) + */ +async function sendToServerLog(type: string, payload: unknown): Promise { + try { + await app.callServerTool({ + name: "debug-log", + arguments: { type, payload }, + }); + } catch (e) { + // Log to console only - don't call logEvent to avoid infinite loop + console.error("[debug-app] Failed to send log to server:", e); + } +} + +function logEvent(type: string, payload: unknown): void { + const time = Date.now(); + + // Log to console + console.log(`[debug-app] ${type}:`, payload); + + // Update state + const count = (state.callbackCounts.get(type) ?? 0) + 1; + state.callbackCounts.set(type, count); + state.lastPayloads.set(type, payload); + state.eventLog.push({ time, type, payload }); + + // Keep log manageable (max 100 entries) + if (state.eventLog.length > 100) { + state.eventLog.shift(); + } + + renderEventLog(); + renderCallbackStatus(); + + // Send to server log file (async, fire-and-forget) + // Skip sending debug-log results to avoid noise + if ( + type !== "server-tool-result" || + (payload as { name?: string })?.name !== "debug-log" + ) { + sendToServerLog(type, payload); + } +} + +// ============================================================================ +// Safe Area Handling +// ============================================================================ + +function handleHostContextChanged(ctx: McpUiHostContext): void { + if (ctx.safeAreaInsets) { + mainEl.style.paddingTop = `${ctx.safeAreaInsets.top}px`; + mainEl.style.paddingRight = `${ctx.safeAreaInsets.right}px`; + mainEl.style.paddingBottom = `${ctx.safeAreaInsets.bottom}px`; + mainEl.style.paddingLeft = `${ctx.safeAreaInsets.left}px`; + } + renderHostInfo(); +} + +// ============================================================================ +// App Instance & Callbacks +// ============================================================================ + +const app = new App( + { name: "Debug App", version: "1.0.0" }, + { tools: { listChanged: true } }, // Declare tools capability for oncalltool/onlisttools + { autoResize: false }, // We'll manage auto-resize ourselves for toggle demo +); + +// Register ALL callbacks BEFORE connecting +app.ontoolinput = (params) => { + logEvent("ontoolinput", params); +}; + +app.ontoolinputpartial = (params) => { + logEvent("ontoolinputpartial", params); +}; + +app.ontoolresult = (result) => { + logEvent("ontoolresult", result); +}; + +app.ontoolcancelled = (params) => { + logEvent("ontoolcancelled", params); +}; + +app.onhostcontextchanged = (ctx) => { + logEvent("onhostcontextchanged", ctx); + handleHostContextChanged(ctx); +}; + +app.onteardown = async (params) => { + logEvent("onteardown", params); + return {}; +}; + +app.oncalltool = async (params) => { + logEvent("oncalltool", params); + return { + content: [{ type: "text", text: "App handled tool call" }], + }; +}; + +app.onlisttools = async (params) => { + logEvent("onlisttools", params); + return { tools: [] }; +}; + +app.onerror = (error) => { + logEvent("onerror", error); +}; + +// ============================================================================ +// Section Collapsing +// ============================================================================ + +document.querySelectorAll(".section-header[data-toggle]").forEach((header) => { + header.addEventListener("click", () => { + const section = header.closest(".section"); + section?.classList.toggle("collapsed"); + }); +}); + +// ============================================================================ +// Event Log Controls +// ============================================================================ + +logFilterEl.addEventListener("change", () => { + state.logFilter = logFilterEl.value; + renderEventLog(); +}); + +clearLogBtn.addEventListener("click", () => { + state.eventLog = []; + renderEventLog(); +}); + +// ============================================================================ +// Message Actions +// ============================================================================ + +sendMessageTextBtn.addEventListener("click", async () => { + try { + const result = await app.sendMessage({ + role: "user", + content: [{ type: "text", text: messageTextEl.value }], + }); + logEvent("send-message-result", result); + } catch (e) { + logEvent("error", e); + } +}); + +sendMessageImageBtn.addEventListener("click", async () => { + // 1x1 red PNG for testing + const redPng = + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=="; + try { + const result = await app.sendMessage({ + role: "user", + content: [{ type: "image", data: redPng, mimeType: "image/png" }], + }); + logEvent("send-message-result", result); + } catch (e) { + logEvent("error", e); + } +}); + +// ============================================================================ +// Logging Actions +// ============================================================================ + +function sendLog(level: "debug" | "info" | "warning" | "error"): void { + app.sendLog({ level, data: logDataEl.value }); + logEvent("send-log", { level, data: logDataEl.value }); +} + +logDebugBtn.addEventListener("click", () => sendLog("debug")); +logInfoBtn.addEventListener("click", () => sendLog("info")); +logWarningBtn.addEventListener("click", () => sendLog("warning")); +logErrorBtn.addEventListener("click", () => sendLog("error")); + +// ============================================================================ +// Model Context Actions +// ============================================================================ + +updateContextTextBtn.addEventListener("click", async () => { + try { + await app.updateModelContext({ + content: [{ type: "text", text: contextTextEl.value }], + }); + logEvent("update-context", { type: "text", value: contextTextEl.value }); + } catch (e) { + logEvent("error", e); + } +}); + +updateContextStructuredBtn.addEventListener("click", async () => { + try { + await app.updateModelContext({ + structuredContent: { + debugState: { + eventCount: state.eventLog.length, + timestamp: new Date().toISOString(), + }, + }, + }); + logEvent("update-context", { type: "structured" }); + } catch (e) { + logEvent("error", e); + } +}); + +updateContextImageBtn.addEventListener("click", async () => { + // 1x1 red PNG for testing + const redPng = + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=="; + try { + await app.updateModelContext({ + content: [{ type: "image", data: redPng, mimeType: "image/png" }], + }); + logEvent("update-context", { type: "image" }); + } catch (e) { + logEvent("error", e); + } +}); + +// ============================================================================ +// Display Mode Actions +// ============================================================================ + +async function requestDisplayMode( + mode: "inline" | "fullscreen" | "pip", +): Promise { + try { + const result = await app.requestDisplayMode({ mode }); + logEvent("display-mode-result", { mode, result }); + } catch (e) { + logEvent("error", e); + } +} + +displayInlineBtn.addEventListener("click", () => requestDisplayMode("inline")); +displayFullscreenBtn.addEventListener("click", () => + requestDisplayMode("fullscreen"), +); +displayPipBtn.addEventListener("click", () => requestDisplayMode("pip")); + +// ============================================================================ +// Link Action +// ============================================================================ + +openLinkBtn.addEventListener("click", async () => { + try { + const result = await app.openLink({ url: linkUrlEl.value }); + logEvent("open-link-result", result); + } catch (e) { + logEvent("error", e); + } +}); + +// ============================================================================ +// Size Controls +// ============================================================================ + +autoResizeToggleEl.addEventListener("change", () => { + if (autoResizeToggleEl.checked) { + if (!state.autoResizeCleanup) { + state.autoResizeCleanup = app.setupSizeChangedNotifications(); + } + } else { + if (state.autoResizeCleanup) { + state.autoResizeCleanup(); + state.autoResizeCleanup = null; + } + } + logEvent("auto-resize-toggle", { enabled: autoResizeToggleEl.checked }); +}); + +function manualResize(width: number, height: number): void { + app.sendSizeChanged({ width, height }); + logEvent("manual-resize", { width, height }); +} + +resize200x100Btn.addEventListener("click", () => manualResize(200, 100)); +resize400x300Btn.addEventListener("click", () => manualResize(400, 300)); +resize800x600Btn.addEventListener("click", () => manualResize(800, 600)); + +// Update current size periodically +setInterval(updateCurrentSize, 1000); + +// ============================================================================ +// Server Tool Actions +// ============================================================================ + +callDebugToolBtn.addEventListener("click", async () => { + const args = { + contentType: toolContentTypeEl.value, + multipleBlocks: toolMultipleBlocksEl.checked, + includeStructuredContent: toolStructuredContentEl.checked, + includeMeta: toolIncludeMetaEl.checked, + simulateError: toolSimulateErrorEl.checked, + delayMs: parseInt(toolDelayMsEl.value, 10) || undefined, + }; + + try { + logEvent("call-server-tool", { name: "debug-tool", arguments: args }); + const result = await app.callServerTool({ + name: "debug-tool", + arguments: args, + }); + logEvent("server-tool-result", result); + } catch (e) { + logEvent("error", e); + } +}); + +callDebugRefreshBtn.addEventListener("click", async () => { + try { + logEvent("call-server-tool", { name: "debug-refresh", arguments: {} }); + const result = await app.callServerTool({ + name: "debug-refresh", + arguments: {}, + }); + logEvent("server-tool-result", result); + } catch (e) { + logEvent("error", e); + } +}); + +// ============================================================================ +// Initialization +// ============================================================================ + +// Initial render +renderCallbackStatus(); + +// Connect to host +app + .connect() + .then(() => { + logEvent("connected", { success: true }); + + const ctx = app.getHostContext(); + if (ctx) { + handleHostContextChanged(ctx); + } + + renderHostInfo(); + updateCurrentSize(); + + // Auto-resize is enabled by default in App, capture cleanup if we want to toggle + // We'll set it up ourselves since we want toggle control + state.autoResizeCleanup = app.setupSizeChangedNotifications(); + }) + .catch((e) => { + logEvent("error", e); + }); diff --git a/examples/debug-server/tsconfig.json b/examples/debug-server/tsconfig.json new file mode 100644 index 0000000..535267b --- /dev/null +++ b/examples/debug-server/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "strict": true, + "skipLibCheck": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src", "server.ts"] +} diff --git a/examples/debug-server/tsconfig.server.json b/examples/debug-server/tsconfig.server.json new file mode 100644 index 0000000..05ddd8e --- /dev/null +++ b/examples/debug-server/tsconfig.server.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "emitDeclarationOnly": true, + "outDir": "./dist", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts"] +} diff --git a/examples/debug-server/vite.config.ts b/examples/debug-server/vite.config.ts new file mode 100644 index 0000000..6ff6d99 --- /dev/null +++ b/examples/debug-server/vite.config.ts @@ -0,0 +1,24 @@ +import { defineConfig } from "vite"; +import { viteSingleFile } from "vite-plugin-singlefile"; + +const INPUT = process.env.INPUT; +if (!INPUT) { + throw new Error("INPUT environment variable is not set"); +} + +const isDevelopment = process.env.NODE_ENV === "development"; + +export default defineConfig({ + plugins: [viteSingleFile()], + build: { + sourcemap: isDevelopment ? "inline" : undefined, + cssMinify: !isDevelopment, + minify: !isDevelopment, + + rollupOptions: { + input: INPUT, + }, + outDir: "dist", + emptyOutDir: false, + }, +}); diff --git a/examples/qr-server/package.json b/examples/qr-server/package.json index dd9eb1b..b83503b 100644 --- a/examples/qr-server/package.json +++ b/examples/qr-server/package.json @@ -6,5 +6,8 @@ "start": "uv run server.py", "dev": "uv run server.py", "build": "echo 'No build step needed for Python server'" + }, + "dependencies": { + "@modelcontextprotocol/ext-apps": "^0.4.1" } } diff --git a/examples/say-server/package.json b/examples/say-server/package.json index a752ef7..a5eb23c 100644 --- a/examples/say-server/package.json +++ b/examples/say-server/package.json @@ -13,5 +13,8 @@ "start": "uv run server.py", "dev": "uv run server.py", "build": "echo 'No build step needed for Python server'" + }, + "dependencies": { + "@modelcontextprotocol/ext-apps": "^0.4.1" } } diff --git a/package-lock.json b/package-lock.json index 74b952b..f1d7e20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -97,7 +97,7 @@ } }, "examples/basic-host/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -106,8 +106,6 @@ }, "examples/basic-host/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -139,7 +137,7 @@ } }, "examples/basic-server-preact/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -148,8 +146,6 @@ }, "examples/basic-server-preact/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -184,7 +180,7 @@ } }, "examples/basic-server-react/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -193,8 +189,6 @@ }, "examples/basic-server-react/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -226,7 +220,7 @@ } }, "examples/basic-server-solid/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -235,8 +229,6 @@ }, "examples/basic-server-solid/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -268,7 +260,7 @@ } }, "examples/basic-server-svelte/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -277,8 +269,6 @@ }, "examples/basic-server-svelte/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -308,7 +298,7 @@ } }, "examples/basic-server-vanillajs/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -317,8 +307,6 @@ }, "examples/basic-server-vanillajs/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -350,7 +338,7 @@ } }, "examples/basic-server-vue/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -359,8 +347,6 @@ }, "examples/basic-server-vue/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -391,7 +377,7 @@ } }, "examples/budget-allocator-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -400,8 +386,6 @@ }, "examples/budget-allocator-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -436,7 +420,7 @@ } }, "examples/cohort-heatmap-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -445,8 +429,6 @@ }, "examples/cohort-heatmap-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -477,7 +459,7 @@ } }, "examples/customer-segmentation-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -486,8 +468,41 @@ }, "examples/customer-segmentation-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "examples/debug-server": { + "name": "@modelcontextprotocol/server-debug", + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/ext-apps": "^0.4.0", + "@modelcontextprotocol/sdk": "^1.24.0", + "zod": "^4.1.13" + }, + "devDependencies": { + "@types/cors": "^2.8.19", + "@types/express": "^5.0.0", + "@types/node": "^22.0.0", + "concurrently": "^9.2.1", + "cors": "^2.8.5", + "cross-env": "^10.1.0", + "express": "^5.1.0", + "typescript": "^5.9.3", + "vite": "^6.0.0", + "vite-plugin-singlefile": "^2.3.0" + } + }, + "examples/debug-server/node_modules/@types/node": { + "version": "22.19.7", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "examples/debug-server/node_modules/undici-types": { + "version": "6.21.0", "dev": true, "license": "MIT" }, @@ -519,7 +534,7 @@ } }, "examples/integration-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -528,8 +543,6 @@ }, "examples/integration-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -559,7 +572,7 @@ } }, "examples/map-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -568,8 +581,6 @@ }, "examples/map-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -600,7 +611,7 @@ } }, "examples/pdf-server/node_modules/@types/node": { - "version": "22.19.6", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -609,8 +620,6 @@ }, "examples/pdf-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -655,7 +664,7 @@ } }, "examples/scenario-modeler-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -664,8 +673,6 @@ }, "examples/scenario-modeler-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -695,7 +702,7 @@ } }, "examples/shadertoy-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -704,8 +711,6 @@ }, "examples/shadertoy-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -736,7 +741,7 @@ } }, "examples/sheet-music-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -745,8 +750,6 @@ }, "examples/sheet-music-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -778,7 +781,7 @@ } }, "examples/system-monitor-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -787,8 +790,6 @@ }, "examples/system-monitor-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -825,7 +826,7 @@ } }, "examples/threejs-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -834,8 +835,6 @@ }, "examples/threejs-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -866,7 +865,7 @@ } }, "examples/transcript-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -875,15 +874,11 @@ }, "examples/transcript-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, "examples/transcript-server/node_modules/zod": { "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -915,7 +910,7 @@ } }, "examples/video-resource-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -924,8 +919,6 @@ }, "examples/video-resource-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -957,7 +950,7 @@ } }, "examples/wiki-explorer-server/node_modules/@types/node": { - "version": "22.19.5", + "version": "22.19.7", "dev": true, "license": "MIT", "dependencies": { @@ -966,8 +959,6 @@ }, "examples/wiki-explorer-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -2393,20 +2384,59 @@ "license": "MIT" }, "node_modules/@modelcontextprotocol/ext-apps": { - "resolved": "", - "link": true + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/ext-apps/-/ext-apps-0.4.1.tgz", + "integrity": "sha512-LUw6NidwWInzWVF8OSPw/Mtdz5ES2qF+yBze2h+WRARdSbXf+agTkZLCGFtdkogI64W6mDlJnSTp/k5W+FZ84A==", + "hasInstallScript": true, + "license": "MIT", + "workspaces": [ + "examples/*" + ], + "optionalDependencies": { + "@oven/bun-darwin-aarch64": "^1.2.21", + "@oven/bun-darwin-x64": "^1.2.21", + "@oven/bun-darwin-x64-baseline": "^1.2.21", + "@oven/bun-linux-aarch64": "^1.2.21", + "@oven/bun-linux-aarch64-musl": "^1.2.21", + "@oven/bun-linux-x64": "^1.2.21", + "@oven/bun-linux-x64-baseline": "^1.2.21", + "@oven/bun-linux-x64-musl": "^1.2.21", + "@oven/bun-linux-x64-musl-baseline": "^1.2.21", + "@oven/bun-windows-x64": "^1.2.21", + "@oven/bun-windows-x64-baseline": "^1.2.21", + "@rollup/rollup-darwin-arm64": "^4.53.3", + "@rollup/rollup-darwin-x64": "^4.53.3", + "@rollup/rollup-linux-arm64-gnu": "^4.53.3", + "@rollup/rollup-linux-x64-gnu": "^4.53.3", + "@rollup/rollup-win32-arm64-msvc": "^4.53.3", + "@rollup/rollup-win32-x64-msvc": "^4.53.3" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.24.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } }, "node_modules/@modelcontextprotocol/ext-apps-basic-host": { "resolved": "examples/basic-host", "link": true }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", + "version": "1.25.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.3.tgz", + "integrity": "sha512-vsAMBMERybvYgKbg/l4L1rhS7VXV1c0CtyJg72vwxONVX0l4ZfKVAnZEWTQixJGTzKnELjQ59e4NbdFDALRiAQ==", "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.7", + "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -2475,6 +2505,10 @@ "resolved": "examples/customer-segmentation-server", "link": true }, + "node_modules/@modelcontextprotocol/server-debug": { + "resolved": "examples/debug-server", + "link": true + }, "node_modules/@modelcontextprotocol/server-map": { "resolved": "examples/map-server", "link": true @@ -3073,9 +3107,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", - "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz", + "integrity": "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==", "cpu": [ "arm" ], @@ -3087,9 +3121,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", - "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz", + "integrity": "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==", "cpu": [ "arm64" ], @@ -3101,9 +3135,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", - "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz", + "integrity": "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==", "cpu": [ "arm64" ], @@ -3114,9 +3148,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", - "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz", + "integrity": "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==", "cpu": [ "x64" ], @@ -3127,9 +3161,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", - "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz", + "integrity": "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==", "cpu": [ "arm64" ], @@ -3141,9 +3175,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", - "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz", + "integrity": "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==", "cpu": [ "x64" ], @@ -3155,9 +3189,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", - "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz", + "integrity": "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==", "cpu": [ "arm" ], @@ -3169,9 +3203,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", - "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz", + "integrity": "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==", "cpu": [ "arm" ], @@ -3183,9 +3217,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", - "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz", + "integrity": "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==", "cpu": [ "arm64" ], @@ -3196,9 +3230,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", - "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz", + "integrity": "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==", "cpu": [ "arm64" ], @@ -3210,9 +3244,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", - "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz", + "integrity": "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==", "cpu": [ "loong64" ], @@ -3224,9 +3258,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", - "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz", + "integrity": "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==", "cpu": [ "loong64" ], @@ -3238,9 +3272,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", - "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz", + "integrity": "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==", "cpu": [ "ppc64" ], @@ -3252,9 +3286,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", - "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz", + "integrity": "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==", "cpu": [ "ppc64" ], @@ -3266,9 +3300,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", - "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz", + "integrity": "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==", "cpu": [ "riscv64" ], @@ -3280,9 +3314,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", - "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz", + "integrity": "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==", "cpu": [ "riscv64" ], @@ -3294,9 +3328,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", - "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz", + "integrity": "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==", "cpu": [ "s390x" ], @@ -3308,9 +3342,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz", + "integrity": "sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==", "cpu": [ "x64" ], @@ -3321,9 +3355,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", - "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz", + "integrity": "sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==", "cpu": [ "x64" ], @@ -3335,9 +3369,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", - "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz", + "integrity": "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==", "cpu": [ "x64" ], @@ -3349,9 +3383,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", - "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz", + "integrity": "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==", "cpu": [ "arm64" ], @@ -3363,9 +3397,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", - "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz", + "integrity": "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==", "cpu": [ "arm64" ], @@ -3376,9 +3410,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz", + "integrity": "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==", "cpu": [ "ia32" ], @@ -3390,9 +3424,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz", + "integrity": "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==", "cpu": [ "x64" ], @@ -3404,9 +3438,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz", + "integrity": "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==", "cpu": [ "x64" ], @@ -3682,9 +3716,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.8.tgz", - "integrity": "sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==", + "version": "25.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz", + "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==", "dev": true, "license": "MIT", "peer": true, @@ -3707,9 +3741,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", - "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", + "version": "19.2.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", + "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", "dev": true, "license": "MIT", "peer": true, @@ -3959,22 +3993,22 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.26.tgz", - "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.27.tgz", + "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==", "license": "MIT", "dependencies": { "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.26", + "@vue/shared": "3.5.27", "entities": "^7.0.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-core/node_modules/entities": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", - "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -3984,26 +4018,26 @@ } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", - "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz", + "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==", "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.26", - "@vue/shared": "3.5.26" + "@vue/compiler-core": "3.5.27", + "@vue/shared": "3.5.27" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz", - "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz", + "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==", "license": "MIT", "dependencies": { "@babel/parser": "^7.28.5", - "@vue/compiler-core": "3.5.26", - "@vue/compiler-dom": "3.5.26", - "@vue/compiler-ssr": "3.5.26", - "@vue/shared": "3.5.26", + "@vue/compiler-core": "3.5.27", + "@vue/compiler-dom": "3.5.27", + "@vue/compiler-ssr": "3.5.27", + "@vue/shared": "3.5.27", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", @@ -4011,63 +4045,63 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", - "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz", + "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.26", - "@vue/shared": "3.5.26" + "@vue/compiler-dom": "3.5.27", + "@vue/shared": "3.5.27" } }, "node_modules/@vue/reactivity": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.26.tgz", - "integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.27.tgz", + "integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==", "license": "MIT", "dependencies": { - "@vue/shared": "3.5.26" + "@vue/shared": "3.5.27" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.26.tgz", - "integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.27.tgz", + "integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.26", - "@vue/shared": "3.5.26" + "@vue/reactivity": "3.5.27", + "@vue/shared": "3.5.27" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.26.tgz", - "integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz", + "integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.26", - "@vue/runtime-core": "3.5.26", - "@vue/shared": "3.5.26", + "@vue/reactivity": "3.5.27", + "@vue/runtime-core": "3.5.27", + "@vue/shared": "3.5.27", "csstype": "^3.2.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.26.tgz", - "integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.27.tgz", + "integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==", "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.26", - "@vue/shared": "3.5.26" + "@vue/compiler-ssr": "3.5.27", + "@vue/shared": "3.5.27" }, "peerDependencies": { - "vue": "3.5.26" + "vue": "3.5.27" } }, "node_modules/@vue/shared": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.26.tgz", - "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz", + "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==", "license": "MIT" }, "node_modules/@webgpu/types": { @@ -4334,9 +4368,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", - "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", + "version": "2.9.17", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz", + "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4515,9 +4549,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001764", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", - "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", + "version": "1.0.30001765", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", + "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", "dev": true, "funding": [ { @@ -4917,9 +4951,9 @@ } }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -4927,6 +4961,10 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cross-env": { @@ -5077,9 +5115,9 @@ } }, "node_modules/d3-format": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.1.tgz", - "integrity": "sha512-ryitBnaRbXQtgZ/gU50GSn6jQRwinSCQclpakXymvLd8ytTgE5bmSfgYcUxD7XYL34qHhFDyVk71qqKsfSyvmA==", + "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": { @@ -5385,9 +5423,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.277", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.277.tgz", + "integrity": "sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw==", "dev": true, "license": "ISC" }, @@ -5572,9 +5610,9 @@ "license": "MIT" }, "node_modules/esrap": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.1.tgz", - "integrity": "sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.2.tgz", + "integrity": "sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -5596,9 +5634,9 @@ } }, "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "dev": true, "license": "MIT" }, @@ -5714,6 +5752,24 @@ ], "license": "BSD-3-Clause" }, + "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/fflate": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", @@ -6034,16 +6090,6 @@ "he": "bin/he" } }, - "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, "node_modules/html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", @@ -6052,9 +6098,9 @@ "license": "MIT" }, "node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -6066,14 +6112,14 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -6521,9 +6567,9 @@ "license": "MIT" }, "node_modules/lodash-es": { - "version": "4.17.22", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", - "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", "dev": true, "license": "MIT" }, @@ -7199,9 +7245,9 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", "bin": { @@ -7382,9 +7428,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", - "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.56.0.tgz", + "integrity": "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==", "dev": true, "license": "MIT", "peer": true, @@ -7399,31 +7445,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.1", - "@rollup/rollup-android-arm64": "4.55.1", - "@rollup/rollup-darwin-arm64": "4.55.1", - "@rollup/rollup-darwin-x64": "4.55.1", - "@rollup/rollup-freebsd-arm64": "4.55.1", - "@rollup/rollup-freebsd-x64": "4.55.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", - "@rollup/rollup-linux-arm-musleabihf": "4.55.1", - "@rollup/rollup-linux-arm64-gnu": "4.55.1", - "@rollup/rollup-linux-arm64-musl": "4.55.1", - "@rollup/rollup-linux-loong64-gnu": "4.55.1", - "@rollup/rollup-linux-loong64-musl": "4.55.1", - "@rollup/rollup-linux-ppc64-gnu": "4.55.1", - "@rollup/rollup-linux-ppc64-musl": "4.55.1", - "@rollup/rollup-linux-riscv64-gnu": "4.55.1", - "@rollup/rollup-linux-riscv64-musl": "4.55.1", - "@rollup/rollup-linux-s390x-gnu": "4.55.1", - "@rollup/rollup-linux-x64-gnu": "4.55.1", - "@rollup/rollup-linux-x64-musl": "4.55.1", - "@rollup/rollup-openbsd-x64": "4.55.1", - "@rollup/rollup-openharmony-arm64": "4.55.1", - "@rollup/rollup-win32-arm64-msvc": "4.55.1", - "@rollup/rollup-win32-ia32-msvc": "4.55.1", - "@rollup/rollup-win32-x64-gnu": "4.55.1", - "@rollup/rollup-win32-x64-msvc": "4.55.1", + "@rollup/rollup-android-arm-eabi": "4.56.0", + "@rollup/rollup-android-arm64": "4.56.0", + "@rollup/rollup-darwin-arm64": "4.56.0", + "@rollup/rollup-darwin-x64": "4.56.0", + "@rollup/rollup-freebsd-arm64": "4.56.0", + "@rollup/rollup-freebsd-x64": "4.56.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.56.0", + "@rollup/rollup-linux-arm-musleabihf": "4.56.0", + "@rollup/rollup-linux-arm64-gnu": "4.56.0", + "@rollup/rollup-linux-arm64-musl": "4.56.0", + "@rollup/rollup-linux-loong64-gnu": "4.56.0", + "@rollup/rollup-linux-loong64-musl": "4.56.0", + "@rollup/rollup-linux-ppc64-gnu": "4.56.0", + "@rollup/rollup-linux-ppc64-musl": "4.56.0", + "@rollup/rollup-linux-riscv64-gnu": "4.56.0", + "@rollup/rollup-linux-riscv64-musl": "4.56.0", + "@rollup/rollup-linux-s390x-gnu": "4.56.0", + "@rollup/rollup-linux-x64-gnu": "4.56.0", + "@rollup/rollup-linux-x64-musl": "4.56.0", + "@rollup/rollup-openbsd-x64": "4.56.0", + "@rollup/rollup-openharmony-arm64": "4.56.0", + "@rollup/rollup-win32-arm64-msvc": "4.56.0", + "@rollup/rollup-win32-ia32-msvc": "4.56.0", + "@rollup/rollup-win32-x64-gnu": "4.56.0", + "@rollup/rollup-win32-x64-msvc": "4.56.0", "fsevents": "~2.3.2" } }, @@ -7975,9 +8021,9 @@ } }, "node_modules/svelte": { - "version": "5.46.4", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.46.4.tgz", - "integrity": "sha512-VJwdXrmv9L8L7ZasJeWcCjoIuMRVbhuxbss0fpVnR8yorMmjNDwcjIH08vS6wmSzzzgAG5CADQ1JuXPS2nwt9w==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.48.0.tgz", + "integrity": "sha512-+NUe82VoFP1RQViZI/esojx70eazGF4u0O/9ucqZ4rPcOZD+n5EVp17uYsqwdzjUjZyTpGKunHbDziW6AIAVkQ==", "license": "MIT", "peer": true, "dependencies": { @@ -8002,9 +8048,9 @@ } }, "node_modules/systeminformation": { - "version": "5.30.3", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.30.3.tgz", - "integrity": "sha512-NgHJUpA+y7j4asLQa9jgBt+Eb2piyQIXQ+YjOyd2K0cHNwbNJ6I06F5afOqOiaCuV/wrEyGrb0olg4aFLlJD+A==", + "version": "5.30.5", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.30.5.tgz", + "integrity": "sha512-DpWmpCckhwR3hG+6udb6/aQB7PpiqVnvSljrjbKxNSvTRsGsg7NVE3/vouoYf96xgwMxXFKcS4Ux+cnkFwYM7A==", "license": "MIT", "os": [ "darwin", @@ -8028,214 +8074,214 @@ } }, "node_modules/text-camel-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-camel-case/-/text-camel-case-1.2.9.tgz", - "integrity": "sha512-wKYs9SgRxYizJE1mneR7BbLNlGw2IYzJAS8XwkWIry0CTbO1gvvPkFsx5Z1/hr+VqUaBqx9q3yKd30HpZLdMsQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-camel-case/-/text-camel-case-1.2.10.tgz", + "integrity": "sha512-KNrWeZzQT+gh73V1LnmgTkjK7V+tMRjLCc6VrGwkqbiRdnGVIWBUgIvVnvnaVCxIvZ/2Ke8DCmgPirlQcCqD3Q==", "dev": true, "license": "MIT", "dependencies": { - "text-pascal-case": "1.2.9" + "text-pascal-case": "1.2.10" } }, "node_modules/text-capital-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-capital-case/-/text-capital-case-1.2.9.tgz", - "integrity": "sha512-X5zV8U8pxtq2xS2t46lgAWqZdDbgWMKq03MQSNwY2CJdQCsdTNh144E2Q/q9wBxWzSBUXn+jRc9kF+Gs8/pGhA==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-capital-case/-/text-capital-case-1.2.10.tgz", + "integrity": "sha512-yvViUJKSSQcRO58je224bhPHg/Hij9MEY43zuKShtFzrPwW/fOAarUJ5UkTMSB81AOO1m8q+JiFdxMF4etKZbA==", "dev": true, "license": "MIT", "dependencies": { - "text-no-case": "1.2.9", - "text-upper-case-first": "1.2.9" + "text-no-case": "1.2.10", + "text-upper-case-first": "1.2.10" } }, "node_modules/text-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-case/-/text-case-1.2.9.tgz", - "integrity": "sha512-zZVdA8rMcjx9zhekdUuOPZShc25UTV7W8/ddKbgbPtfCEvIiToPtWiSd2lXLSuiGMovNhJ4+Tw49xll9o9ts+Q==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-case/-/text-case-1.2.10.tgz", + "integrity": "sha512-5bY3Ks/u7OJ5YO69iyXrG5Xf2wUZeyko7U78nPUnYoSeuNeAfA5uAix5hTspfkl6smm3yCBObrex+kFvzeIcJg==", "dev": true, "license": "MIT", "dependencies": { - "text-camel-case": "1.2.9", - "text-capital-case": "1.2.9", - "text-constant-case": "1.2.9", - "text-dot-case": "1.2.9", - "text-header-case": "1.2.9", - "text-is-lower-case": "1.2.9", - "text-is-upper-case": "1.2.9", - "text-kebab-case": "1.2.9", - "text-lower-case": "1.2.9", - "text-lower-case-first": "1.2.9", - "text-no-case": "1.2.9", - "text-param-case": "1.2.9", - "text-pascal-case": "1.2.9", - "text-path-case": "1.2.9", - "text-sentence-case": "1.2.9", - "text-snake-case": "1.2.9", - "text-swap-case": "1.2.9", - "text-title-case": "1.2.9", - "text-upper-case": "1.2.9", - "text-upper-case-first": "1.2.9" + "text-camel-case": "1.2.10", + "text-capital-case": "1.2.10", + "text-constant-case": "1.2.10", + "text-dot-case": "1.2.10", + "text-header-case": "1.2.10", + "text-is-lower-case": "1.2.10", + "text-is-upper-case": "1.2.10", + "text-kebab-case": "1.2.10", + "text-lower-case": "1.2.10", + "text-lower-case-first": "1.2.10", + "text-no-case": "1.2.10", + "text-param-case": "1.2.10", + "text-pascal-case": "1.2.10", + "text-path-case": "1.2.10", + "text-sentence-case": "1.2.10", + "text-snake-case": "1.2.10", + "text-swap-case": "1.2.10", + "text-title-case": "1.2.10", + "text-upper-case": "1.2.10", + "text-upper-case-first": "1.2.10" } }, "node_modules/text-constant-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-constant-case/-/text-constant-case-1.2.9.tgz", - "integrity": "sha512-Vosm6nC7Gag+JFakJHwqS9AXRNgl07j5KZ7srU9cYuKRzYwrxzeJ4RpEogRBNHw7CfmOm0j5FGEznblWtu7pIw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-constant-case/-/text-constant-case-1.2.10.tgz", + "integrity": "sha512-/OfU798O2wrwKN9kQf71WhJeAlklGnbby0Tupp+Ez9NXymW+6oF9LWDRTkN+OreTmHucdvp4WQd6O5Rah5zj8A==", "dev": true, "license": "MIT", "dependencies": { - "text-no-case": "1.2.9", - "text-upper-case": "1.2.9" + "text-no-case": "1.2.10", + "text-upper-case": "1.2.10" } }, "node_modules/text-dot-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-dot-case/-/text-dot-case-1.2.9.tgz", - "integrity": "sha512-N83hsnvGdSO9q9AfNSB9Cy1LFDNN2MCx53LcxtaPoDWPUTk47fv0JlvIY1tgY0wyzCiThF03kVj3jworvAOScA==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-dot-case/-/text-dot-case-1.2.10.tgz", + "integrity": "sha512-vf4xguy5y6e39RlDZeWZFMDf2mNkR23VTSVb9e68dUSpfJscG9/1YWWpW3n8TinzQxBZlsn5sT5olL33MvvQXw==", "dev": true, "license": "MIT", "dependencies": { - "text-no-case": "1.2.9" + "text-no-case": "1.2.10" } }, "node_modules/text-header-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-header-case/-/text-header-case-1.2.9.tgz", - "integrity": "sha512-TqryEKcYisQAfWLbtT3xPnZlMZ/mySO1uS+LUg+B0eNuqgETrSzVpXIUj5E6Zf/EyJHgpZf4VndbAXtOMJuT4w==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-header-case/-/text-header-case-1.2.10.tgz", + "integrity": "sha512-sVb1NY9bwxtu+Z7CVyWbr+I0AkWtF0kEHL/Zz5V2u/WdkjK5tKBwl5nXf0NGy9da4ZUYTBb+TmQpOIqihzvFMQ==", "dev": true, "license": "MIT", "dependencies": { - "text-capital-case": "1.2.9" + "text-capital-case": "1.2.10" } }, "node_modules/text-is-lower-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-is-lower-case/-/text-is-lower-case-1.2.9.tgz", - "integrity": "sha512-cEurrWSnYVYqL8FSwl5cK4mdfqF7qNDCcKJgXI3NnfTesiB8umxAhdlQoErrRYI1xEvYr2WN0MI333EehUhQjg==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-is-lower-case/-/text-is-lower-case-1.2.10.tgz", + "integrity": "sha512-dMTeTgrdWWfYf3fKxvjMkDPuXWv96cWbd1Uym6Zjv9H855S1uHxjkFsGbTYJ2tEK0NvAylRySTQlI6axlcMc4w==", "dev": true, "license": "MIT" }, "node_modules/text-is-upper-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-is-upper-case/-/text-is-upper-case-1.2.9.tgz", - "integrity": "sha512-HxsWr3VCsXXiLlhD0c+Ey+mS2lOTCiSJbkepjaXNHl2bp33KiscQaiG0qLwQmmpZQm4SJCg2s9FkndxS0RNDLQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-is-upper-case/-/text-is-upper-case-1.2.10.tgz", + "integrity": "sha512-PGD/cXoXECGAY1HVZxDdmpJUW2ZUAKQ6DTamDfCHC9fc/z4epOz0pB/ThBnjJA3fz+d2ApkMjAfZDjuZFcodzg==", "dev": true, "license": "MIT" }, "node_modules/text-kebab-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-kebab-case/-/text-kebab-case-1.2.9.tgz", - "integrity": "sha512-nOUyNR5Ej2B9D/wyyXfwUEv26+pQuOb1pEX+ojE37mCIWo8QeOxw5y6nxuqDmG7NrEPzbO6265UMV+EICH13Cw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-kebab-case/-/text-kebab-case-1.2.10.tgz", + "integrity": "sha512-3XZJAApx5JQpUO7eXo7GQ2TyRcGw3OVbqxz6QJb2h+N8PbLLbz3zJVeXdGrhTkoUIbkSZ6PmHx6LRDaHXTdMcA==", "dev": true, "license": "MIT", "dependencies": { - "text-no-case": "1.2.9" + "text-no-case": "1.2.10" } }, "node_modules/text-lower-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-lower-case/-/text-lower-case-1.2.9.tgz", - "integrity": "sha512-53AOnDrhPpiAUQkgY1SHleKUXp/u7GsqRX13NcCREZscmtjLLJ099uxMRjkK7q2KwHkFYVPl9ytkQlTkTQLS0w==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-lower-case/-/text-lower-case-1.2.10.tgz", + "integrity": "sha512-c9j5pIAN3ObAp1+4R7970e1bgtahTRF/5ZQdX2aJBuBngYTYZZIck0NwFXUKk5BnYpLGsre5KFHvpqvf4IYKgg==", "dev": true, "license": "MIT" }, "node_modules/text-lower-case-first": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-lower-case-first/-/text-lower-case-first-1.2.9.tgz", - "integrity": "sha512-iiphHTV7PVH0MljrEQUA9iBE7jfDpXoi4RQju3WzZU3BRVbS6540cNZgxR19hWa0z6z/7cJTH0Ls9LPBaiUfKg==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-lower-case-first/-/text-lower-case-first-1.2.10.tgz", + "integrity": "sha512-Oro84jZPDLD9alfdZWmtFHYTvCaaSz2o4thPtjMsK4GAkTyVg9juYXWj0y0YFyjLYGH69muWsBe4/MR5S7iolw==", "dev": true, "license": "MIT" }, "node_modules/text-no-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-no-case/-/text-no-case-1.2.9.tgz", - "integrity": "sha512-IcCt328KaapimSrytP4ThfC8URmHZb2DgOqCL9BYvGjpxY2lDiqCkIQk9sClZtwcELs2gTnq83a7jNc573FTLA==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-no-case/-/text-no-case-1.2.10.tgz", + "integrity": "sha512-4/m79pzQrywrwEG5lCULY1lQvFY+EKjhH9xSMT6caPK5plqzm9Y7rXyv+UXPd3s9qH6QODZnvsAYWW3M0JgxRA==", "dev": true, "license": "MIT", "dependencies": { - "text-lower-case": "1.2.9" + "text-lower-case": "1.2.10" } }, "node_modules/text-param-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-param-case/-/text-param-case-1.2.9.tgz", - "integrity": "sha512-nR/Ju9amY3aQS1en2CUCgqN/ZiZIVdDyjlJ3xX5J92ChBevGuA4o9K10fh3JGMkbzK97Vcb+bWQJ4Q+Svz+GyQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-param-case/-/text-param-case-1.2.10.tgz", + "integrity": "sha512-hkavcLsRRzZcGryPAshct1AwIOMj/FexYjMaLpGZCYYBn1lcZEeyMzJZPSckzkOYpq35LYSQr3xZto9XU5OAsw==", "dev": true, "license": "MIT", "dependencies": { - "text-dot-case": "1.2.9" + "text-dot-case": "1.2.10" } }, "node_modules/text-pascal-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-pascal-case/-/text-pascal-case-1.2.9.tgz", - "integrity": "sha512-o6ZxMGjWDTUW54pcghpXes+C2PqbYRMdU5mHrIhueb6z6nq1NueiIOeCUdrSjN/3wXfhCmnFjK7/d9aRGZNqSg==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-pascal-case/-/text-pascal-case-1.2.10.tgz", + "integrity": "sha512-/kynZD8vTYOmm/RECjIDaz3qYEUZc/N/bnC79XuAFxwXjdNVjj/jGovKJLRzqsYK/39N22XpGcVmGg7yIrbk6w==", "dev": true, "license": "MIT", "dependencies": { - "text-no-case": "1.2.9" + "text-no-case": "1.2.10" } }, "node_modules/text-path-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-path-case/-/text-path-case-1.2.9.tgz", - "integrity": "sha512-s8cJ6r5TkJp5ticXMgtxd7f12odEN4d1CfX5u4aoz6jcUtBR2lDqzIhVimkqWFMJ4UKPSrmilUha8Xc2BPi+ow==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-path-case/-/text-path-case-1.2.10.tgz", + "integrity": "sha512-vbKdRCaVEeOaW6sm24QP9NbH7TS9S4ZQ3u19H8eylDox7m2HtFwYIBjAPv+v3z4I/+VjrMy9LB54lNP1uEqRHw==", "dev": true, "license": "MIT", "dependencies": { - "text-dot-case": "1.2.9" + "text-dot-case": "1.2.10" } }, "node_modules/text-sentence-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-sentence-case/-/text-sentence-case-1.2.9.tgz", - "integrity": "sha512-/G/Yi5kZfUa1edFRV4O3lGZAkbDZTFvlwW8CYfH7szkEGe2k2MYEYbOyAkGRVQEGV6V6JiuUAaP3VS9c1tB6nQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-sentence-case/-/text-sentence-case-1.2.10.tgz", + "integrity": "sha512-NO4MRlbfxFhl9QgQLuCL4xHmvE7PUWHVPWsZxQ5nzRtDjXOUllWvtsvl8CP5tBEvBmzg0kwfflxfhRtr5vBQGg==", "dev": true, "license": "MIT", "dependencies": { - "text-no-case": "1.2.9", - "text-upper-case-first": "1.2.9" + "text-no-case": "1.2.10", + "text-upper-case-first": "1.2.10" } }, "node_modules/text-snake-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-snake-case/-/text-snake-case-1.2.9.tgz", - "integrity": "sha512-+ZrqK19ynF/TLQZ7ynqVrL2Dy04uu9syYZwsm8PhzUdsY3XrwPy6QiRqhIEFqhyWbShPcfyfmheer5UEQqFxlw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-snake-case/-/text-snake-case-1.2.10.tgz", + "integrity": "sha512-6ttMZ+B9jkHKun908HYr4xSvEtlbfJJ4MvpQ06JEKRGhwjMI0x8t2Wywp+MEzN6142O6E/zKhra18KyBL6cvXA==", "dev": true, "license": "MIT", "dependencies": { - "text-dot-case": "1.2.9" + "text-dot-case": "1.2.10" } }, "node_modules/text-swap-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-swap-case/-/text-swap-case-1.2.9.tgz", - "integrity": "sha512-g5fp12ldktYKK9wdHRMvvtSCQrZYNv/D+ZGLumDsvAY4q9T5bCMO2IWMkIP1F5gVQrysdHH6Xv877P/pjUq1iw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-swap-case/-/text-swap-case-1.2.10.tgz", + "integrity": "sha512-vO3jwInIk0N77oEFakYZ2Hn/llTmRwf2c3RvkX/LfvmLWVp+3QcIc6bwUEtbqGQ5Xh2okjFhYrfkHZstVc3N4Q==", "dev": true, "license": "MIT" }, "node_modules/text-title-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-title-case/-/text-title-case-1.2.9.tgz", - "integrity": "sha512-RAtC9cdmPp41ns5/HXZBsaQg71BsHT7uZpj2ojTtuFa8o2dNuRYYOrSmy5YdLRIAJQ6WK5hQVpV3jHuq7a+4Tw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-title-case/-/text-title-case-1.2.10.tgz", + "integrity": "sha512-bqA+WWexUMWu9A3fdNar+3GXXW+c5xOvMyuK5hOx/w0AlqhyQptyCrMFjGB8Fd9dxbryBNmJ+5rWtC1OBDxlaA==", "dev": true, "license": "MIT", "dependencies": { - "text-no-case": "1.2.9", - "text-upper-case-first": "1.2.9" + "text-no-case": "1.2.10", + "text-upper-case-first": "1.2.10" } }, "node_modules/text-upper-case": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-upper-case/-/text-upper-case-1.2.9.tgz", - "integrity": "sha512-K/0DNT7a4z8eah2spARtoJllTZyrNTo6Uc0ujhN/96Ir9uJ/slpahfs13y46H9osL3daaLl3O7iXOkW4xtX6bg==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-upper-case/-/text-upper-case-1.2.10.tgz", + "integrity": "sha512-L1AtZ8R+jtSMTq0Ffma9R4Rzbrc3iuYW89BmWFH41AwnDfRmEBlBOllm1ZivRLQ/6pEu2p+3XKBHx9fsMl2CWg==", "dev": true, "license": "MIT" }, "node_modules/text-upper-case-first": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/text-upper-case-first/-/text-upper-case-first-1.2.9.tgz", - "integrity": "sha512-wEDD1B6XqJmEV+xEnBJd+2sBCHZ+7fvA/8Rv/o8+dAsp05YWjYP/kjB8sPH6zqzW0s6jtehIg4IlcKjcYxk2CQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/text-upper-case-first/-/text-upper-case-first-1.2.10.tgz", + "integrity": "sha512-VXs7j7BbpKwvolDh5fwpYRmMrUHGkxbY8E90fhBzKUoKfadvWmPT/jFieoZ4UPLzr208pXvQEFbb2zO9Qzs9Fg==", "dev": true, "license": "MIT" }, @@ -8283,24 +8329,6 @@ "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.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", @@ -9068,7 +9096,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "peer": true, "bin": { @@ -9094,9 +9122,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.18.2.tgz", - "integrity": "sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.19.0.tgz", + "integrity": "sha512-Heho1hJD81YChi+uS2RkSjcVO+EQLmLSyUlHyp7Y/wFbxQaGb4WXVKD073JytrjXJVkSZVzoE2MCSOKugFGtOQ==", "license": "MIT", "engines": { "node": ">=20.18.1" @@ -9317,24 +9345,6 @@ "vite": "5.x || 6.x || 7.x" } }, - "node_modules/vite/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/vite/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", @@ -9456,17 +9466,17 @@ } }, "node_modules/vue": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", - "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz", + "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==", "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.5.26", - "@vue/compiler-sfc": "3.5.26", - "@vue/runtime-dom": "3.5.26", - "@vue/server-renderer": "3.5.26", - "@vue/shared": "3.5.26" + "@vue/compiler-dom": "3.5.27", + "@vue/compiler-sfc": "3.5.27", + "@vue/runtime-dom": "3.5.27", + "@vue/server-renderer": "3.5.27", + "@vue/shared": "3.5.27" }, "peerDependencies": { "typescript": "*" @@ -9680,9 +9690,9 @@ "license": "MIT" }, "node_modules/zod": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", - "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", "peer": true, "funding": { diff --git a/tests/e2e/generate-grid-screenshots.spec.ts b/tests/e2e/generate-grid-screenshots.spec.ts index 1bc639c..f36bf67 100644 --- a/tests/e2e/generate-grid-screenshots.spec.ts +++ b/tests/e2e/generate-grid-screenshots.spec.ts @@ -55,6 +55,7 @@ const ALL_SERVERS = [ name: "Customer Segmentation Server", dir: "customer-segmentation-server", }, + { key: "debug-server", name: "Debug MCP App Server", dir: "debug-server" }, { key: "map-server", name: "Map Server", dir: "map-server" }, { key: "pdf-server", name: "PDF Server", dir: "pdf-server" }, { key: "qr-server", name: "QR Code Server", dir: "qr-server" }, diff --git a/tests/e2e/servers.spec.ts b/tests/e2e/servers.spec.ts index 323f266..7bdb2a1 100644 --- a/tests/e2e/servers.spec.ts +++ b/tests/e2e/servers.spec.ts @@ -16,6 +16,7 @@ const DYNAMIC_MASKS: Record = { "basic-vue": ["#server-time"], // Server time display "cohort-heatmap": ['[class*="heatmapWrapper"]'], // Heatmap grid (random data) "customer-segmentation": [".chart-container"], // Scatter plot (random data) + "debug-server": ["#event-log", "#callback-table-body"], // Event log and callback counts (dynamic) "say-server": [".playBtn", ".playOverlayBtn"], // Play buttons may have different states shadertoy: ["#canvas"], // WebGL shader canvas (animated) "system-monitor": [ @@ -96,6 +97,7 @@ const ALL_SERVERS = [ name: "Customer Segmentation Server", dir: "customer-segmentation-server", }, + { key: "debug-server", name: "Debug MCP App Server", dir: "debug-server" }, { key: "map-server", name: "Map Server", dir: "map-server" }, { key: "pdf-server", name: "PDF Server", dir: "pdf-server" }, { key: "qr-server", name: "QR Code Server", dir: "qr-server" }, diff --git a/tests/e2e/servers.spec.ts-snapshots/debug-server.png b/tests/e2e/servers.spec.ts-snapshots/debug-server.png new file mode 100644 index 0000000000000000000000000000000000000000..c1fc4ada51ea73e4249fe9334c1616fc3b790988 GIT binary patch literal 53549 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