From ab81ad14e16ea9596be6f7fcfdf80f545d519c2b Mon Sep 17 00:00:00 2001 From: Moritz Schneider <9135566+bazumo@users.noreply.github.com> Date: Wed, 19 Mar 2025 11:49:39 -0700 Subject: [PATCH] Implement Model Context Protocol server poc (#552) ---- > [!IMPORTANT] > Introduces a new Model Context Protocol server with OpenAPI integration, updates build configurations, and adds necessary files for initial release. > > - **New MCP Server**: > - Implements MCP server in `src/index.ts` using `@modelcontextprotocol/sdk`. > - Handles tool requests with `ListToolsRequestSchema` and `CallToolRequestSchema`. > - Supports 40 endpoints, defined in `operationIDs`. > - **OpenAPI Integration**: > - Generates OpenAPI schema in `generate-openapi.ts` and writes to `mcp-server/openapi`. > - Converts OpenAPI parameters to JSON schema in `openapi-to-jsonschema.ts`. > - **Configuration and Build**: > - Adds `package.json` for MCP server with dependencies and scripts. > - Configures ESLint in `.eslintrc.cjs`. > - Updates `Dockerfile` and `turbo.json` to include MCP server in build process. > - **Miscellaneous**: > - Adds `.gitignore` for OpenAPI JSON files. > - Initial release noted in `CHANGELOG.md`. > > This description was created by [Ellipsis](https://www.ellipsis.dev?ref=stack-auth%2Fstack-auth&utm_source=github&utm_medium=referral) for d0970c40592b9d871be29d72ce267ff7ae67cb2c. It will automatically update as commits are pushed. --------- Co-authored-by: Konsti Wohlwend --- apps/backend/scripts/generate-openapi.ts | 7 +- apps/mcp-server/.eslintrc.cjs | 7 + apps/mcp-server/CHANGELOG.md | 5 + apps/mcp-server/openapi/.gitignore | 1 + apps/mcp-server/package.json | 29 ++ apps/mcp-server/src/index.ts | 227 +++++++++ .../src/utils/openapi-to-jsonschema.ts | 155 ++++++ apps/mcp-server/tsconfig.json | 37 ++ docker/server/Dockerfile | 2 +- pnpm-lock.yaml | 441 ++++++++++++++++-- turbo.json | 5 + 11 files changed, 885 insertions(+), 31 deletions(-) create mode 100644 apps/mcp-server/.eslintrc.cjs create mode 100644 apps/mcp-server/CHANGELOG.md create mode 100644 apps/mcp-server/openapi/.gitignore create mode 100644 apps/mcp-server/package.json create mode 100644 apps/mcp-server/src/index.ts create mode 100644 apps/mcp-server/src/utils/openapi-to-jsonschema.ts create mode 100644 apps/mcp-server/tsconfig.json diff --git a/apps/backend/scripts/generate-openapi.ts b/apps/backend/scripts/generate-openapi.ts index d56722a51..d8cd25992 100644 --- a/apps/backend/scripts/generate-openapi.ts +++ b/apps/backend/scripts/generate-openapi.ts @@ -15,7 +15,8 @@ async function main() { const filePathPrefix = path.resolve(process.platform === "win32" ? "apps/src/app/api/latest" : "src/app/api/latest"); const importPathPrefix = "@/app/api/latest"; const filePaths = [...await glob(filePathPrefix + "/**/route.{js,jsx,ts,tsx}")]; - const openAPISchema = yaml.stringify(parseOpenAPI({ + + const openApiSchemaObject = parseOpenAPI({ endpoints: new Map(await Promise.all(filePaths.map(async (filePath) => { if (!filePath.startsWith(filePathPrefix)) { throw new Error(`Invalid file path: ${filePath}`); @@ -32,7 +33,9 @@ async function main() { return [urlPath, handlersByMethod] as const; }))), audience, - })); + }); + const openAPISchema = yaml.stringify(openApiSchemaObject); + writeFileSyncIfChanged(`../mcp-server/openapi/${audience}.json`, JSON.stringify(openApiSchemaObject, null, 2)); writeFileSyncIfChanged(`../../docs/fern/openapi/${audience}.yaml`, openAPISchema); const webhookOpenAPISchema = yaml.stringify(parseWebhookOpenAPI({ diff --git a/apps/mcp-server/.eslintrc.cjs b/apps/mcp-server/.eslintrc.cjs new file mode 100644 index 000000000..28b80fbd2 --- /dev/null +++ b/apps/mcp-server/.eslintrc.cjs @@ -0,0 +1,7 @@ +module.exports = { + "extends": [ + "../../eslint-configs/defaults.js", + "../../eslint-configs/next.js", + ], + "ignorePatterns": ['/*', '!/src'] +}; diff --git a/apps/mcp-server/CHANGELOG.md b/apps/mcp-server/CHANGELOG.md new file mode 100644 index 000000000..de32365c4 --- /dev/null +++ b/apps/mcp-server/CHANGELOG.md @@ -0,0 +1,5 @@ +# @stackframe/mcp-server + +## 2.7.27 + +initial release diff --git a/apps/mcp-server/openapi/.gitignore b/apps/mcp-server/openapi/.gitignore new file mode 100644 index 000000000..a6c57f5fb --- /dev/null +++ b/apps/mcp-server/openapi/.gitignore @@ -0,0 +1 @@ +*.json diff --git a/apps/mcp-server/package.json b/apps/mcp-server/package.json new file mode 100644 index 000000000..850ba1d63 --- /dev/null +++ b/apps/mcp-server/package.json @@ -0,0 +1,29 @@ +{ + "name": "@stackframe/mcp-server", + "version": "2.7.27", + "private": true, + "type": "module", + "bin": { + "mcp-server": "./build/index.js" + }, + "scripts": { + "start": "tsx src/index.ts", + "dev-mcp-server": "tsx watch --clear-screen=false src/index.ts", + "typecheck": "tsc --noEmit", + "lint": "eslint .", + "clean": "rimraf build && rimraf node_modules && rimraf openapi/*.json", + "build": "tsc" + }, + "files": [ + "build" + ], + "dependencies": { + "@modelcontextprotocol/sdk": "^1.7.0", + "@stackframe/js": "workspace:*", + "openapi-types": "^12.1.3" + }, + "devDependencies": { + "@types/node": "^22.13.10", + "typescript": "^5.8.2" + } +} diff --git a/apps/mcp-server/src/index.ts b/apps/mcp-server/src/index.ts new file mode 100644 index 000000000..d059ec074 --- /dev/null +++ b/apps/mcp-server/src/index.ts @@ -0,0 +1,227 @@ +import { Server } from "@modelcontextprotocol/sdk/server/index.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { + CallToolRequestSchema, + ListToolsRequestSchema, + ListToolsResult +} from "@modelcontextprotocol/sdk/types.js"; +import { StackServerApp, stackAppInternalsSymbol } from "@stackframe/js"; +import { readFileSync } from "fs"; +import type { OpenAPIV3_1 } from 'openapi-types'; +import { convertParameterArrayToJsonSchema } from "./utils/openapi-to-jsonschema"; + + +const STACK_AUTH_URL = process.env.STACK_AUTH_URL ?? "https://api.stack-auth.com/"; +const STACK_SECRET_SERVER_KEY = process.env.STACK_SECRET_SERVER_KEY; +const STACK_PROJECT_ID = process.env.STACK_PROJECT_ID; +const STACK_PUBLISHABLE_CLIENT_KEY = process.env.STACK_PUBLISHABLE_CLIENT_KEY; + + +if (!STACK_SECRET_SERVER_KEY || !STACK_PROJECT_ID || !STACK_PUBLISHABLE_CLIENT_KEY) { + throw new Error("STACK_SECRET_SERVER_KEY, STACK_PROJECT_ID, and STACK_PUBLISHABLE_CLIENT_KEY must be set"); +} + +export const stackServerApp = new StackServerApp({ + baseUrl: STACK_AUTH_URL, + projectId: STACK_PROJECT_ID, + publishableClientKey: STACK_PUBLISHABLE_CLIENT_KEY, + secretServerKey: STACK_SECRET_SERVER_KEY, + tokenStore: "memory", +}); + +// Cursor only supports 40 endpoints, so we only expose the most useful tools +const operationIDs = { + "getUserById": ["/users/{user_id}", "get"], + "updateUser": ["/users/{user_id}", "patch"], + "deleteUser": ["/users/{user_id}", "delete"], + "listUsers": ["/users", "get"], + "createUser": ["/users", "post"], + "listTeams": ["/teams", "get"], + "createTeam": ["/teams", "post"], + "listTeamMemberProfiles": ["/team-member-profiles", "get"], + "getTeamById": ["/teams/{team_id}", "get"], + "updateTeam": ["/teams/{team_id}", "patch"], + "deleteTeam": ["/teams/{team_id}", "delete"], + "addUserToTeam": ["/team-memberships/{team_id}/{user_id}", "post"], + "removeUserFromTeam": ["/team-memberships/{team_id}/{user_id}", "delete"], + "getTeamMemberProfile": ["/team-member-profiles/{team_id}/{user_id}", "get"], + "updateTeamMemberProfile": ["/team-member-profiles/{team_id}/{user_id}", "patch"], + "sendTeamInvitationCode": ["/team-invitations/send-code", "post"], + "grantPermissionToUser": ["/team-permissions/{team_id}/{user_id}/{permission_id}", "post"], + "revokePermissionFromUser": ["/team-permissions/{team_id}/{user_id}/{permission_id}", "delete"], + "listTeamPermissions": ["/team-permissions", "get"], + "getContactChannel": ["/contact-channels/{user_id}/{contact_channel_id}", "get"], + "updateContactChannel": ["/contact-channels/{user_id}/{contact_channel_id}", "patch"], + "deleteContactChannel": ["/contact-channels/{user_id}/{contact_channel_id}", "delete"], + "listContactChannels": ["/contact-channels", "get"] +}; + +function getOpenAPISchema(): OpenAPIV3_1.Document { + return JSON.parse(readFileSync("./openapi/server.json", "utf8")); +} + +function isOperationObject(obj: any): obj is OpenAPIV3_1.OperationObject { + return obj !== null && typeof obj === 'object' && 'parameters' in obj; +} + + +function getOperationObject(openAPISchema: OpenAPIV3_1.Document, path: string, method: string): OpenAPIV3_1.OperationObject { + const pathItem = openAPISchema.paths?.[path]; + if (!pathItem) { + throw new Error(`Could not find path item ${path} in openAPI schema`); + } + const operation = pathItem[method as keyof typeof pathItem]; + if (!operation) { + throw new Error(`Could not find method ${method} in path item ${path} in openAPI schema`); + } + if (!isOperationObject(operation)) { + throw new Error(`Method ${method} in path ${path} is not an operation object`); + } + return operation; +} + +type ToolType = { + path: string, + method: string, + name: string, + description: string | undefined, + inputSchema: { + [x: string]: unknown, + type: "object", + properties?: { + [x: string]: unknown, + } | undefined, + }, +} + + +function getToolsFromOpenAPI(openAPISchema: OpenAPIV3_1.Document): ToolType[] { + const tools: ToolType[] = Object.entries(operationIDs).map(([operationID, [path, method]]) => { + const operation = getOperationObject(openAPISchema, path, method); + const inputSchema = !operation.parameters ? { + type: "object" as const, + properties: {}, + required: [], + } : convertParameterArrayToJsonSchema(operation.parameters, operation.requestBody); + + + return { + name: operationID, + description: operation.description, + inputSchema, + path, + method, + }; + }); + + return tools; +} + + +async function main() { + + const openAPISchema = getOpenAPISchema(); + const tools = getToolsFromOpenAPI(openAPISchema); + const transport = new StdioServerTransport(); + const version = (await import("../package.json", { assert: { type: "json" } })).default.version; + + // Create server instance + const server = new Server({ + name: "stackauth", + version, + }, { + capabilities: { + tools: {} + } + }); + + server.setRequestHandler(ListToolsRequestSchema, + (): ListToolsResult => ({ + tools + }) + ); + + server.setRequestHandler(CallToolRequestSchema, async (request) => { + const name = request.params.name; + const args = request.params.arguments ?? {}; + + const tool = tools.find(tool => tool.name === name); + + if (!tool) { + return { + isError: true, + content: [{ type: "text", text: `Tool ${name} not found` }], + }; + } + + const path = tool.path; + const method = tool.method.toUpperCase(); + + + // Split args into path and query parameters + const queryParams = new URLSearchParams(); + const pathParams: Record = {}; + + for (const [key, value] of Object.entries(args)) { + if (key.endsWith("###query")) { + const paramName = key.replace("###query", ""); + queryParams.append(paramName, String(value)); + } else if (key.endsWith("###path")) { + const paramName = key.replace("###path", ""); + pathParams[paramName] = String(value); + } + } + + // Replace path parameters + let finalPath = path; + for (const [key, value] of Object.entries(pathParams)) { + finalPath = finalPath.replace(`{${key}}`, value); + } + + // Add query string if we have query parameters + const queryString = queryParams.toString(); + if (queryString) { + finalPath += `?${queryString}`; + } + + let body: string | undefined; + let headers: Record | undefined; + // LIMITATION: we only support JSON body for now + if (args["###body###"] && typeof args["###body###"] === "string") { + body = args["###body###"]; + headers = { + "Content-Type": "application/json", + }; + } + + const result = await (stackServerApp as any)[stackAppInternalsSymbol].sendRequest(finalPath, { + method, + headers: { + // Hack to make api call as a server and not client, should probably create a new (internal) function for this + "x-stack-secret-server-key": STACK_SECRET_SERVER_KEY, + ...headers, + }, + body, + }, "server"); + + if (!result.ok) { + return { + isError: true, + content: [{ type: "text", text: `Error: ${result.status} ${await result.text()}` }], + }; + } + + return { + content: [{ type: "text", text: JSON.stringify(await result.json(), null, 2) }], + }; + + + }); + + await server.connect(transport); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/apps/mcp-server/src/utils/openapi-to-jsonschema.ts b/apps/mcp-server/src/utils/openapi-to-jsonschema.ts new file mode 100644 index 000000000..9f3cc236c --- /dev/null +++ b/apps/mcp-server/src/utils/openapi-to-jsonschema.ts @@ -0,0 +1,155 @@ +/** + * Type definitions for OpenAPI Parameter Object + */ +import type { OpenAPIV3_1 } from 'openapi-types'; + +/** + * Type definition for JSON Schema + */ +type JSONSchema = { + type: 'object', + properties: Record, + required?: string[], +} + +/** + * Type guard to check if an object is a ReferenceObject + * @param obj - Object to check + * @returns True if object is a ReferenceObject, false otherwise + */ +function isReferenceObject(obj: any): obj is OpenAPIV3_1.ReferenceObject { + return obj !== null && typeof obj === 'object' && '$ref' in obj; +} + + +/** + * Converts an OpenAPI Parameter Object Array to a JSON Schema + * @param parameterObjectArray - Array of OpenAPI Parameter Objects + * @returns JSON Schema representation of the parameters + */ +function convertParameterArrayToJsonSchema(parameterObjectArray: (OpenAPIV3_1.ParameterObject | OpenAPIV3_1.ReferenceObject)[], requestBody?: OpenAPIV3_1.RequestBodyObject | OpenAPIV3_1.ReferenceObject): { + type: "object", + properties: Record, + required: string[], +} { + if (!Array.isArray(parameterObjectArray)) { + throw new Error('Input must be an array of parameter objects'); + } + + + const properties = new Map(); + const requiredParams: string[] = []; + + parameterObjectArray.forEach(param => { + + if (isReferenceObject(param)) { + throw new Error('Reference objects are not supported'); + } + if (!param.name) { + throw new Error('Parameter object must have a name'); + } + + const newParamName = param.name + "###" + param.in; + + // Extract the schema from the parameter + let schema: Record = param.schema ? + (typeof param.schema === 'object' ? { ...param.schema } : {}) : + {}; + + // If the parameter has its own type/format, use those instead + if ('type' in param && param.type) { + schema.type = param.type; + } + if ('format' in param && param.format) { + schema.format = param.format; + } + + // Copy description if available + if (param.description) { + schema.description = param.description; + } + + // Copy example if available + if ('example' in param && param.example !== undefined) { + schema.example = param.example; + } + + // Handle enum values + if ('enum' in param && param.enum) { + schema.enum = param.enum; + } + + // Add default value if specified + if ('default' in param && param.default !== undefined) { + schema.default = param.default; + } + + // Add parameter to properties + properties.set(newParamName, schema); + + // Add to required array if necessary + if (param.required === true) { + requiredParams.push(newParamName); + } + }); + + if (requestBody) { + const body = handleRequestBody(requestBody); + if (body) { + properties.set("###body###", body.properties); + requiredParams.push("###body###"); + } + } + + // Convert Map back to Record for return type + const propertiesRecord: Record = {}; + properties.forEach((value, key) => { + propertiesRecord[key] = value; + }); + + const jsonSchema = { + type: 'object' as const, + properties: propertiesRecord, + required: requiredParams + }; + + + return jsonSchema; +} + +export { convertParameterArrayToJsonSchema }; +export type { JSONSchema }; + + +function handleRequestBody(requestBody: OpenAPIV3_1.RequestBodyObject | OpenAPIV3_1.ReferenceObject) { + + if (isReferenceObject(requestBody)) { + throw new Error('Reference objects are not supported'); + } + + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (!requestBody.content["application/json"]) { + throw new Error('Request body must be of type application/json'); + } + const body_schema = requestBody.content["application/json"].schema; + if (!body_schema || isReferenceObject(body_schema)) { + throw new Error('Reference objects are not supported'); + } + + if (!body_schema.properties) { + return; + } + + // We simplify the body into one property, called "body" + + return { + type: "string", + properties: { + body: JSON.stringify(body_schema) + }, + required: ["body"] + }; + + +} diff --git a/apps/mcp-server/tsconfig.json b/apps/mcp-server/tsconfig.json new file mode 100644 index 000000000..ecea5c293 --- /dev/null +++ b/apps/mcp-server/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "strict": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "noErrorTruncation": true, + "outDir": "./build", + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*" + ] + }, + "skipLibCheck": true + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/docker/server/Dockerfile b/docker/server/Dockerfile index 78c339387..b46f0d859 100644 --- a/docker/server/Dockerfile +++ b/docker/server/Dockerfile @@ -26,7 +26,7 @@ COPY . . RUN tsx ./scripts/generate-sdks.ts # https://turbo.build/repo/docs/guides/tools/docker -RUN turbo prune --scope=@stackframe/stack-backend --scope=@stackframe/stack-dashboard --docker +RUN turbo prune --scope=@stackframe/stack-backend --scope=@stackframe/stack-dashboard --scope=@stackframe/mcp-server --docker # Build stage diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dfdc94203..e7c49eebd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -255,7 +255,7 @@ importers: version: 5.0.7 tsup: specifier: ^8.3.0 - version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.15.5)(typescript@5.7.3)(yaml@2.4.5) + version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.15.5)(typescript@5.8.2)(yaml@2.4.5) tsx: specifier: ^4.7.2 version: 4.15.5 @@ -438,6 +438,25 @@ importers: specifier: ^1.2.1 version: 1.2.1 + apps/mcp-server: + dependencies: + '@modelcontextprotocol/sdk': + specifier: ^1.7.0 + version: 1.7.0 + '@stackframe/js': + specifier: workspace:* + version: link:../../packages/js + openapi-types: + specifier: ^12.1.3 + version: 12.1.3 + devDependencies: + '@types/node': + specifier: ^22.13.10 + version: 22.13.10 + typescript: + specifier: ^5.8.2 + version: 5.8.2 + apps/mock-oauth-server: dependencies: '@types/express': @@ -670,7 +689,7 @@ importers: version: 5.7.3 vite: specifier: ^6.1.0 - version: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0) + version: 6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0) examples/middleware: dependencies: @@ -766,7 +785,7 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0)) + version: 4.3.4(vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0)) eslint: specifier: ^9.19.0 version: 9.21.0(jiti@2.4.2) @@ -787,7 +806,7 @@ importers: version: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) vite: specifier: ^6.1.0 - version: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0) + version: 6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0) examples/supabase: dependencies: @@ -946,7 +965,7 @@ importers: version: 3.4.14 tsup: specifier: ^8.0.2 - version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.7.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.8.2)(yaml@2.6.0) packages/react: dependencies: @@ -1064,7 +1083,7 @@ importers: version: 3.4.14 tsup: specifier: ^8.0.2 - version: 8.4.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.6.0) + version: 8.4.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.8.2)(yaml@2.6.0) packages/stack: dependencies: @@ -1188,7 +1207,7 @@ importers: version: 3.4.14 tsup: specifier: ^8.0.2 - version: 8.1.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(postcss@8.4.47)(typescript@5.7.3) + version: 8.1.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(postcss@8.4.47)(typescript@5.8.2) packages/stack-emails: dependencies: @@ -1604,7 +1623,7 @@ importers: version: 3.4.14 tsup: specifier: ^8.0.2 - version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.7.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.8.2)(yaml@2.6.0) packages: @@ -3445,6 +3464,10 @@ packages: '@types/react': ^18.2.0 react: '>=16' + '@modelcontextprotocol/sdk@1.7.0': + resolution: {integrity: sha512-IYPe/FLpvF3IZrd/f5p5ffmWhMc3aEMuM2wGJASDqC2Ge7qatVCdbfPx3n/5xFeb19xN0j/911M2AaFuircsWA==} + engines: {node: '>=18'} + '@monaco-editor/loader@1.4.0': resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==} peerDependencies: @@ -6319,6 +6342,9 @@ packages: '@types/node@20.17.6': resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + '@types/node@22.13.5': resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} @@ -6664,6 +6690,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'} + accessor-fn@1.5.1: resolution: {integrity: sha512-zZpFYBqIL1Aqg+f2qmYHJ8+yIZF7/tP6PUGx2/QM0uGPSO5UegpinmkNwDohxWtOj586BpMPVRUjce2HI6xB3A==} engines: {node: '>=12'} @@ -6987,6 +7017,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.1.0: + resolution: {integrity: sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==} + engines: {node: '>=18'} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -7434,6 +7468,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -7447,6 +7485,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.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} @@ -7644,6 +7686,15 @@ packages: supports-color: optional: true + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -8308,6 +8359,14 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.0: + resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.5: + resolution: {integrity: sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==} + engines: {node: '>=18.0.0'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -8324,10 +8383,20 @@ packages: resolution: {integrity: sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg==} engines: {node: ^v12.20.0 || >=v14.13.0} + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.0.1: + resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} + engines: {node: '>= 18'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -8403,6 +8472,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} @@ -8495,6 +8568,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'} + fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} @@ -8885,6 +8962,10 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.5.2: + resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==} + engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -9134,6 +9215,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -9660,6 +9744,10 @@ 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'} + memfs-browser@3.5.10302: resolution: {integrity: sha512-JJTc/nh3ig05O0gBBGZjTCPOyydaTxNF0uHYBrcc1gHNnO+KIHIvo0Y1FKCJsaei6FCl8C6xfQomXqu+cuzkIw==} @@ -9674,6 +9762,10 @@ packages: 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==} @@ -9809,6 +9901,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + 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'} @@ -9817,6 +9913,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.0: + resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} + engines: {node: '>= 0.6'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -9972,6 +10072,10 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 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==} @@ -10218,6 +10322,10 @@ packages: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -10283,6 +10391,9 @@ packages: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -10431,6 +10542,10 @@ packages: path-to-regexp@6.2.2: resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -10487,6 +10602,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pkce-challenge@4.1.0: + resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==} + engines: {node: '>=16.20.0'} + pkg-types@1.2.1: resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} @@ -10719,6 +10838,10 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -10761,6 +10884,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -11145,6 +11272,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.1.0: + resolution: {integrity: sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==} + engines: {node: '>= 18'} + rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} @@ -11226,6 +11357,10 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + send@1.1.0: + resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} + engines: {node: '>= 18'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -11236,6 +11371,10 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + serve-static@2.1.0: + resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==} + engines: {node: '>= 18'} + serve@14.2.4: resolution: {integrity: sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ==} engines: {node: '>= 14'} @@ -11300,10 +11439,26 @@ packages: shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -12013,6 +12168,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.0: + resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -12051,6 +12210,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} @@ -12618,6 +12782,11 @@ packages: yup@1.4.0: resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==} + zod-to-json-schema@3.24.4: + resolution: {integrity: sha512-0uNlcvgabyrni9Ag8Vghj21drk7+7tp7VTwwR7KxxXXc/3pbXz2PHlDgj3cICahgF1kHm4dExBFj7BXrZJXzig==} + peerDependencies: + zod: ^3.24.1 + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -14273,6 +14442,20 @@ snapshots: '@types/react': 18.3.12 react: 18.3.1 + '@modelcontextprotocol/sdk@1.7.0': + dependencies: + content-type: 1.0.5 + cors: 2.8.5 + eventsource: 3.0.5 + express: 5.0.1 + express-rate-limit: 7.5.0(express@5.0.1) + pkce-challenge: 4.1.0 + raw-body: 3.0.0 + zod: 3.23.8 + zod-to-json-schema: 3.24.4(zod@3.23.8) + transitivePeerDependencies: + - supports-color + '@monaco-editor/loader@1.4.0(monaco-editor@0.52.2)': dependencies: monaco-editor: 0.52.2 @@ -17335,6 +17518,10 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@22.13.10': + dependencies: + undici-types: 6.20.0 + '@types/node@22.13.5': dependencies: undici-types: 6.20.0 @@ -17647,14 +17834,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0))': + '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0))': dependencies: '@babel/core': 7.26.9 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0) + vite: 6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0) transitivePeerDependencies: - supports-color @@ -17778,6 +17965,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.0 + negotiator: 1.0.0 + accessor-fn@1.5.1: {} acorn-import-attributes@1.9.5(acorn@8.14.0): @@ -18179,6 +18371,20 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.1.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.0 + http-errors: 2.0.0 + iconv-lite: 0.5.2 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.0 + transitivePeerDependencies: + - supports-color + boolbase@1.0.0: {} boxen@7.0.0: @@ -18657,6 +18863,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-type@1.0.5: {} convert-source-map@1.9.0: {} @@ -18665,6 +18875,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + cookie@0.4.2: {} cookie@0.6.0: {} @@ -18859,6 +19071,10 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.6: + dependencies: + ms: 2.1.2 + debug@4.3.7: dependencies: ms: 2.1.3 @@ -19435,8 +19651,8 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@8.30.0)(typescript@5.3.3) eslint: 8.30.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.30.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.30.0) eslint-plugin-react: 7.37.2(eslint@8.30.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.30.0) @@ -19517,13 +19733,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.30.0): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.30.0 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 @@ -19547,14 +19763,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.21.0(eslint@8.30.0)(typescript@5.3.3) eslint: 8.30.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.30.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0) transitivePeerDependencies: - supports-color @@ -19603,7 +19819,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -19614,7 +19830,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.30.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -19940,6 +20156,12 @@ snapshots: events@3.3.0: {} + eventsource-parser@3.0.0: {} + + eventsource@3.0.5: + dependencies: + eventsource-parser: 3.0.0 + execa@5.1.1: dependencies: cross-spawn: 7.0.5 @@ -19968,6 +20190,10 @@ snapshots: export-to-csv@1.4.0: {} + express-rate-limit@7.5.0(express@5.0.1): + dependencies: + express: 5.0.1 + express@4.21.2: dependencies: accepts: 1.3.8 @@ -20004,6 +20230,43 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.0.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.1.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.2.2 + debug: 4.3.6 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + methods: 1.1.2 + mime-types: 3.0.0 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + router: 2.1.0 + safe-buffer: 5.2.1 + send: 1.1.0 + serve-static: 2.1.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 2.0.0 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + extend@3.0.2: {} extendable-error@0.1.7: {} @@ -20074,6 +20337,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.0: + dependencies: + debug: 4.4.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + find-root@1.1.0: {} find-up@3.0.0: @@ -20153,6 +20427,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + fs-constants@1.0.0: {} fs-extra@11.2.0: @@ -20726,6 +21002,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.5.2: + dependencies: + safer-buffer: 2.1.2 + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -20943,6 +21223,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.6 @@ -21576,6 +21858,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memfs-browser@3.5.10302: dependencies: memfs: 3.5.3 @@ -21602,6 +21886,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -21896,6 +22182,8 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.53.0: {} + mime-types@2.1.18: dependencies: mime-db: 1.33.0 @@ -21904,6 +22192,10 @@ snapshots: dependencies: mime-db: 1.52.0 + mime-types@3.0.0: + dependencies: + mime-db: 1.53.0 + mime@1.6.0: {} mimic-fn@2.1.0: {} @@ -22018,6 +22310,8 @@ snapshots: negotiator@0.6.3: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} next-intl@3.19.1(next@14.2.5(@babel/core@7.26.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.2.0))(react@18.2.0))(react@18.3.1): @@ -22508,6 +22802,8 @@ snapshots: object-inspect@1.13.2: {} + object-inspect@1.13.4: {} + object-keys@1.1.1: {} object.assign@4.1.5: @@ -22600,6 +22896,8 @@ snapshots: is-inside-container: 1.0.0 is-wsl: 3.1.0 + openapi-types@12.1.3: {} + opener@1.5.2: {} openid-client@5.6.4(patch_hash=2gg7ly76yaettle5dlvkpcfpny): @@ -22755,6 +23053,8 @@ snapshots: path-to-regexp@6.2.2: {} + path-to-regexp@8.2.0: {} + path-type@4.0.0: {} path@0.12.7: @@ -22800,6 +23100,8 @@ snapshots: pirates@4.0.6: {} + pkce-challenge@4.1.0: {} + pkg-types@1.2.1: dependencies: confbox: 0.1.8 @@ -23107,6 +23409,10 @@ snapshots: dependencies: side-channel: 1.0.6 + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -23142,6 +23448,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -23734,6 +24047,12 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.8 fsevents: 2.3.3 + router@2.1.0: + dependencies: + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + rrweb-cssom@0.7.1: {} rsvp@3.2.1: {} @@ -23819,6 +24138,23 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.1.0: + dependencies: + debug: 4.4.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime-types: 2.1.35 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -23842,6 +24178,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.1.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.1.0 + transitivePeerDependencies: + - supports-color + serve@14.2.4: dependencies: '@zeit/schemas': 2.36.0 @@ -23969,6 +24314,26 @@ snapshots: shimmer@1.2.1: {} + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -23976,6 +24341,14 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -24713,7 +25086,7 @@ snapshots: tsscmp@1.0.6: {} - tsup@8.1.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(postcss@8.4.47)(typescript@5.7.3): + tsup@8.1.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(postcss@8.4.47)(typescript@5.8.2): dependencies: bundle-require: 4.2.1(esbuild@0.21.5) cac: 6.7.14 @@ -24732,12 +25105,12 @@ snapshots: optionalDependencies: '@swc/core': 1.3.101(@swc/helpers@0.5.15) postcss: 8.4.47 - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - ts-node - tsup@8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.7.3)(yaml@2.6.0): + tsup@8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.8.2)(yaml@2.6.0): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -24758,14 +25131,14 @@ snapshots: optionalDependencies: '@swc/core': 1.3.101(@swc/helpers@0.5.15) postcss: 8.4.47 - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - jiti - supports-color - tsx - yaml - tsup@8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.15.5)(typescript@5.7.3)(yaml@2.4.5): + tsup@8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.15.5)(typescript@5.8.2)(yaml@2.4.5): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -24786,7 +25159,7 @@ snapshots: optionalDependencies: '@swc/core': 1.3.101(@swc/helpers@0.5.15) postcss: 8.5.2 - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - jiti - supports-color @@ -24821,7 +25194,7 @@ snapshots: - tsx - yaml - tsup@8.4.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.6.0): + tsup@8.4.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.8.2)(yaml@2.6.0): dependencies: bundle-require: 5.1.0(esbuild@0.25.0) cac: 6.7.14 @@ -24842,7 +25215,7 @@ snapshots: optionalDependencies: '@swc/core': 1.3.101(@swc/helpers@0.5.15) postcss: 8.5.2 - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - jiti - supports-color @@ -24963,6 +25336,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.0: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.0 + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 @@ -25011,6 +25390,8 @@ snapshots: typescript@5.7.3: {} + typescript@5.8.2: {} + ufo@1.5.4: {} uglify-js@3.18.0: @@ -25314,13 +25695,13 @@ snapshots: tsx: 4.19.3 yaml: 2.6.0 - vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0): + vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0): dependencies: esbuild: 0.24.2 postcss: 8.5.2 rollup: 4.34.8 optionalDependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.10 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.1 @@ -25674,6 +26055,10 @@ snapshots: toposort: 2.0.2 type-fest: 2.19.0 + zod-to-json-schema@3.24.4(zod@3.23.8): + dependencies: + zod: 3.23.8 + zod@3.23.8: {} zustand@4.5.2(@types/react@18.3.12)(immer@9.0.21)(react@18.2.0): diff --git a/turbo.json b/turbo.json index b1df4fb9d..fd82db3a4 100644 --- a/turbo.json +++ b/turbo.json @@ -64,6 +64,11 @@ "@stackframe/stack-backend#build" ] }, + "@stackframe/mcp-server#build": { + "dependsOn": [ + "@stackframe/stack-backend#build" + ] + }, "@stackframe/stack-backend#build": { "dependsOn": [ "codegen"