diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 2889c13..fb95e30 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -440,7 +440,7 @@ "bzlTransitiveDigest": "aVqwKoRPrSXO367SJABlye04kmpR/9VM2xiXB3nh3Ls=", "usagesDigest": "qH5h0y49b/BYrI5SRoLkSpQctbXmqG8KSHgoA8eopCE=", "recordedFileInputs": { - "@@//package.json": "a1ab57bd5f3c91df01dd5866916ded7afb38a5d5cb2ec395a92fdf356277b9c5" + "@@//package.json": "8bfd8a08208c6d8615ebf9f3bf2249a9dd2f60b2b936fb611eaa28335dd5335f" }, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/devtools/client/src/index.ts b/devtools/client/src/index.ts index 8628fc5..531c6a1 100644 --- a/devtools/client/src/index.ts +++ b/devtools/client/src/index.ts @@ -1 +1,2 @@ export { Panel } from "./panel"; +export { createExtensionClient, type ExtensionClient } from "./state/client"; diff --git a/devtools/client/src/state/client.ts b/devtools/client/src/state/client.ts new file mode 100644 index 0000000..2637b54 --- /dev/null +++ b/devtools/client/src/state/client.ts @@ -0,0 +1,90 @@ +import { Messenger } from "@player-devtools/messenger"; +import type { + CommunicationLayerMethods, + ExtensionState, + ExtensionSupportedEvents, +} from "@player-devtools/types"; +import { useStateReducer } from "@player-devtools/utils"; + +import { INITIAL_EXTENSION_STATE } from "../constants"; +import { reducer } from "./reducer"; + +const NOOP_ID = -1; + +export type ExtensionClient = { + getState: () => ExtensionState; + subscribe: (fn: (state: ExtensionState) => void) => () => void; + selectPlayer: (playerID: string) => void; + selectPlugin: (pluginID: string) => void; + handleInteraction: (interaction: { type: string; payload?: string }) => void; + destroy: () => void; +}; + +export const createExtensionClient = ( + communicationLayer: CommunicationLayerMethods, +): ExtensionClient => { + const store = useStateReducer(reducer, INITIAL_EXTENSION_STATE); + + const messenger = new Messenger({ + context: "devtools", + messageCallback: (message) => store.dispatch(message), + ...communicationLayer, + logger: console, + }); + + const selectPlayer = (playerID: string): void => { + store.dispatch({ + id: NOOP_ID, + sender: "internal", + context: "devtools", + _messenger_: false, + timestamp: Date.now(), + type: "PLAYER_DEVTOOLS_PLAYER_SELECTED", + payload: { playerID }, + }); + + messenger.sendMessage({ + type: "PLAYER_DEVTOOLS_PLUGIN_INTERACTION", + payload: { + type: "player-selected", + payload: playerID, + }, + }); + }; + + const selectPlugin = (pluginID: string): void => { + store.dispatch({ + id: NOOP_ID, + sender: "internal", + context: "devtools", + _messenger_: false, + timestamp: Date.now(), + type: "PLAYER_DEVTOOLS_PLUGIN_SELECTED", + payload: { pluginID }, + }); + }; + + const handleInteraction = ({ + type, + payload, + }: { + type: string; + payload?: string; + }): void => { + const { current } = store.getState(); + messenger.sendMessage({ + type: "PLAYER_DEVTOOLS_PLUGIN_INTERACTION", + payload: { type, payload }, + ...(current.player ? { target: current.player } : {}), + }); + }; + + return { + getState: store.getState, + subscribe: store.subscribe, + selectPlayer, + selectPlugin, + handleInteraction, + destroy: () => messenger.destroy(), + }; +}; diff --git a/devtools/client/src/state/index.ts b/devtools/client/src/state/index.ts index 834563e..b2bcb00 100644 --- a/devtools/client/src/state/index.ts +++ b/devtools/client/src/state/index.ts @@ -1,126 +1,33 @@ -import { Messenger } from "@player-devtools/messenger"; -import type { - ExtensionSupportedEvents, - MessengerOptions, -} from "@player-devtools/types"; -import { useCallback, useEffect, useMemo, useReducer } from "react"; +import type { CommunicationLayerMethods } from "@player-devtools/types"; +import { useEffect, useMemo, useSyncExternalStore } from "react"; -import { INITIAL_EXTENSION_STATE } from "../constants"; -import { reducer } from "./reducer"; - -const NOOP_ID = -1; +import { createExtensionClient } from "./client"; /** - * Custom React hook for managing the state of the devtools extension. - * - * This hook initializes the extension's state and sets up a communication layer - * using the `Messenger` class. It provides methods to select a player or plugin, - * and handle interactions, which dispatch actions to update the state accordingly. + * Thin React adapter over `createExtensionClient`. * + * Creates the client once per `communicationLayer` identity, subscribes to + * state via `useSyncExternalStore`, and tears down the Messenger on unmount. */ export const useExtensionState = ({ communicationLayer, }: { /** the communication layer to use for the extension */ - communicationLayer: Pick< - MessengerOptions, - "sendMessage" | "addListener" | "removeListener" - >; + communicationLayer: CommunicationLayerMethods; }) => { - const [state, dispatch] = useReducer(reducer, INITIAL_EXTENSION_STATE); - - const messengerOptions = useMemo>( - () => ({ - context: "devtools", - target: "player", - messageCallback: (message) => { - dispatch(message); - }, - ...communicationLayer, - logger: console, - }), - [dispatch, communicationLayer], + const client = useMemo( + () => createExtensionClient(communicationLayer), + [communicationLayer], ); - const messenger = useMemo( - () => new Messenger(messengerOptions), - [messengerOptions], - ); - - useEffect(() => { - return () => { - messenger.destroy(); - }; - }, []); - - const selectPlayer = useCallback( - (playerID: string) => { - dispatch({ - id: NOOP_ID, - sender: "internal", - context: "devtools", - _messenger_: false, - timestamp: Date.now(), - type: "PLAYER_DEVTOOLS_PLAYER_SELECTED", - payload: { - playerID, - }, - }); + useEffect(() => () => client.destroy(), [client]); - messenger.sendMessage({ - type: "PLAYER_DEVTOOLS_PLUGIN_INTERACTION", - payload: { - type: "player-selected", - payload: playerID, - }, - }); - }, - [dispatch], - ); - - const selectPlugin = useCallback( - (pluginID: string) => { - dispatch({ - id: NOOP_ID, - sender: "internal", - context: "devtools", - _messenger_: false, - timestamp: Date.now(), - type: "PLAYER_DEVTOOLS_PLUGIN_SELECTED", - payload: { - pluginID, - }, - }); - }, - [dispatch], - ); - - /** - * Plugin authors can add interactive elements to the Player-UI content by leveraging - * the pub-sub plugin and having the handle interaction proxy the message to the inspected - * Player-UI instance. - */ - const handleInteraction = useCallback( - ({ - type, - payload, - }: { - /** interaction type */ - type: string; - /** interaction payload */ - payload?: string; - }) => { - messenger.sendMessage({ - type: "PLAYER_DEVTOOLS_PLUGIN_INTERACTION", - payload: { - type, - payload, - }, - ...(state.current.player ? { target: state.current.player } : {}), - }); - }, - [messenger], - ); + const state = useSyncExternalStore(client.subscribe, client.getState); - return { state, selectPlayer, selectPlugin, handleInteraction }; + return { + state, + selectPlayer: client.selectPlayer, + selectPlugin: client.selectPlugin, + handleInteraction: client.handleInteraction, + }; }; diff --git a/devtools/mcp/BUILD b/devtools/mcp/BUILD new file mode 100644 index 0000000..b72c000 --- /dev/null +++ b/devtools/mcp/BUILD @@ -0,0 +1,53 @@ +load("@aspect_bazel_lib//lib:directory_path.bzl", "directory_path") +load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_run_binary") +load("@npm//:defs.bzl", "npm_link_all_packages") +load("@rules_player//javascript:defs.bzl", "js_pipeline") +load("//helpers:defs.bzl", "tsup_config", "vitest_config") + +npm_link_all_packages(name = "node_modules") + +tsup_config(name = "tsup_config") + +vitest_config(name = "vitest_config") + +deps = [ + ":node_modules/@player-devtools/client", + ":node_modules/@player-devtools/messenger", + ":node_modules/@player-devtools/types", + "//:node_modules/@modelcontextprotocol/sdk", + "//:node_modules/@types/ws", + "//:node_modules/flipper-server", + "//:node_modules/flipper-server-client", + "//:node_modules/ws", + "//:node_modules/zod", +] + +js_pipeline( + package_name = "@player-devtools/mcp", + deps = deps, + srcs = glob(["src/**/*", "bin/**/*"]) +) + +directory_path( + name = "entrypoint", + directory = ":mcp", + path = "bin/run", +) + +js_binary( + name = "start", + entry_point = ":entrypoint", + data = [":mcp"] + deps, +) + +# directory_path( +# name = "mcp_inspector_entry", +# directory = "//:node_modules/@modelcontextprotocol/inspector/dir", +# path = "cli/build/cli.js", +# ) + +# js_binary( +# name = "mcp_inspector", +# data = ["//:node_modules", ":mcp_server"], +# entry_point = ":mcp_inspector_entry", +# ) diff --git a/devtools/mcp/bin/run b/devtools/mcp/bin/run new file mode 100644 index 0000000..cf74dd5 --- /dev/null +++ b/devtools/mcp/bin/run @@ -0,0 +1,19 @@ +#!/usr/bin/env node + +const { FlipperServerTransport, MCPServer } = require("@player-devtools/mcp"); + +const transport = new FlipperServerTransport(); +const server = new MCPServer(transport); + +server.start().catch((err) => { + console.error("Failed to start MCP server:", err); + process.exit(1); +}); + +process.on("SIGINT", () => { + server.stop().then(() => process.exit(0)); +}); + +process.on("SIGTERM", () => { + server.stop().then(() => process.exit(0)); +}); diff --git a/devtools/mcp/package.json b/devtools/mcp/package.json new file mode 100644 index 0000000..7aa4f43 --- /dev/null +++ b/devtools/mcp/package.json @@ -0,0 +1,17 @@ +{ + "name": "@player-devtools/mcp", + "version": "0.0.0-PLACEHOLDER", + "main": "src/index.ts", + "bin": { + "player-devtools-mcp": "bin/run" + }, + "files": [ + "dist", + "bin" + ], + "dependencies": { + "@player-devtools/client": "workspace:*", + "@player-devtools/messenger": "workspace:*", + "@player-devtools/types": "workspace:*" + } +} diff --git a/devtools/mcp/src/index.ts b/devtools/mcp/src/index.ts new file mode 100644 index 0000000..3edeadb --- /dev/null +++ b/devtools/mcp/src/index.ts @@ -0,0 +1,7 @@ +export { MCPServer } from "./server"; +export { + type Transport, + FlipperServerTransport, + WebSocketServerTransport, + DEFAULT_WS_PORT, +} from "./transport"; diff --git a/devtools/mcp/src/server.ts b/devtools/mcp/src/server.ts new file mode 100644 index 0000000..3433b47 --- /dev/null +++ b/devtools/mcp/src/server.ts @@ -0,0 +1,118 @@ +import { + createExtensionClient, + type ExtensionClient, +} from "@player-devtools/client"; +import { Server } from "@modelcontextprotocol/sdk/server/index.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from "@modelcontextprotocol/sdk/types.js"; + +import type { Transport } from "./transport"; +import { + listPlayersTool, + getPlayerStatusTool, + getFlowTool, + getDataTool, + getLogsTool, + getPluginDataTool, + describePluginTool, + selectPlayerTool, + invokeActionTool, + handleListPlayers, + handleGetPlayerStatus, + handleGetFlow, + handleGetData, + handleGetLogs, + handleGetPluginData, + handleDescribePlugin, + handleSelectPlayer, + handleInvokeAction, +} from "./tools"; + +const ALL_TOOLS = [ + listPlayersTool, + getPlayerStatusTool, + getFlowTool, + getDataTool, + getLogsTool, + getPluginDataTool, + describePluginTool, + selectPlayerTool, + invokeActionTool, +]; + +export class MCPServer { + private client: ExtensionClient; + private server: Server; + + constructor(private transport: Transport) { + this.client = createExtensionClient(transport); + this.server = new Server( + { name: "player-devtools", version: "0.0.1" }, + { capabilities: { tools: {} } }, + ); + this.registerHandlers(); + } + + private registerHandlers(): void { + this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ + tools: ALL_TOOLS, + })); + + this.server.setRequestHandler(CallToolRequestSchema, async (request) => { + const { name, arguments: args } = request.params; + const c = this.client; + + switch (name) { + case "list_players": + return handleListPlayers(c); + case "get_player_status": + return handleGetPlayerStatus(c, args); + case "get_flow": + return handleGetFlow(c, args); + case "get_data": + return handleGetData(c, args); + case "get_logs": + return handleGetLogs(c, args); + case "get_plugin_data": + return handleGetPluginData(c, args); + case "describe_plugin": + return handleDescribePlugin(c, args); + case "select_player": + return handleSelectPlayer(c, args); + case "invoke_action": + return handleInvokeAction(c, args); + default: + return { + content: [ + { + type: "text" as const, + text: JSON.stringify({ error: `unknown tool: ${name}` }), + }, + ], + }; + } + }); + } + + async start(): Promise { + const stdioTransport = new StdioServerTransport(); + await this.server.connect(stdioTransport); + try { + await this.transport.connect(); + } catch (err) { + console.warn( + "[MCPServer] Transport connect failed (will operate in disconnected mode):", + err instanceof Error ? err.message : err, + ); + } + } + + async stop(): Promise { + this.client.destroy(); + await this.transport.close(); + await this.server.close(); + } +} diff --git a/devtools/mcp/src/tools/flow.ts b/devtools/mcp/src/tools/flow.ts new file mode 100644 index 0000000..9c4f246 --- /dev/null +++ b/devtools/mcp/src/tools/flow.ts @@ -0,0 +1,174 @@ +import type { ExtensionClient } from "@player-devtools/client"; +import type { PluginData } from "@player-devtools/types"; +import type { Tool, CallToolResult } from "@modelcontextprotocol/sdk/types.js"; +import { z } from "zod"; + +type Failure = { error: string }; +type PlayerOk = { + id: string; + player: { + plugins: Record; + active: boolean; + config: Record; + }; +}; +type BasicPluginOk = PlayerOk & { basicPlugin: PluginData }; + +const PlayerInput = z.object({ playerId: z.string().optional() }); + +export const getFlowTool: Tool = { + name: "get_flow", + description: + "Get the current flow from the basic devtools plugin for a Player instance.", + inputSchema: { + type: "object", + properties: { + playerId: { + type: "string", + description: "Player ID. Defaults to the currently selected player.", + }, + }, + required: [], + }, +}; + +export const getDataTool: Tool = { + name: "get_data", + description: + "Get the current flow data model from the basic devtools plugin for a Player instance.", + inputSchema: { + type: "object", + properties: { + playerId: { + type: "string", + description: "Player ID. Defaults to the currently selected player.", + }, + }, + required: [], + }, +}; + +export const getLogsTool: Tool = { + name: "get_logs", + description: + "Get the logs from the basic devtools plugin for a Player instance.", + inputSchema: { + type: "object", + properties: { + playerId: { + type: "string", + description: "Player ID. Defaults to the currently selected player.", + }, + }, + required: [], + }, +}; + +export const getPluginDataTool: Tool = { + name: "get_plugin_data", + description: "Get a specific data key from any plugin for a Player instance.", + inputSchema: { + type: "object", + properties: { + playerId: { + type: "string", + description: "Player ID. Defaults to the currently selected player.", + }, + pluginId: { type: "string", description: "Plugin ID." }, + dataKey: { + type: "string", + description: "Key to retrieve from the plugin's data.", + }, + }, + required: ["pluginId", "dataKey"], + }, +}; + +function resolvePlayer( + client: ExtensionClient, + playerId?: string, +): Failure | PlayerOk { + const { players, current } = client.getState(); + const id = playerId ?? current.player; + if (!id) return { error: "no player selected" }; + const player = players[id]; + if (!player) return { error: `player not found: ${id}` }; + return { id, player }; +} + +function resolveBasicPlugin( + client: ExtensionClient, + playerId?: string, +): Failure | BasicPluginOk { + const resolved = resolvePlayer(client, playerId); + if ("error" in resolved) return resolved; + const { id, player } = resolved; + // Find the first plugin — by convention the basic plugin is registered first + const [basicPlugin] = Object.values(player.plugins); + if (!basicPlugin) return { error: "no plugin registered for this player" }; + return { id, player, basicPlugin }; +} + +function ok(value: unknown): CallToolResult { + return { content: [{ type: "text", text: JSON.stringify(value) }] }; +} + +function err(message: string): CallToolResult { + return { + content: [{ type: "text", text: JSON.stringify({ error: message }) }], + }; +} + +export function handleGetFlow( + client: ExtensionClient, + input: unknown, +): CallToolResult { + const { playerId } = PlayerInput.parse(input); + const resolved = resolveBasicPlugin(client, playerId); + if ("error" in resolved) return err(resolved.error); + return ok(resolved.basicPlugin.flow); +} + +export function handleGetData( + client: ExtensionClient, + input: unknown, +): CallToolResult { + const { playerId } = PlayerInput.parse(input); + const resolved = resolveBasicPlugin(client, playerId); + if ("error" in resolved) return err(resolved.error); + return ok(resolved.basicPlugin.flow?.data ?? null); +} + +export function handleGetLogs( + client: ExtensionClient, + input: unknown, +): CallToolResult { + const { playerId } = PlayerInput.parse(input); + const resolved = resolveBasicPlugin(client, playerId); + if ("error" in resolved) return err(resolved.error); + // Logs live in the plugin's flow data under a "logs" key by convention + return ok( + (resolved.basicPlugin.flow?.data as Record)?.logs ?? [], + ); +} + +const GetPluginDataInput = z.object({ + playerId: z.string().optional(), + pluginId: z.string(), + dataKey: z.string(), +}); + +export function handleGetPluginData( + client: ExtensionClient, + input: unknown, +): CallToolResult { + const { playerId, pluginId, dataKey } = GetPluginDataInput.parse(input); + const resolved = resolvePlayer(client, playerId); + if ("error" in resolved) return err(resolved.error); + const plugin = resolved.player.plugins[pluginId]; + if (!plugin) return err(`plugin not found: ${pluginId}`); + const value = (plugin.flow?.data as Record | undefined)?.[ + dataKey + ]; + return ok(value ?? null); +} diff --git a/devtools/mcp/src/tools/index.ts b/devtools/mcp/src/tools/index.ts new file mode 100644 index 0000000..adc1b96 --- /dev/null +++ b/devtools/mcp/src/tools/index.ts @@ -0,0 +1,4 @@ +export * from "./flow"; +export * from "./players"; +export * from "./plugins"; +export * from "./select"; diff --git a/devtools/mcp/src/tools/players.ts b/devtools/mcp/src/tools/players.ts new file mode 100644 index 0000000..d45e1a0 --- /dev/null +++ b/devtools/mcp/src/tools/players.ts @@ -0,0 +1,72 @@ +import type { ExtensionClient } from "@player-devtools/client"; +import type { Tool, CallToolResult } from "@modelcontextprotocol/sdk/types.js"; +import { z } from "zod"; + +export const listPlayersTool: Tool = { + name: "list_players", + description: + "List all Player instances known to the devtools, and which one is currently selected.", + inputSchema: { type: "object", properties: {}, required: [] }, +}; + +export const getPlayerStatusTool: Tool = { + name: "get_player_status", + description: + "Get the active status and registered plugin IDs for a Player instance.", + inputSchema: { + type: "object", + properties: { + playerId: { + type: "string", + description: "Player ID. Defaults to the currently selected player.", + }, + }, + required: [], + }, +}; + +const GetPlayerStatusInput = z.object({ playerId: z.string().optional() }); + +export function handleListPlayers(client: ExtensionClient): CallToolResult { + const { players, current } = client.getState(); + return { + content: [ + { + type: "text", + text: JSON.stringify({ + players: Object.keys(players), + current: current.player, + }), + }, + ], + }; +} + +export function handleGetPlayerStatus( + client: ExtensionClient, + input: unknown, +): CallToolResult { + const { playerId } = GetPlayerStatusInput.parse(input); + const { players, current } = client.getState(); + const id = playerId ?? current.player; + if (!id) return errorResult("no player selected"); + const player = players[id]; + if (!player) return errorResult(`player not found: ${id}`); + return { + content: [ + { + type: "text", + text: JSON.stringify({ + active: player.active, + plugins: Object.keys(player.plugins), + }), + }, + ], + }; +} + +function errorResult(message: string): CallToolResult { + return { + content: [{ type: "text", text: JSON.stringify({ error: message }) }], + }; +} diff --git a/devtools/mcp/src/tools/plugins.ts b/devtools/mcp/src/tools/plugins.ts new file mode 100644 index 0000000..4baa104 --- /dev/null +++ b/devtools/mcp/src/tools/plugins.ts @@ -0,0 +1,52 @@ +import type { ExtensionClient } from "@player-devtools/client"; +import type { Tool, CallToolResult } from "@modelcontextprotocol/sdk/types.js"; +import { z } from "zod"; + +export const describePluginTool: Tool = { + name: "describe_plugin", + description: + "Get the capability descriptor declared by a plugin at registration time. Use this to discover what data keys and actions the plugin exposes.", + inputSchema: { + type: "object", + properties: { + playerId: { + type: "string", + description: "Player ID. Defaults to the currently selected player.", + }, + pluginId: { type: "string", description: "Plugin ID." }, + }, + required: ["pluginId"], + }, +}; + +const DescribePluginInput = z.object({ + playerId: z.string().optional(), + pluginId: z.string(), +}); + +function err(message: string): CallToolResult { + return { + content: [{ type: "text", text: JSON.stringify({ error: message }) }], + }; +} + +function ok(value: unknown): CallToolResult { + return { content: [{ type: "text", text: JSON.stringify(value) }] }; +} + +export function handleDescribePlugin( + client: ExtensionClient, + input: unknown, +): CallToolResult { + const { playerId, pluginId } = DescribePluginInput.parse(input); + const { players, current } = client.getState(); + const id = playerId ?? current.player; + if (!id) return err("no player selected"); + const player = players[id]; + if (!player) return err(`player not found: ${id}`); + const plugin = player.plugins[pluginId]; + if (!plugin) return err(`plugin not found: ${pluginId}`); + if (!plugin.capabilities) + return err(`plugin "${pluginId}" has no capabilities declared`); + return ok(plugin.capabilities); +} diff --git a/devtools/mcp/src/tools/select.ts b/devtools/mcp/src/tools/select.ts new file mode 100644 index 0000000..27f3d4b --- /dev/null +++ b/devtools/mcp/src/tools/select.ts @@ -0,0 +1,88 @@ +import type { ExtensionClient } from "@player-devtools/client"; +import type { Tool, CallToolResult } from "@modelcontextprotocol/sdk/types.js"; +import { z } from "zod"; + +export const selectPlayerTool: Tool = { + name: "select_player", + description: + "Select a Player instance as the active target for subsequent tool calls.", + inputSchema: { + type: "object", + properties: { + playerId: { type: "string", description: "The Player ID to select." }, + }, + required: ["playerId"], + }, +}; + +export const invokeActionTool: Tool = { + name: "invoke_action", + description: + "Invoke a named action on a plugin. Use describe_plugin first to discover available actions.", + inputSchema: { + type: "object", + properties: { + playerId: { + type: "string", + description: "Player ID. Defaults to the currently selected player.", + }, + pluginId: { type: "string", description: "Plugin ID." }, + action: { type: "string", description: "Action name." }, + payload: { type: "string", description: "Optional stringified payload." }, + }, + required: ["pluginId", "action"], + }, +}; + +const SelectPlayerInput = z.object({ playerId: z.string() }); + +const InvokeActionInput = z.object({ + playerId: z.string().optional(), + pluginId: z.string(), + action: z.string(), + payload: z.string().optional(), +}); + +function err(message: string): CallToolResult { + return { + content: [{ type: "text", text: JSON.stringify({ error: message }) }], + }; +} + +function ok(value: unknown): CallToolResult { + return { content: [{ type: "text", text: JSON.stringify(value) }] }; +} + +export function handleSelectPlayer( + client: ExtensionClient, + input: unknown, +): CallToolResult { + const { playerId } = SelectPlayerInput.parse(input); + const { players } = client.getState(); + if (!players[playerId]) return err(`player not found: ${playerId}`); + client.selectPlayer(playerId); + return ok({ selected: playerId }); +} + +export function handleInvokeAction( + client: ExtensionClient, + input: unknown, +): CallToolResult { + const { playerId, pluginId, action, payload } = + InvokeActionInput.parse(input); + const { players, current } = client.getState(); + const id = playerId ?? current.player; + if (!id) return err("no player selected"); + const player = players[id]; + if (!player) return err(`player not found: ${id}`); + const plugin = player.plugins[pluginId]; + if (!plugin) return err(`plugin not found: ${pluginId}`); + if ( + plugin.capabilities?.actions && + !(action in plugin.capabilities.actions) + ) { + return err(`action "${action}" not declared in plugin capabilities`); + } + client.handleInteraction({ type: action, payload }); + return ok({ invoked: action }); +} diff --git a/devtools/mcp/src/transport.ts b/devtools/mcp/src/transport.ts new file mode 100644 index 0000000..7638fb9 --- /dev/null +++ b/devtools/mcp/src/transport.ts @@ -0,0 +1,347 @@ +import { + createFlipperServer, + FlipperServerState, + type FlipperServer, +} from "flipper-server-client"; +import { WebSocketServer, type WebSocket } from "ws"; +import { spawn, type ChildProcess } from "child_process"; +import * as net from "net"; +import type { + CommunicationLayerMethods, + ExtensionSupportedEvents, + MessengerEvent, + TransactionMetadata, +} from "@player-devtools/types"; + +type MessageCallback = ( + message: TransactionMetadata & MessengerEvent, +) => void; + +const PLUGIN_API = "player-ui-devtools"; + +/** Shape of a Flipper `client-message` payload after JSON.parse */ +type FlipperExecuteMessage = { + method: "execute"; + params: { + api: string; + method: string; + params?: unknown; + }; +}; + +/** Transport interface — implemented by each connection adapter */ +export interface Transport extends CommunicationLayerMethods { + /** Connect to the underlying transport */ + connect(): Promise; + /** Tear down the underlying transport */ + close(): Promise; +} + +/** + * Flipper headless transport + * + * Connects to a running `flipper-server` process and routes messages for the + * "flipper-plugin-player-ui-devtools" plugin through to the Messenger layer. + */ +/** Wait until a TCP port is accepting connections, polling every 500ms */ +function waitForPort( + host: string, + port: number, + timeoutMs = 30_000, +): Promise { + return new Promise((resolve, reject) => { + const deadline = Date.now() + timeoutMs; + const attempt = () => { + const socket = net.connect(port, host); + socket.once("connect", () => { + socket.destroy(); + resolve(); + }); + socket.once("error", () => { + socket.destroy(); + if (Date.now() >= deadline) { + reject(new Error(`Timed out waiting for ${host}:${port}`)); + } else { + setTimeout(attempt, 500); + } + }); + }; + attempt(); + }); +} + +export class FlipperServerTransport implements Transport { + private server: FlipperServer | null = null; + private flipperProcess: ChildProcess | null = null; + private listeners = new Set(); + + /** + * Client IDs that have sent at least one message through the devtools + * plugin — these are the clients we send outbound messages to. + */ + private activeClientIds = new Set(); + + constructor( + private options: { + /** Flipper server host; defaults to "localhost" */ + host?: string; + /** Flipper server WebSocket port; defaults to 52342 */ + port?: number; + } = {}, + ) {} + + async connect(): Promise { + const host = this.options.host ?? "localhost"; + const port = this.options.port ?? 52342; + + // Check if flipper-server is already listening; if not, start it + const alreadyRunning = await new Promise((resolve) => { + const socket = net.connect(port, host); + socket.once("connect", () => { + socket.destroy(); + resolve(true); + }); + socket.once("error", () => { + socket.destroy(); + resolve(false); + }); + }); + + if (!alreadyRunning) { + console.log("[FlipperServerTransport] Starting flipper-server..."); + const serverScript = require.resolve("flipper-server/server.js"); + this.flipperProcess = spawn( + process.execPath, + [serverScript, "--open=true"], + { + stdio: "inherit", + detached: false, + }, + ); + this.flipperProcess.on("error", (err) => { + console.error( + "[FlipperServerTransport] flipper-server process error:", + err, + ); + }); + // Kill the child synchronously on any form of exit so it doesn't orphan + process.on("exit", () => this.flipperProcess?.kill()); + await waitForPort(host, port); + console.log("[FlipperServerTransport] flipper-server ready."); + } else { + console.log("[FlipperServerTransport] flipper-server already running."); + } + + // Read the auth token the flipper-server wrote during startup + const { getAuthToken } = + // eslint-disable-next-line @typescript-eslint/no-require-imports + require("flipper-server/lib/app-connectivity/certificate-exchange/certificate-utils") as { + getAuthToken: () => Promise; + }; + + let cachedToken: string | null = null; + try { + cachedToken = await getAuthToken(); + } catch (err) { + console.warn("[FlipperServerTransport] Could not read auth token:", err); + } + + this.server = await createFlipperServer( + host, + port, + () => cachedToken, + (state) => { + if (state === FlipperServerState.DISCONNECTED) { + console.warn("[FlipperServerTransport] Disconnected from server"); + } + }, + ); + + await this.server.connect(); + + // Track client connects/disconnects + this.server.on("client-connected", (info) => { + console.log( + "[FlipperServerTransport] client-connected:", + JSON.stringify(info), + ); + }); + this.server.on("client-disconnected", ({ id }) => { + console.log("[FlipperServerTransport] client-disconnected:", id); + this.activeClientIds.delete(id); + }); + + // Route inbound device messages to our Messenger listeners + this.server.on("client-message", ({ id, message }) => { + let parsed: FlipperExecuteMessage; + try { + parsed = JSON.parse(message) as FlipperExecuteMessage; + } catch { + return; + } + + console.debug( + `[FlipperServerTransport] client-message from ${id}: method=${parsed.method} api=${(parsed.params as { api?: string })?.api} pluginMethod=${(parsed.params as { method?: string })?.method}`, + ); + + if ( + parsed.method !== "execute" || + parsed.params?.api !== PLUGIN_API || + parsed.params?.method !== "message::plugin" + ) { + return; + } + + // This client is talking through the devtools plugin — remember it + this.activeClientIds.add(id); + + const payload = parsed.params.params as TransactionMetadata & + MessengerEvent; + + for (const listener of this.listeners) { + listener(payload); + } + }); + } + + sendMessage: CommunicationLayerMethods["sendMessage"] = async (message) => { + if (!this.server) return; + + const payload: FlipperExecuteMessage = { + method: "execute", + params: { + api: PLUGIN_API, + method: "message::flipper", + params: message, + }, + }; + + await Promise.all( + [...this.activeClientIds].map((clientId) => + this.server!.exec("client-request-response", clientId, payload).catch( + (err) => { + console.warn( + `[FlipperServerTransport] Failed to send to client ${clientId}:`, + err, + ); + // Remove dead client so we stop trying + this.activeClientIds.delete(clientId); + }, + ), + ), + ); + }; + + addListener: CommunicationLayerMethods["addListener"] = (callback) => { + this.listeners.add(callback); + }; + + removeListener: CommunicationLayerMethods["removeListener"] = (callback) => { + this.listeners.delete(callback); + }; + + async close(): Promise { + this.listeners.clear(); + this.activeClientIds.clear(); + this.server?.close(); + this.server = null; + if (this.flipperProcess) { + this.flipperProcess.kill(); + this.flipperProcess = null; + } + } +} + +/** Default port the MCP server listens on for WebSocket connections */ +export const DEFAULT_WS_PORT = 7382; + +/** + * WebSocket server transport + * + * The MCP server opens a WebSocket server; the player connects as a client + * (via `useWSCommunicationLayer`). Works for: + * - Browser-based players + * - iOS/Android simulators over localhost + * - Physical devices over WiFi (same LAN) + */ +export class WebSocketServerTransport implements Transport { + private wss: WebSocketServer | null = null; + private clients = new Set(); + private listeners = new Set(); + + constructor( + private options: { + /** Port to listen on; defaults to 7382 */ + port?: number; + /** Host to bind to; defaults to "localhost" */ + host?: string; + } = {}, + ) {} + + async connect(): Promise { + const port = this.options.port ?? DEFAULT_WS_PORT; + const host = this.options.host ?? "localhost"; + + await new Promise((resolve, reject) => { + this.wss = new WebSocketServer({ port, host }); + + this.wss.on("listening", resolve); + this.wss.on("error", reject); + + this.wss.on("connection", (socket) => { + this.clients.add(socket); + + socket.on("message", (data) => { + let parsed: TransactionMetadata & + MessengerEvent; + try { + parsed = JSON.parse(data.toString()); + } catch { + return; + } + for (const listener of this.listeners) { + listener(parsed); + } + }); + + socket.on("close", () => { + this.clients.delete(socket); + }); + + socket.on("error", (err) => { + console.warn("[WebSocketServerTransport] Client error:", err); + this.clients.delete(socket); + }); + }); + }); + + console.log(`[WebSocketServerTransport] Listening on ws://${host}:${port}`); + } + + sendMessage: CommunicationLayerMethods["sendMessage"] = async (message) => { + const data = JSON.stringify(message); + for (const client of this.clients) { + if (client.readyState === 1 /* OPEN */) { + client.send(data); + } + } + }; + + addListener: CommunicationLayerMethods["addListener"] = (callback) => { + this.listeners.add(callback); + }; + + removeListener: CommunicationLayerMethods["removeListener"] = (callback) => { + this.listeners.delete(callback); + }; + + async close(): Promise { + for (const client of this.clients) { + client.close(); + } + this.clients.clear(); + this.listeners.clear(); + await new Promise((resolve) => this.wss?.close(() => resolve())); + this.wss = null; + } +} diff --git a/devtools/plugin/core/src/plugin.ts b/devtools/plugin/core/src/plugin.ts index c729921..7042cbf 100644 --- a/devtools/plugin/core/src/plugin.ts +++ b/devtools/plugin/core/src/plugin.ts @@ -10,7 +10,11 @@ import { import { dsetAssign } from "@player-devtools/utils"; import type { DataModel, Player, PlayerPlugin } from "@player-ui/player"; import { produce } from "immer"; -import { useStateReducer, type Store, type Unsubscribe } from "./state"; +import { + useStateReducer, + type Store, + type Unsubscribe, +} from "@player-devtools/utils"; import { reducer } from "./reducer"; import { PLUGIN_INACTIVE_WARNING, INTERACTIONS } from "./constants"; import { genDataChangeTransaction } from "./helpers"; diff --git a/devtools/plugin/core/src/state.ts b/devtools/plugin/core/src/state.ts deleted file mode 100644 index 71c0322..0000000 --- a/devtools/plugin/core/src/state.ts +++ /dev/null @@ -1,43 +0,0 @@ -export type Reducer = (state: T, action: A) => T; -export type Dispatch = (action: A) => void; -export type Subscriber = (state: T) => void; -export type Subscribe = (subscriber: Subscriber) => Unsubscribe; -export type Unsubscribe = () => void; - -export interface Store { - getState: () => State; - subscribe: Subscribe; - dispatch: Dispatch; -} - -export const useStateReducer = ( - reducer: Reducer, - initialState: State, -): Store => { - let state = initialState; - const subscribers = new Set>(); - return { - getState: () => state, - - /** Subscribe to state changes; returns an unsubscribe function. */ - subscribe(subscriber: Subscriber): Unsubscribe { - subscribers.add(subscriber); - subscriber(state); - return () => subscribers.delete(subscriber); - }, - - /** Dispatch an action through the reducer, then run side-effects. */ - dispatch(action: Action): void { - const prevState = state; - const nextState = reducer(prevState, action); - - // Only proceed if state actually changed by reference - if (nextState !== prevState) { - state = nextState; - - // Notify subscribers - for (const sub of subscribers) sub(state); - } - }, - }; -}; diff --git a/devtools/plugins/basic/content/src/index.ts b/devtools/plugins/basic/content/src/index.ts index 1f8abb9..87c9728 100644 --- a/devtools/plugins/basic/content/src/index.ts +++ b/devtools/plugins/basic/content/src/index.ts @@ -1,5 +1,5 @@ import type { PluginData } from "@player-devtools/types"; -import { PLUGIN_ID } from "./constants"; +import { PLUGIN_ID, INTERACTIONS } from "./constants"; // Generated via dsl_compile target import flow from "../_generated/flow.json"; @@ -17,6 +17,45 @@ export const BasicPluginData: PluginData = { description: "Standard Player UI Devtools", version: PLUGIN_VERSION, flow, + capabilities: { + description: + "Exposes Player runtime state (flow, data, logs, config) and supports expression evaluation and flow overrides.", + data: { + flow: { description: "The currently active Player flow JSON" }, + data: { description: "The current Player data model" }, + logs: { + description: "Accumulated log messages emitted by the Player runtime", + }, + playerConfig: { + description: "Player version and list of registered plugin names", + }, + history: { + description: + "Results of previous expression evaluations in this session", + }, + }, + actions: { + [INTERACTIONS.EVALUATE_EXPRESSION]: { + description: + "Evaluate a Player expression string and return the result", + params: { + payload: { + type: "string", + description: "The expression to evaluate", + }, + }, + }, + [INTERACTIONS.OVERRIDE_FLOW]: { + description: "Replace the currently running flow with a new flow JSON", + params: { + payload: { + type: "string", + description: "Stringified flow JSON to load", + }, + }, + }, + }, + }, }; export * from "./constants"; diff --git a/devtools/types/core/src/index.ts b/devtools/types/core/src/index.ts index d57a8e4..7c28777 100644 --- a/devtools/types/core/src/index.ts +++ b/devtools/types/core/src/index.ts @@ -97,6 +97,19 @@ export interface MessengerOptions> { }; } +/** Describes data keys and actions a plugin exposes to agents */ +export type PluginCapabilities = { + /** Human-readable description of what this plugin does */ + description: string; + /** Data keys the plugin publishes, keyed by name */ + data: Record; + /** Actions the plugin accepts, keyed by name */ + actions?: Record< + string, + { description: string; params?: Record } + >; +}; + /** Plugin data */ export interface PluginData { /** Plugin id */ @@ -109,6 +122,8 @@ export interface PluginData { description: string; /** Plugin UI */ flow: Flow; + /** Agent-visible capabilities declared at registration time */ + capabilities?: PluginCapabilities; } export interface ExtensionState { diff --git a/devtools/utils/core/src/index.ts b/devtools/utils/core/src/index.ts index 576b2c7..a78ff24 100644 --- a/devtools/utils/core/src/index.ts +++ b/devtools/utils/core/src/index.ts @@ -1,3 +1,44 @@ +export type Reducer = (state: State, action: Action) => State; +export type Dispatch = (action: Action) => void; +export type Subscriber = (state: State) => void; +export type Subscribe = (subscriber: Subscriber) => Unsubscribe; +export type Unsubscribe = () => void; + +export interface Store { + getState: () => State; + subscribe: Subscribe; + dispatch: Dispatch; +} + +export const useStateReducer = ( + reducer: Reducer, + initialState: State, +): Store => { + let state = initialState; + const subscribers = new Set>(); + return { + getState: () => state, + + /** Subscribe to state changes; returns an unsubscribe function. */ + subscribe(subscriber: Subscriber): Unsubscribe { + subscribers.add(subscriber); + subscriber(state); + return () => subscribers.delete(subscriber); + }, + + /** Dispatch an action through the reducer, then run side-effects. */ + dispatch(action: Action): void { + const prevState = state; + const nextState = reducer(prevState, action); + + if (nextState !== prevState) { + state = nextState; + for (const sub of subscribers) sub(state); + } + }, + }; +}; + /** * Recursively assigns the contents of `source` into `target`, preserving * existing object and array references to maintain key insertion order. diff --git a/justfile b/justfile index 4228b8d..4a346ab 100644 --- a/justfile +++ b/justfile @@ -74,6 +74,15 @@ install-flipper-client: rsync -a --delete bazel-bin/$PREFIX/$PLUGIN_NAME/. $INSTALL_LOCATION/ chown -R $(whoami) $INSTALL_LOCATION + +[doc('Run the MCP server (requires a running Flipper server on localhost:52342)')] +mcp: + bazel run //devtools/mcp:mcp_server + +[doc('Open MCP inspector against the MCP server')] +mcp-inspect: + bazel run //devtools/mcp:inspect + clean: # Force delete all the cached bazel stuff. Be careful! # Delete all the bazel build artifacts rm -rf .build diff --git a/package.json b/package.json index b280594..b18e66f 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,8 @@ "@devtools-ui/plugin": "0.4.0", "@emotion/styled": "^11", "@eslint/js": "^9.29.0", + "@modelcontextprotocol/inspector": "^0.21.1", + "@modelcontextprotocol/sdk": "^1.0.0", "@oclif/core": "1.9.0", "@oclif/errors": "^1.3.6", "@oclif/plugin-plugins": "^1.9.0", @@ -79,6 +81,7 @@ "@types/react-dom": "^18.3.0", "@types/std-mocks": "^1.0.4", "@types/uuid": "^8.3.4", + "@types/ws": "^8.0.0", "@typescript-eslint/eslint-plugin": "^8.34.0", "@typescript-eslint/parser": "^5.62.0", "@vitejs/plugin-react": "^4.2.1", @@ -99,6 +102,8 @@ "eslint-plugin-react": "^7.37.4", "figures": "^3.0.0", "flipper-pkg": "^0.212.0", + "flipper-server": "^0.273.0", + "flipper-server-client": "^0.273.0", "flipper-plugin": "^0.212.0", "fs-extra": "^10.0.0", "globby": "^11.0.1", @@ -133,7 +138,9 @@ "vite-plugin-commonjs": "^0.10.1", "vitest": "^3.2.3", "vscode-languageserver-textdocument": "^1.0.11", - "vscode-languageserver-types": "^3.17.5" + "vscode-languageserver-types": "^3.17.5", + "ws": "^8.0.0", + "zod": "^3.0.0" }, "packageManager": "pnpm@10.12.1", "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a180f0..ec1933d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,6 +52,12 @@ importers: '@eslint/js': specifier: ^9.29.0 version: 9.35.0 + '@modelcontextprotocol/inspector': + specifier: ^0.21.1 + version: 0.21.1(@swc/core@1.3.74)(@types/node@24.5.2)(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(typescript@5.8.3) + '@modelcontextprotocol/sdk': + specifier: ^1.0.0 + version: 1.29.0(zod@3.25.76) '@oclif/core': specifier: 1.9.0 version: 1.9.0 @@ -205,6 +211,9 @@ importers: '@types/uuid': specifier: ^8.3.4 version: 8.3.4 + '@types/ws': + specifier: ^8.0.0 + version: 8.18.1 '@typescript-eslint/eslint-plugin': specifier: ^8.34.0 version: 8.44.0(@typescript-eslint/parser@5.62.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.35.0(jiti@2.5.1))(typescript@5.8.3) @@ -268,6 +277,12 @@ importers: flipper-plugin: specifier: ^0.212.0 version: 0.212.0(@ant-design/icons@4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@testing-library/dom@9.3.4)(antd@4.24.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + flipper-server: + specifier: ^0.273.0 + version: 0.273.0 + flipper-server-client: + specifier: ^0.273.0 + version: 0.273.0 fs-extra: specifier: ^10.0.0 version: 10.1.0 @@ -370,6 +385,12 @@ importers: vscode-languageserver-types: specifier: ^3.17.5 version: 3.17.5 + ws: + specifier: ^8.0.0 + version: 8.18.3 + zod: + specifier: ^3.0.0 + version: 3.25.76 devtools/client: dependencies: @@ -392,6 +413,18 @@ importers: specifier: workspace:* version: link:../types/core + devtools/mcp: + dependencies: + '@player-devtools/client': + specifier: workspace:* + version: link:../client + '@player-devtools/messenger': + specifier: workspace:* + version: link:../messenger/core + '@player-devtools/types': + specifier: workspace:* + version: link:../types/core + devtools/messenger/core: dependencies: '@player-devtools/types': @@ -2697,6 +2730,12 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@hono/node-server@1.19.12': + resolution: {integrity: sha512-txsUW4SQ1iilgE0l9/e9VQWmELXifEFvmdA1j6WFh/aFPj99hIntrSsq/if0UWyGVkmrRPKA1wCeP+UCr1B9Uw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -2713,6 +2752,9 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@iarna/toml@2.2.5': + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + '@icons/material@0.2.4': resolution: {integrity: sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==} peerDependencies: @@ -2965,11 +3007,58 @@ packages: '@marijn/find-cluster-break@1.0.2': resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + '@mcp-ui/client@6.1.1': + resolution: {integrity: sha512-kN5io7ouEpVfOTloEEGrnuWio3ZzYOVgTk4o8ULleACdKEw7VgOTozPl9aj9qVl/UBh7rXlvKH0JbBm6Tw52LQ==} + peerDependencies: + react: ^18 || ^19 + react-dom: ^18 || ^19 + '@mdx-js/react@2.3.0': resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} peerDependencies: react: '>=16' + '@modelcontextprotocol/ext-apps@1.4.0': + resolution: {integrity: sha512-Um/Matin/B4h7h+WUDWJNCCva6SzX0lfnFcoZ6JgcDcS/bgO5OmOI/tkoWaA9ebuRqnA44H1Rb+2CPSJJ5nm/A==} + engines: {node: '>=20'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.29.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 + + '@modelcontextprotocol/inspector-cli@0.21.1': + resolution: {integrity: sha512-IuBHJXEjuprPm+YtJGunAuqS3dnDtqf5VOVkzauRGICCEbT860YnDHNhxZARo5h0iMFYwEgRJvMQQwYayEE28w==} + hasBin: true + + '@modelcontextprotocol/inspector-client@0.21.1': + resolution: {integrity: sha512-IZlriZkASr0nbObb4HmNY+dw6Q2/jb126Eh2D97xasuhMZNB1TTBrIt7QHNy2TjhH/qV3acx29rgzMBIys3FAQ==} + hasBin: true + + '@modelcontextprotocol/inspector-server@0.21.1': + resolution: {integrity: sha512-dNPbz37aHMkuwwr/AZCnmoigDFSCbilMHkDQ2SVt0yORCgeoIX2li2La6XbmZIKAp14sCpJCKKKpmhwJ9uRiLA==} + hasBin: true + + '@modelcontextprotocol/inspector@0.21.1': + resolution: {integrity: sha512-9d2zJ97Bg9hHj4Qz1b06aCmIu4/Ts84H8RqqJteORJUyxaK8DGfXQ3JoS0PsU8gHoHWabFAs4HAiy/ePU8Oa2A==} + engines: {node: '>=22.7.5'} + hasBin: true + + '@modelcontextprotocol/sdk@1.29.0': + resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + '@monaco-editor/loader@1.5.0': resolution: {integrity: sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==} @@ -3430,6 +3519,9 @@ packages: '@radix-ui/number@1.0.1': resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + '@radix-ui/primitive@1.0.1': resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} @@ -3449,6 +3541,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-checkbox@1.3.3': + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-collection@1.0.3': resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: @@ -3511,6 +3629,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-direction@1.0.1': resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -3542,6 +3673,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-guards@1.0.1': resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: @@ -3551,6 +3695,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-focus-scope@1.0.3': resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: @@ -3564,6 +3717,24 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} + peerDependencies: + react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc + '@radix-ui/react-id@1.0.1': resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: @@ -3595,6 +3766,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popper@1.1.2': resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -3608,6 +3792,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.0.3': resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: @@ -3621,6 +3818,32 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@1.0.3': resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -3673,6 +3896,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-separator@1.1.7': resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} peerDependencies: @@ -3704,6 +3940,45 @@ packages: '@types/react': optional: true + '@radix-ui/react-switch@1.2.6': + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toast@1.2.15': + resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-toggle-group@1.1.11': resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} peerDependencies: @@ -3743,6 +4018,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.0.1': resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: @@ -3797,6 +4085,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.0.1': resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -3824,6 +4121,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.0.1': resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: @@ -3833,6 +4139,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-size@1.0.1': resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: @@ -3842,6 +4157,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-visually-hidden@1.0.3': resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: @@ -3855,9 +4179,25 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.0.1': resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@rc-component/portal@1.1.2': resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==, tarball: https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz} engines: {node: '>=8.x'} @@ -4777,6 +5117,9 @@ packages: '@types/wrap-ansi@3.0.0': resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -5041,6 +5384,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-import-phases@1.0.4: resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==, tarball: https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz} engines: {node: '>=10.13.0'} @@ -5070,6 +5417,23 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + adbkit-logcat@1.1.0: + resolution: {integrity: sha512-57iYRLdjmhI1fnc890KyflzWpnIb/aq5ET3fbn3axdyyeyKeP4Ji/GhnfBNguG1Tw7SQRL2eBnA+hvbwIsTtNg==} + engines: {node: '>= 0.10.4'} + + adbkit-logcat@2.0.1: + resolution: {integrity: sha512-MznVzzEzcrWhIaIyblll+a0AL1TICJe/yuaia7HDYTAtiNabR/9amJkAnLt30U8/W7MVBc3mvU1jB/6MJ/TYHw==} + engines: {node: '>= 4'} + + adbkit-monkey@1.0.1: + resolution: {integrity: sha512-uU8p+p4sv7gLsjO/At4iPufoPD3R16kVbzDVecdIerR9RzhEK6PcyAJghdOXwrYKbhm7SmPQWsxVRloDBMINDA==} + engines: {node: '>= 0.10.4'} + + adbkit@2.11.1: + resolution: {integrity: sha512-hDTiRg9NX3HQt7WoDAPCplUpvzr4ZzQa2lq7BdTTJ/iOZ6O7YNAs6UYD8sFAiBEcYHDRIyq3cm9sZP6uZnhvXw==} + engines: {node: '>= 0.10.4'} + hasBin: true + address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -5099,6 +5463,14 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-keywords@5.1.0: resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==, tarball: https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz} peerDependencies: @@ -5172,6 +5544,18 @@ packages: app-root-dir@1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + + archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + + archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -5250,6 +5634,9 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} @@ -5275,12 +5662,18 @@ packages: async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + async-mutex@0.3.2: + resolution: {integrity: sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==} + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} async-validator@4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==, tarball: https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz} + async@0.2.10: + resolution: {integrity: sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -5311,6 +5704,9 @@ packages: axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + axios@0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + babel-core@7.0.0-bridge.0: resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: @@ -5381,10 +5777,17 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bluebird@2.9.34: + resolution: {integrity: sha512-ZDzCb87X7/IP1uzQ5eJZB+WoQRGTnKL5DHWvPw6kkMbQseouiQIrEi3P1UGE0D1k0N5/+aP/5GMCyHZ1xYJyHQ==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} + engines: {node: '>=18'} + bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==, tarball: https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz} @@ -5436,6 +5839,9 @@ packages: buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-fill@1.0.0: resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} @@ -5445,12 +5851,20 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.18' + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -5634,6 +6048,10 @@ packages: cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -5654,6 +6072,12 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cmdk@1.1.1: + resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + codemirror@6.0.2: resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==, tarball: https://registry.npmjs.org/codemirror/-/codemirror-6.0.2.tgz} @@ -5694,6 +6118,10 @@ packages: resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} engines: {node: '>=8.0.0'} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + commander@2.13.0: resolution: {integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==} @@ -5715,6 +6143,10 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -5736,6 +6168,11 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} + concurrently@9.2.1: + resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} + engines: {node: '>=18'} + hasBin: true + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -5753,10 +6190,18 @@ packages: constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.1: + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + engines: {node: '>=18'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -5770,6 +6215,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} @@ -5783,6 +6232,10 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + cosmiconfig@5.2.1: resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==, tarball: https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz} engines: {node: '>=4'} @@ -5795,6 +6248,15 @@ packages: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -5821,6 +6283,10 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -5914,6 +6380,14 @@ packages: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} engines: {node: '>=12'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -5929,6 +6403,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -6068,6 +6546,9 @@ packages: resolution: {integrity: sha512-uW2UKSsuty9ANJ3YByIQE4ANkD8nqUPO7r6Fwcc1ADKPe9FRdcPpMl3VEput4JSvKBJ4J86npIC2MLP0pYkCuw==} hasBin: true + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -6544,18 +7025,40 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, tarball: https://registry.npmjs.org/events/-/events-3.3.0.tgz} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.6: + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + expect-type@1.2.2: resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} + express-rate-limit@8.3.2: + resolution: {integrity: sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -6606,6 +7109,12 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + + fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -6618,6 +7127,10 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fetch-retry@5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} @@ -6633,6 +7146,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-stream-rotator@0.6.1: + resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} + file-system-cache@2.3.0: resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} @@ -6663,6 +7179,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + find-cache-dir@2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} @@ -6710,9 +7230,15 @@ packages: flipper-common@0.212.0: resolution: {integrity: sha512-5ZuVn/pCrIa10UuASra8dNwdvNkYuV23m2F4J8k4E+EIfp/s2+woOTkMC1C+JhRDmLYZmLQUtmmD87qMUB8hFw==} + flipper-common@0.273.0: + resolution: {integrity: sha512-MTtneDiYI9W/Mmm8pImmUSnNFaad+rxaJEGifmh7iALRjzmUIzjAY6yRy1MXYy2KNM1+OOwUs8y49Ss1IHnB5g==} + flipper-pkg-lib@0.212.0: resolution: {integrity: sha512-2bzkpSJ0+OMXPvIOsYKHSHYPVTNRy1hMkZEiBdjRcMgHGKOwXmXunErpi+JoQfVjSN0UmKtLVHlgrXD165rGDQ==} + flipper-pkg-lib@0.273.0: + resolution: {integrity: sha512-1UPRJP2l+oLXq4Oxw9eUctHnCsoEFYBA48oyGiIXbcRuZwYMftkaHLiAHf5gLkmgxq8lO5tLMX5oiD+kJ9ssKw==} + flipper-pkg@0.212.0: resolution: {integrity: sha512-QjKT/rjq7qdyHI57l37vwZvRSiIIVaIdECY/YjXRuL4ubOOPEdDTmdk1Ui2CXu3L/L+ku1qNsKfol8KX3turOw==} engines: {node: '>=8.0.0'} @@ -6726,6 +7252,9 @@ packages: flipper-plugin-lib@0.212.0: resolution: {integrity: sha512-HOwpwodPRK1dJh+JUzZ+gWGnq1sV5rO8YucXvXvBhgTnYToBO8o14kz0wiG29AzHMyt9kOTiCMt59hrG2xuPxA==} + flipper-plugin-lib@0.273.0: + resolution: {integrity: sha512-kfFHv/aBDJ5EV2T6cGU/+ORM4W1TGrNe9mxYOjPrDTD9M8XrxFZHqkqSQRvj6D4FYQD0Ze2CkqDudrv2RuznqQ==} + flipper-plugin@0.212.0: resolution: {integrity: sha512-u61SIWBJHYCOSwtFkNJh5Q9YDuleoUdrSHaQ32dVHXaJMuSC7oQnZqG7LC3cR6MFX85KetM3hbNpk9I7/F9x1A==} peerDependencies: @@ -6733,6 +7262,13 @@ packages: '@testing-library/dom': ^7.26.3 antd: ^4.23.4 + flipper-server-client@0.273.0: + resolution: {integrity: sha512-9v6sly59LgOfdMKQVcVHkiGYcGs1xTrtZz7A9ATKP8HMG3OXYGDNuk9P6bUMY+QY2T+8E29FeXTgLDMfM2fQow==} + + flipper-server@0.273.0: + resolution: {integrity: sha512-EjRFoSlJQ9dcaHCpxICTVsbam4auKUTDfjTvzJofD6/YvfbGxUi39uUwH9M3+sBqQLpn5yvYaPyUTmU6XhX9VA==} + hasBin: true + flow-bin@0.118.0: resolution: {integrity: sha512-jlbUu0XkbpXeXhan5xyTqVK1jmEKNxE8hpzznI3TThHTr76GiFwK0iRzhDo4KNy+S9h/KxHaqVhTP86vA6wHCg==} engines: {node: '>=0.10.0'} @@ -6775,6 +7311,10 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -6803,6 +7343,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==, tarball: https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz} @@ -7039,6 +7583,10 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hono@4.12.9: + resolution: {integrity: sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==} + engines: {node: '>=16.9.0'} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -7064,6 +7612,14 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -7168,6 +7724,10 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -7176,6 +7736,10 @@ packages: peerDependencies: fp-ts: ^2.5.0 + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -7242,6 +7806,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -7266,6 +7835,11 @@ packages: resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -7317,6 +7891,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -7377,6 +7954,10 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -7474,6 +8055,9 @@ packages: resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true + jose@6.2.2: + resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -7538,6 +8122,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz} + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json-source-map@0.6.1: resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==} @@ -7568,10 +8155,20 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} + engines: {node: '>=12', npm: '>=6'} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -7602,6 +8199,10 @@ packages: resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} engines: {node: '>=14.0.0'} + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -7683,16 +8284,49 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==, tarball: https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -7706,6 +8340,9 @@ packages: lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -7745,6 +8382,11 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 + lucide-react@0.523.0: + resolution: {integrity: sha512-rUjQoy7egZT9XYVXBK1je9ckBnNp7qzRZOhLQx5RcEp2dCGlXo+mv6vf7Am4LimEcFBJIIZzSGfgTqc9QCrPSw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -7851,15 +8493,27 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memoize-one@3.1.1: resolution: {integrity: sha512-YqVh744GsMlZu6xkhGslPSqSurOv6P+kLN2J3ysBZfagLcL5FdRK/0UpgLoL8hwjjEvvAVkjJZyFP+1T6p1vgA==} memoizerific@1.11.3: resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -8021,6 +8675,10 @@ packages: microseconds@0.2.0: resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -8029,10 +8687,18 @@ packages: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -8066,6 +8732,9 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -8169,6 +8838,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -8182,6 +8855,11 @@ packages: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -8203,6 +8881,17 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-forge@0.10.0: + resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} + engines: {node: '>= 6.0.0'} + + node-forge@0.7.6: + resolution: {integrity: sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==} + node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -8326,10 +9015,17 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openssl-wrapper@0.3.4: + resolution: {integrity: sha512-iITsrx6Ho8V3/2OVtmZzzX8wQaKAaFXEJQdzoPUZDtyf5jWFlqo+h+OhGT4TATQ47f9ACKHua8nw7Qoy85aeKQ==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -8472,6 +9168,9 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -8486,6 +9185,12 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, tarball: https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz} engines: {node: '>=4'} @@ -8542,6 +9247,14 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + pkce-challenge@4.1.0: + resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==} + engines: {node: '>=16.20.0'} + + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} + engines: {node: '>=16.20.0'} + pkg-conf@2.1.0: resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} engines: {node: '>=4'} @@ -8628,6 +9341,10 @@ packages: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==, tarball: https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz} engines: {node: '>=10'} + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -8639,6 +9356,13 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + + promisify-child-process@4.1.2: + resolution: {integrity: sha512-APnkIgmaHNJpkAn7k+CrJSi9WMuff5ctYFbD0CO2XIPkM8yO7d/ShouU2clywbpHV/DUsyc4bpJCsNgddNtx4g==} + engines: {node: '>=8'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -8681,6 +9405,10 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} + qs@6.15.0: + resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} + engines: {node: '>=0.6'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -8694,6 +9422,10 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, tarball: https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz} + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -8702,6 +9434,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + rc-align@4.0.15: resolution: {integrity: sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==, tarball: https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz} peerDependencies: @@ -9094,6 +9830,12 @@ packages: '@types/react': optional: true + react-simple-code-editor@0.14.1: + resolution: {integrity: sha512-BR5DtNRy+AswWJECyA17qhUDvrrCZ6zXOCfkQY5zSmb96BVUbpVAv03WpcjcwtCwiLbIANx3gebHOcXYn1EHow==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -9140,6 +9882,9 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -9148,6 +9893,13 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + reconnecting-websocket@4.4.0: + resolution: {integrity: sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==} + recursive-readdir@2.2.3: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} engines: {node: '>=6.0.0'} @@ -9238,6 +9990,9 @@ packages: resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==, tarball: https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz} engines: {node: '>= 4.0.0'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + reselect@4.1.8: resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} @@ -9320,6 +10075,38 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + rsocket-core@0.0.25: + resolution: {integrity: sha512-rKqT+Vku86fIW2hFlkIRz/ak4jvoxVIbVs00l299y6hEWEChWI6weyvrJvlqCQmzbvcmq0/ZEFXa8e5F/yZ8zQ==} + + rsocket-core@0.0.27: + resolution: {integrity: sha512-q/+8PY0BIPvwXb6jPsnKCdyUKFusrm4JDzWnxbW1Ywu2sG/suv28/+mHC7kRGtMnRsxsLAWnqsmI6EznTabItA==} + + rsocket-flowable@0.0.25: + resolution: {integrity: sha512-ZlMna0EP/ytS6WR3tvV1YfE0p5UN9S5x6sepZiwa8qwXlYHH9HqjAIs1N5hMp5FuxUpgIGrzTyCPcnji/NX1dw==} + + rsocket-flowable@0.0.27: + resolution: {integrity: sha512-I/1vETXP+qCfGFeMY8i+QLhyBpcEj0nDmWnP2vh7lDyOBNT9LjAiY6kigUzEHbfhoNe3vnJWYK6uCzxIsi622Q==} + + rsocket-tcp-client@0.0.25: + resolution: {integrity: sha512-NDvnhobNMGX78Bhc2NqbyODsv5w5KUmKLsCR1dCVMqhsEB1atB0B4d/wl3EgaIBskinKOH2t9AXl7ptDz6Cgfg==} + + rsocket-tcp-server@0.0.25: + resolution: {integrity: sha512-JFgrZH//5ViHgNqSjJnvApWyJ1jfVzQZZVXX3xOZFiYQuqsqVVl9poR+r03O5i9UM+amrliVQhIDaUBbfR6N9A==} + + rsocket-types@0.0.25: + resolution: {integrity: sha512-YSz0Ll9thEATVObc4CJ3+DD+nlfY/s7u2P7sdKJUhMxrBuMLOmUypweXguxUAi1D6UfOr+ZJaxek7K8rBiFT0w==} + + rsocket-types@0.0.27: + resolution: {integrity: sha512-88vgA+d31a6wW5YP63jQZ0CqZ3DALtH4oCbuMtIcNy28m1kDYGPZunhsnw+YC/XtjOqb5hKhn10ZQm7OK2xc1g==} + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -9392,6 +10179,10 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} @@ -9399,13 +10190,24 @@ packages: resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} engines: {node: '>=0.10.0'} + serialize-error@8.1.0: + resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} + engines: {node: '>=10'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==, tarball: https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz} + serve-handler@6.1.7: + resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} + serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -9425,6 +10227,9 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -9443,6 +10248,20 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + shx@0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + engines: {node: '>=6'} + hasBin: true + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -9533,6 +10352,9 @@ packages: space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + spawn-rx@5.1.2: + resolution: {integrity: sha512-/y7tJKALVZ1lPzeZZB9jYnmtrL7d0N2zkorii5a7r7dhHkWIuLTzZpZzMJLK1dmYRgX/NCc4iarTO3F7BS2c/A==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -9545,6 +10367,13 @@ packages: spdx-license-ids@3.0.22: resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -9565,6 +10394,10 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} @@ -10005,6 +10838,10 @@ packages: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz} engines: {node: '>=10'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -10029,6 +10866,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -10079,6 +10920,10 @@ packages: u3@0.1.1: resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==} + ua-parser-js@1.0.41: + resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} + hasBin: true + ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -10374,6 +11219,10 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, tarball: https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -10512,6 +11361,26 @@ packages: utf-8-validate: optional: true + ws@8.6.0: + resolution: {integrity: sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + xdg-basedir@4.0.0: + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -10519,6 +11388,10 @@ packages: y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -10533,10 +11406,18 @@ packages: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yarn@1.22.22: resolution: {integrity: sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==} engines: {node: '>=4.0.0'} @@ -10557,6 +11438,18 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} + peerDependencies: + zod: ^3.25.28 || ^4 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -13906,6 +14799,10 @@ snapshots: '@floating-ui/utils@0.2.10': {} + '@hono/node-server@1.19.12(hono@4.12.9)': + dependencies: + hono: 4.12.9 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -13917,6 +14814,8 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@iarna/toml@2.2.5': {} + '@icons/material@0.2.4(react@18.3.1)': dependencies: react: 18.3.1 @@ -14220,33 +15119,162 @@ snapshots: '@marijn/find-cluster-break@1.0.2': {} + '@mcp-ui/client@6.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@modelcontextprotocol/ext-apps': 1.4.0(@modelcontextprotocol/sdk@1.29.0(zod@3.25.76))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + '@mdx-js/react@2.3.0(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 '@types/react': 18.3.24 react: 18.3.1 - '@monaco-editor/loader@1.5.0': - dependencies: - state-local: 1.0.7 - - '@monaco-editor/react@4.7.0(monaco-editor@0.55.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modelcontextprotocol/ext-apps@1.4.0(@modelcontextprotocol/sdk@1.29.0(zod@3.25.76))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76)': dependencies: - '@monaco-editor/loader': 1.5.0 - monaco-editor: 0.55.1 + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + zod: 3.25.76 + optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@ndelangen/get-tarball@3.0.9': + '@modelcontextprotocol/inspector-cli@0.21.1(zod@3.25.76)': dependencies: - gunzip-maybe: 1.4.2 - pump: 3.0.3 - tar-fs: 2.1.4 + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + commander: 13.1.0 + express: 5.2.1 + spawn-rx: 5.1.2 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + - zod - '@nodelib/fs.scandir@2.1.5': + '@modelcontextprotocol/inspector-client@0.21.1(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@mcp-ui/client': 6.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modelcontextprotocol/ext-apps': 1.4.0(@modelcontextprotocol/sdk@1.29.0(zod@3.25.76))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-icons': 1.3.2(react@18.3.1) + '@radix-ui/react-label': 2.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': 2.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-switch': 1.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toast': 1.2.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + ajv: 6.12.6 + class-variance-authority: 0.7.1 + clsx: 2.1.1 + cmdk: 1.1.1(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + lucide-react: 0.523.0(react@18.3.1) + pkce-challenge: 4.1.0 + prismjs: 1.30.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-simple-code-editor: 0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + serve-handler: 6.1.7 + tailwind-merge: 2.6.0 + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@types/react' + - '@types/react-dom' + - supports-color + + '@modelcontextprotocol/inspector-server@0.21.1': + dependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + cors: 2.8.6 + express: 5.2.1 + express-rate-limit: 8.3.2(express@5.2.1) + shell-quote: 1.8.3 + shx: 0.3.4 + spawn-rx: 5.1.2 + ws: 8.18.3 + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - bufferutil + - supports-color + - utf-8-validate + + '@modelcontextprotocol/inspector@0.21.1(@swc/core@1.3.74)(@types/node@24.5.2)(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(typescript@5.8.3)': + dependencies: + '@modelcontextprotocol/inspector-cli': 0.21.1(zod@3.25.76) + '@modelcontextprotocol/inspector-client': 0.21.1(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24) + '@modelcontextprotocol/inspector-server': 0.21.1 + '@modelcontextprotocol/sdk': 1.29.0(zod@3.25.76) + concurrently: 9.2.1 + node-fetch: 3.3.2 + open: 10.2.0 + shell-quote: 1.8.3 + spawn-rx: 5.1.2 + ts-node: 10.9.2(@swc/core@1.3.74)(@types/node@24.5.2)(typescript@5.8.3) + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - typescript + - utf-8-validate + + '@modelcontextprotocol/sdk@1.29.0(zod@3.25.76)': + dependencies: + '@hono/node-server': 1.19.12(hono@4.12.9) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 8.3.2(express@5.2.1) + hono: 4.12.9 + jose: 6.2.2 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.2(zod@3.25.76) + transitivePeerDependencies: + - supports-color + + '@monaco-editor/loader@1.5.0': + dependencies: + state-local: 1.0.7 + + '@monaco-editor/react@4.7.0(monaco-editor@0.55.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@monaco-editor/loader': 1.5.0 + monaco-editor: 0.55.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@ndelangen/get-tarball@3.0.9': + dependencies: + gunzip-maybe: 1.4.2 + pump: 3.0.3 + tar-fs: 2.1.4 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 '@nodelib/fs.stat@2.0.5': {} @@ -15223,6 +16251,8 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 + '@radix-ui/number@1.1.1': {} + '@radix-ui/primitive@1.0.1': dependencies: '@babel/runtime': 7.28.4 @@ -15239,6 +16269,31 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15290,6 +16345,28 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 + '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-direction@1.0.1(@types/react@18.3.24)(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15317,6 +16394,19 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.24)(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15324,6 +16414,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 + '@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.24)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15336,6 +16432,21 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-icons@1.3.2(react@18.3.1)': + dependencies: + react: 18.3.1 + '@radix-ui/react-id@1.0.1(@types/react@18.3.24)(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15360,6 +16471,29 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-popover@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-popper@1.1.2(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15379,6 +16513,24 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-popper@1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-portal@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15389,6 +16541,26 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15455,6 +16627,35 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-select@2.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-separator@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -15479,6 +16680,57 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 + '@radix-ui/react-switch@1.2.6(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-toast@1.2.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.3 @@ -15520,6 +16772,26 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.24)(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15564,6 +16836,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.24)(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15584,6 +16863,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 + '@radix-ui/react-use-previous@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.24)(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15592,6 +16877,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 + '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + '@radix-ui/react-use-size@1.0.1(@types/react@18.3.24)(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15600,6 +16892,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 + '@radix-ui/react-use-size@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -15610,10 +16909,21 @@ snapshots: '@types/react': 18.3.24 '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + '@radix-ui/rect@1.0.1': dependencies: '@babel/runtime': 7.28.4 + '@radix-ui/rect@1.1.1': {} + '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.28.4 @@ -16170,7 +17480,7 @@ snapshots: '@storybook/client-logger': 7.6.17 '@storybook/core-events': 7.6.17 '@storybook/global': 5.0.0 - qs: 6.14.0 + qs: 6.15.0 telejson: 7.2.0 tiny-invariant: 1.3.3 @@ -16468,7 +17778,7 @@ snapshots: dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.14.0 + qs: 6.15.0 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -16552,13 +17862,13 @@ snapshots: dependencies: '@storybook/client-logger': 7.6.17 memoizerific: 1.11.3 - qs: 6.14.0 + qs: 6.15.0 '@storybook/router@7.6.20': dependencies: '@storybook/client-logger': 7.6.20 memoizerific: 1.11.3 - qs: 6.14.0 + qs: 6.15.0 '@storybook/telemetry@7.6.20': dependencies: @@ -16996,6 +18306,10 @@ snapshots: '@types/wrap-ansi@3.0.0': {} + '@types/ws@8.18.1': + dependencies: + '@types/node': 24.5.2 + '@types/yargs-parser@21.0.3': {} '@types/yargs@15.0.19': @@ -17391,6 +18705,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + acorn-import-phases@1.0.4(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -17413,6 +18732,26 @@ snapshots: acorn@8.15.0: {} + adbkit-logcat@1.1.0: {} + + adbkit-logcat@2.0.1: {} + + adbkit-monkey@1.0.1: + dependencies: + async: 0.2.10 + + adbkit@2.11.1: + dependencies: + adbkit-logcat: 1.1.0 + adbkit-monkey: 1.0.1 + bluebird: 2.9.34 + commander: 2.20.3 + debug: 2.6.9 + node-forge: 0.7.6 + split: 0.3.3 + transitivePeerDependencies: + - supports-color + address@1.2.2: {} agent-base@5.1.1: {} @@ -17436,6 +18775,10 @@ snapshots: optionalDependencies: ajv: 8.17.1 + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: ajv: 8.17.1 @@ -17558,6 +18901,42 @@ snapshots: app-root-dir@1.0.2: {} + archiver-utils@2.1.0: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + + archiver-utils@3.0.4: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + archiver@5.3.2: + dependencies: + archiver-utils: 2.1.0 + async: 3.2.6 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 + arg@4.1.3: {} argparse@1.0.10: @@ -17651,6 +19030,8 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + asap@2.0.6: {} + assert@2.1.0: dependencies: call-bind: 1.0.8 @@ -17677,12 +19058,18 @@ snapshots: async-limiter@1.0.1: {} + async-mutex@0.3.2: + dependencies: + tslib: 2.8.1 + async-retry@1.3.3: dependencies: retry: 0.13.1 async-validator@4.2.5: {} + async@0.2.10: {} + async@3.2.6: {} asynckit@0.4.0: {} @@ -17725,6 +19112,12 @@ snapshots: transitivePeerDependencies: - debug + axios@0.26.1: + dependencies: + follow-redirects: 1.15.11 + transitivePeerDependencies: + - debug + babel-core@7.0.0-bridge.0(@babel/core@7.28.4): dependencies: '@babel/core': 7.28.4 @@ -17833,6 +19226,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bluebird@2.9.34: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -17850,6 +19245,20 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.2.2: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3(supports-color@8.1.1) + http-errors: 2.0.1 + iconv-lite: 0.7.0 + on-finished: 2.4.1 + qs: 6.15.0 + raw-body: 3.0.2 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + bottleneck@2.19.5: {} bowser@2.12.1: {} @@ -17917,6 +19326,8 @@ snapshots: buffer-crc32@0.2.13: {} + buffer-equal-constant-time@1.0.1: {} + buffer-fill@1.0.0: {} buffer-from@1.1.2: {} @@ -17926,11 +19337,17 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + bundle-require@5.1.0(esbuild@0.25.10): dependencies: esbuild: 0.25.10 load-tsconfig: 0.2.5 + bytes@3.0.0: {} + bytes@3.1.2: {} cac@6.7.14: {} @@ -18169,6 +19586,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 @@ -18183,6 +19606,18 @@ snapshots: clsx@2.1.1: {} + cmdk@1.1.1(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + codemirror@6.0.2: dependencies: '@codemirror/autocomplete': 6.18.7 @@ -18240,6 +19675,8 @@ snapshots: table-layout: 1.0.2 typical: 5.2.0 + commander@13.1.0: {} + commander@2.13.0: {} commander@2.20.3: {} @@ -18252,6 +19689,13 @@ snapshots: commondir@1.0.1: {} + compress-commons@4.1.2: + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + compressible@2.0.18: dependencies: mime-db: 1.54.0 @@ -18281,6 +19725,15 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 + concurrently@9.2.1: + dependencies: + chalk: 4.1.2 + rxjs: 7.8.2 + shell-quote: 1.8.3 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + confbox@0.1.8: {} config-chain@1.1.13: @@ -18305,10 +19758,14 @@ snapshots: tslib: 2.8.1 upper-case: 2.0.2 + content-disposition@0.5.2: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.1: {} + content-type@1.0.5: {} convert-source-map@1.9.0: {} @@ -18317,6 +19774,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + cookie@0.7.1: {} copy-to-clipboard@3.3.3: @@ -18329,6 +19788,11 @@ snapshots: core-util-is@1.0.3: {} + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cosmiconfig@5.2.1: dependencies: import-fresh: 2.0.0 @@ -18352,6 +19816,13 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 + crc-32@1.2.2: {} + + crc32-stream@4.0.3: + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + create-require@1.1.1: {} crelt@1.0.6: {} @@ -18378,6 +19849,8 @@ snapshots: csstype@3.1.3: {} + data-uri-to-buffer@4.0.1: {} + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -18496,6 +19969,13 @@ snapshots: bplist-parser: 0.2.0 untildify: 4.0.0 + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + defaults@1.0.4: dependencies: clone: 1.0.4 @@ -18510,6 +19990,8 @@ snapshots: define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -18636,6 +20118,10 @@ snapshots: ebnf@1.9.1: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + ee-first@1.1.1: {} ejs@3.1.10: @@ -19210,6 +20696,12 @@ snapshots: events@3.3.0: {} + eventsource-parser@3.0.6: {} + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.0.6 + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -19222,8 +20714,15 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + exit-hook@2.2.1: {} + expect-type@1.2.2: {} + express-rate-limit@8.3.2(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.1.0 + express@4.21.2: dependencies: accepts: 1.3.8 @@ -19260,6 +20759,39 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.2 + content-disposition: 1.0.1 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.2.2 + debug: 4.4.3(supports-color@8.1.1) + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.15.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + extend@3.0.2: {} extract-stack@2.0.0: {} @@ -19311,6 +20843,20 @@ snapshots: dependencies: bser: 2.1.1 + fbjs-css-vars@1.0.2: {} + + fbjs@3.0.5: + dependencies: + cross-fetch: 3.2.0 + fbjs-css-vars: 1.0.2 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 1.0.41 + transitivePeerDependencies: + - encoding + fd-slicer@1.1.0: dependencies: pend: 1.2.0 @@ -19319,6 +20865,11 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fetch-retry@5.0.6: {} figures@2.0.0: @@ -19333,6 +20884,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-stream-rotator@0.6.1: + dependencies: + moment: 2.30.1 + file-system-cache@2.3.0: dependencies: fs-extra: 11.1.1 @@ -19376,6 +20931,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.1: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + find-cache-dir@2.1.0: dependencies: commondir: 1.0.1 @@ -19433,13 +20999,37 @@ snapshots: dependencies: uuid: 8.3.2 - flipper-pkg-lib@0.212.0(patch_hash=663409f34b29aa343185d69669e0de3b6cea83783d25f46a1ec4b747359a44f3): + flipper-common@0.273.0: + dependencies: + uuid: 8.3.2 + + flipper-pkg-lib@0.212.0(patch_hash=663409f34b29aa343185d69669e0de3b6cea83783d25f46a1ec4b747359a44f3): + dependencies: + chalk: 4.1.2 + esbuild: 0.15.18 + fb-watchman: 2.0.2 + flipper-common: 0.212.0 + flipper-plugin-lib: 0.212.0 + fs-extra: 11.3.2 + metro: 0.70.4 + metro-cache: 0.70.4 + metro-minify-terser: 0.75.1 + npm-packlist: 4.0.0 + p-map: 4.0.0 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - supports-color + - utf-8-validate + + flipper-pkg-lib@0.273.0(patch_hash=663409f34b29aa343185d69669e0de3b6cea83783d25f46a1ec4b747359a44f3): dependencies: chalk: 4.1.2 esbuild: 0.15.18 fb-watchman: 2.0.2 - flipper-common: 0.212.0 - flipper-plugin-lib: 0.212.0 + flipper-common: 0.273.0 + flipper-plugin-lib: 0.273.0 fs-extra: 11.3.2 metro: 0.70.4 metro-cache: 0.70.4 @@ -19509,6 +21099,25 @@ snapshots: - encoding - supports-color + flipper-plugin-lib@0.273.0: + dependencies: + algoliasearch: 4.25.2 + decompress: 4.2.1 + decompress-targz: 4.1.1 + decompress-unzip: 4.0.1 + flipper-common: 0.273.0 + fs-extra: 11.3.2 + live-plugin-manager: 0.17.1 + npm-api: 1.0.1 + p-filter: 2.1.0 + p-map: 4.0.0 + semver: 7.7.2 + tmp: 0.2.5 + transitivePeerDependencies: + - debug + - encoding + - supports-color + flipper-plugin@0.212.0(@ant-design/icons@4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@testing-library/dom@9.3.4)(antd@4.24.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@ant-design/colors': 6.0.0 @@ -19536,6 +21145,66 @@ snapshots: - react-dom - supports-color + flipper-server-client@0.273.0: + dependencies: + eventemitter3: 4.0.7 + flipper-common: 0.273.0 + reconnecting-websocket: 4.4.0 + + flipper-server@0.273.0: + dependencies: + '@iarna/toml': 2.2.5 + JSONStream: 1.3.5 + adbkit: 2.11.1 + adbkit-logcat: 2.0.1 + archiver: 5.3.2 + async-mutex: 0.3.2 + axios: 0.26.1 + chalk: 4.1.2 + envinfo: 7.14.0 + exit-hook: 2.2.1 + express: 4.21.2 + fb-watchman: 2.0.2 + file-stream-rotator: 0.6.1 + flipper-common: 0.273.0 + flipper-pkg-lib: 0.273.0(patch_hash=663409f34b29aa343185d69669e0de3b6cea83783d25f46a1ec4b747359a44f3) + flipper-plugin-lib: 0.273.0 + form-data: 4.0.4 + fs-extra: 11.3.2 + http-proxy: 1.18.1 + immer: 9.0.21 + invariant: 2.2.4 + js-base64: 3.7.8 + jsonwebtoken: 9.0.3 + lodash.memoize: 4.1.2 + memorystream: 0.3.1 + metro: 0.70.4 + node-fetch: 2.7.0 + node-forge: 0.10.0 + open: 8.4.2 + openssl-wrapper: 0.3.4 + p-filter: 2.1.0 + promisify-child-process: 4.1.2 + reconnecting-websocket: 4.4.0 + rimraf: 3.0.2 + rsocket-core: 0.0.27 + rsocket-flowable: 0.0.27 + rsocket-tcp-server: 0.0.25 + rsocket-types: 0.0.25 + semver: 7.7.2 + serialize-error: 8.1.0 + split2: 4.2.0 + tmp: 0.2.5 + ws: 8.6.0 + xdg-basedir: 4.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - supports-color + - utf-8-validate + flow-bin@0.118.0: {} flow-parser@0.284.0: {} @@ -19569,6 +21238,10 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + forwarded@0.2.0: {} fp-ts@2.16.11: {} @@ -19589,6 +21262,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + fromentries@1.3.2: {} fs-constants@1.0.0: {} @@ -19870,6 +21545,8 @@ snapshots: dependencies: react-is: 16.13.1 + hono@4.12.9: {} + hosted-git-info@2.8.9: {} hosted-git-info@7.0.2: @@ -19901,6 +21578,22 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + http-proxy@1.18.1: + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.11 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 @@ -20009,6 +21702,8 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + interpret@1.4.0: {} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 @@ -20017,6 +21712,8 @@ snapshots: dependencies: fp-ts: 2.16.11 + ip-address@10.1.0: {} + ipaddr.js@1.9.1: {} is-absolute-url@3.0.3: {} @@ -20078,6 +21775,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: @@ -20099,6 +21798,10 @@ snapshots: is-gzip@1.0.0: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-interactive@1.0.0: {} is-map@2.0.3: {} @@ -20133,6 +21836,8 @@ snapshots: is-plain-object@5.0.0: {} + is-promise@4.0.0: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -20186,6 +21891,10 @@ snapshots: dependencies: is-docker: 2.2.1 + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + isarray@1.0.0: {} isarray@2.0.5: {} @@ -20334,6 +22043,8 @@ snapshots: jiti@2.5.1: {} + jose@6.2.2: {} + joycon@3.1.1: {} js-base64@3.7.8: {} @@ -20398,6 +22109,8 @@ snapshots: json-schema-traverse@1.0.0: {} + json-schema-typed@8.0.2: {} + json-source-map@0.6.1: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -20426,6 +22139,19 @@ snapshots: jsonparse@1.3.1: {} + jsonwebtoken@9.0.3: + dependencies: + jws: 4.0.1 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.7.2 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.9 @@ -20433,6 +22159,17 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.1: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -20461,6 +22198,10 @@ snapshots: dotenv: 16.6.1 dotenv-expand: 10.0.0 + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + leven@3.1.0: {} levn@0.4.1: @@ -20573,12 +22314,34 @@ snapshots: lodash.debounce@4.0.8: {} + lodash.defaults@4.2.0: {} + + lodash.difference@4.5.0: {} + + lodash.flatten@4.4.0: {} + lodash.get@4.4.2: {} + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.memoize@4.1.2: {} + lodash.merge@4.6.2: {} lodash.mergewith@4.6.2: {} + lodash.once@4.1.1: {} + lodash.sortby@4.7.0: {} lodash.template@4.5.0: @@ -20592,6 +22355,8 @@ snapshots: lodash.throttle@4.1.1: {} + lodash.union@4.6.0: {} + lodash@4.17.21: {} log-symbols@4.1.0: @@ -20630,6 +22395,10 @@ snapshots: dependencies: react: 18.3.1 + lucide-react@0.523.0(react@18.3.1): + dependencies: + react: 18.3.1 + lz-string@1.5.0: {} magic-string@0.27.0: @@ -20781,14 +22550,20 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memoize-one@3.1.1: {} memoizerific@1.11.3: dependencies: map-or-similar: 1.5.0 + memorystream@0.3.1: {} + merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -21216,14 +22991,24 @@ snapshots: microseconds@0.2.0: {} + mime-db@1.33.0: {} + mime-db@1.52.0: {} mime-db@1.54.0: {} + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mime@2.6.0: {} @@ -21244,6 +23029,10 @@ snapshots: dependencies: brace-expansion: 1.1.12 + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.12 + minimatch@5.1.6: dependencies: brace-expansion: 2.0.2 @@ -21329,6 +23118,8 @@ snapshots: negotiator@0.6.4: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} nested-error-stacks@2.0.1: {} @@ -21340,7 +23131,9 @@ snapshots: node-dir@0.1.17: dependencies: - minimatch: 3.1.2 + minimatch: 3.1.5 + + node-domexception@1.0.0: {} node-fetch-native@1.6.7: {} @@ -21352,6 +23145,16 @@ snapshots: dependencies: whatwg-url: 5.0.0 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-forge@0.10.0: {} + + node-forge@0.7.6: {} + node-int64@0.4.0: {} node-releases@2.0.21: {} @@ -21517,12 +23320,21 @@ snapshots: dependencies: mimic-fn: 2.1.0 + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + openssl-wrapper@0.3.4: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -21664,6 +23476,8 @@ snapshots: path-is-absolute@1.0.1: {} + path-is-inside@1.0.2: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -21675,6 +23489,10 @@ snapshots: path-to-regexp@0.1.12: {} + path-to-regexp@3.3.0: {} + + path-to-regexp@8.4.2: {} + path-type@3.0.0: dependencies: pify: 3.0.0 @@ -21713,6 +23531,10 @@ snapshots: pirates@4.0.7: {} + pkce-challenge@4.1.0: {} + + pkce-challenge@5.0.1: {} + pkg-conf@2.1.0: dependencies: find-up: 2.1.0 @@ -21788,12 +23610,20 @@ snapshots: dependencies: parse-ms: 2.1.0 + prismjs@1.30.0: {} + process-nextick-args@2.0.1: {} process@0.11.10: {} progress@2.0.3: {} + promise@7.3.1: + dependencies: + asap: 2.0.6 + + promisify-child-process@4.1.2: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -21857,6 +23687,10 @@ snapshots: dependencies: side-channel: 1.1.0 + qs@6.15.0: + dependencies: + side-channel: 1.1.0 + queue-microtask@1.2.3: {} quick-lru@5.1.1: {} @@ -21867,6 +23701,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + range-parser@1.2.0: {} + range-parser@1.2.1: {} raw-body@2.5.2: @@ -21876,6 +23712,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.0 + unpipe: 1.0.0 + rc-align@4.0.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.28.4 @@ -22395,6 +24238,11 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 + react-simple-code-editor@0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-style-singleton@2.2.3(@types/react@18.3.24)(react@18.3.1): dependencies: get-nonce: 1.0.1 @@ -22453,6 +24301,10 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + readdirp@4.1.2: {} recast@0.23.11: @@ -22463,6 +24315,12 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 + rechoir@0.6.2: + dependencies: + resolve: 1.22.10 + + reconnecting-websocket@4.4.0: {} + recursive-readdir@2.2.3: dependencies: minimatch: 3.1.2 @@ -22578,6 +24436,8 @@ snapshots: rc: 1.2.8 resolve: 1.7.1 + requires-port@1.0.0: {} + reselect@4.1.8: {} resize-observer-polyfill@1.5.1: {} @@ -22666,6 +24526,69 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.50.2 fsevents: 2.3.3 + router@2.2.0: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color + + rsocket-core@0.0.25: + dependencies: + fbjs: 3.0.5 + rsocket-flowable: 0.0.25 + rsocket-types: 0.0.25 + transitivePeerDependencies: + - encoding + + rsocket-core@0.0.27: + dependencies: + rsocket-flowable: 0.0.27 + rsocket-types: 0.0.27 + + rsocket-flowable@0.0.25: + dependencies: + fbjs: 3.0.5 + transitivePeerDependencies: + - encoding + + rsocket-flowable@0.0.27: {} + + rsocket-tcp-client@0.0.25: + dependencies: + fbjs: 3.0.5 + rsocket-core: 0.0.25 + rsocket-flowable: 0.0.25 + rsocket-types: 0.0.25 + transitivePeerDependencies: + - encoding + + rsocket-tcp-server@0.0.25: + dependencies: + fbjs: 3.0.5 + rsocket-core: 0.0.25 + rsocket-flowable: 0.0.25 + rsocket-tcp-client: 0.0.25 + rsocket-types: 0.0.25 + transitivePeerDependencies: + - encoding + + rsocket-types@0.0.25: + dependencies: + fbjs: 3.0.5 + rsocket-flowable: 0.0.25 + transitivePeerDependencies: + - encoding + + rsocket-types@0.0.27: + dependencies: + rsocket-flowable: 0.0.27 + + run-applescript@7.1.0: {} + run-async@2.4.1: {} run-parallel@1.2.0: @@ -22755,6 +24678,22 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.2.1: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + sentence-case@3.0.4: dependencies: no-case: 3.0.4 @@ -22763,10 +24702,24 @@ snapshots: serialize-error@2.1.0: {} + serialize-error@8.1.0: + dependencies: + type-fest: 0.20.2 + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 + serve-handler@6.1.7: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.5 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -22776,6 +24729,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + set-blocking@2.0.0: {} set-function-length@1.2.2: @@ -22804,6 +24766,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + setimmediate@1.0.5: {} + setprototypeof@1.2.0: {} shallow-clone@3.0.1: @@ -22818,6 +24782,19 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.3: {} + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + shx@0.3.4: + dependencies: + minimist: 1.2.8 + shelljs: 0.8.5 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -22915,6 +24892,13 @@ snapshots: space-separated-tokens@1.1.5: {} + spawn-rx@5.1.2: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + rxjs: 7.8.2 + transitivePeerDependencies: + - supports-color + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -22929,6 +24913,12 @@ snapshots: spdx-license-ids@3.0.22: {} + split2@4.2.0: {} + + split@0.3.3: + dependencies: + through: 2.3.8 + sprintf-js@1.0.3: {} stackback@0.0.2: {} @@ -22941,6 +24931,8 @@ snapshots: statuses@2.0.1: {} + statuses@2.0.2: {} + std-env@3.9.0: {} std-mocks@1.0.1: @@ -23443,6 +25435,8 @@ snapshots: type-fest@0.16.0: {} + type-fest@0.20.2: {} + type-fest@0.21.3: {} type-fest@0.3.1: {} @@ -23458,6 +25452,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.2 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -23516,6 +25516,8 @@ snapshots: u3@0.1.1: {} + ua-parser-js@1.0.41: {} + ufo@1.6.1: {} uglify-es@3.3.9: @@ -23826,6 +25828,8 @@ snapshots: dependencies: defaults: 1.0.4 + web-streams-polyfill@3.3.3: {} + webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {} @@ -23985,10 +25989,20 @@ snapshots: ws@8.18.3: {} + ws@8.6.0: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + + xdg-basedir@4.0.0: {} + xtend@4.0.2: {} y18n@4.0.3: {} + y18n@5.0.8: {} + yallist@3.1.1: {} yallist@4.0.0: {} @@ -24000,6 +26014,8 @@ snapshots: camelcase: 5.3.1 decamelize: 1.2.0 + yargs-parser@21.1.1: {} + yargs@15.4.1: dependencies: cliui: 6.0.0 @@ -24014,6 +26030,16 @@ snapshots: y18n: 4.0.3 yargs-parser: 18.1.3 + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yarn@1.22.22: {} yauzl@2.10.0: @@ -24027,4 +26053,16 @@ snapshots: yoctocolors-cjs@2.1.3: {} + zip-stream@4.1.1: + dependencies: + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.2 + + zod-to-json-schema@3.25.2(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod@3.25.76: {} + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fbcac08..ad2e969 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,6 +3,7 @@ packages: - docs/* - devtools/client - devtools/flipper-plugin + - devtools/mcp - devtools/plugin/core - devtools/plugin/react - devtools/plugins/basic/content