diff --git a/.npmrc b/.npmrc
deleted file mode 100644
index cda6b55bb..000000000
--- a/.npmrc
+++ /dev/null
@@ -1,2 +0,0 @@
-//npm.pkg.github.com/:_authToken=${GITHUB_NPM_TOKEN}
-@zuplo:registry=https://npm.pkg.github.com
\ No newline at end of file
diff --git a/docs/ai/features.mdx b/docs/ai/features.mdx
new file mode 100644
index 000000000..0575da7e2
--- /dev/null
+++ b/docs/ai/features.mdx
@@ -0,0 +1,4 @@
+---
+title: Zuplo AI Features
+sidebar_label: Features
+---
diff --git a/docs/ai/gateway/apps.mdx b/docs/ai/gateway/apps.mdx
new file mode 100644
index 000000000..538386543
--- /dev/null
+++ b/docs/ai/gateway/apps.mdx
@@ -0,0 +1,10 @@
+---
+title: AI Gateway Apps
+sidebar_label: Overview
+---
+
+Apps are in the Zuplo AI Gateway represent any app or intergration that will
+call the AI Gateway. For example, you might have a custom support chatbot on
+your website - that chatbot would be an App in the AI Gateway. Each App has its
+own API Key so that usage is tracked independently. Apps are owned by a specific
+[team](./teams.mdx) and can access the AI Providers assigned to that team.
diff --git a/docs/ai/gateway/getting-started.mdx b/docs/ai/gateway/getting-started.mdx
new file mode 100644
index 000000000..6be1e2e41
--- /dev/null
+++ b/docs/ai/gateway/getting-started.mdx
@@ -0,0 +1,4 @@
+---
+title: Zuplo AI Gateway Getting Started
+sidebar_label: Getting Started
+---
diff --git a/docs/ai/gateway/information-architecture.mdx b/docs/ai/gateway/information-architecture.mdx
new file mode 100644
index 000000000..1436297a7
--- /dev/null
+++ b/docs/ai/gateway/information-architecture.mdx
@@ -0,0 +1,4 @@
+---
+title: AI Gateway Information Architecture
+sidebar_label: Information Architecture
+---
diff --git a/docs/ai/gateway/managing-providers.mdx b/docs/ai/gateway/managing-providers.mdx
new file mode 100644
index 000000000..00cde9787
--- /dev/null
+++ b/docs/ai/gateway/managing-providers.mdx
@@ -0,0 +1,65 @@
+---
+title: Managing AI Providers
+sidebar_label: Managing Providers
+---
+
+Zuplo's AI Gateway supports integration with various
+[AI providers](./providers.mdx), allowing you to leverage different models and
+services for your AI applications.
+
+## Adding a New AI Provider
+
+To add a new AI provider to your Zuplo AI Gateway, follow these steps:
+
+
+
+1. Navigate to the **Settings** > **AI Providers** section of your AI Gateway
+ project in the [Zuplo Portal](https://portal.zuplo.com).
+
+1. Click on the **Add Provider** button.
+
+1. Select the desired provider from the list of
+ [supported providers](./providers.mdx).
+
+1. Specify a label for the provider instance to easily identify it later. You
+ can change the label later if required.
+
+1. Enter the API Key for the selected provider. For instructions on how to
+ create an API key for each provider see the
+ [provider documentation](./providers.mdx).
+
+1. Select the model or models you want to use with this provider. The available
+ models will depend on the selected provider. This can be changed later.
+
+ :::tip
+
+ Click "Select All" to enable all models.
+
+ :::
+
+1. Click save
+
+
+
+## Editing an AI Provider
+
+Existing providers can be modified by navigating to the **Settings** > **AI
+Providers** section and clicking the **Edit** button next to the provider you
+want to modify.
+
+You can modify the label, API key, and selected models for the provider. After
+making your changes, click **Save** to apply them. Changes are effective
+immediately.
+
+:::caution
+
+Be careful removing models from an provider that is in use as it may break
+existing applications that rely on the provider.
+
+:::
+
+## Deleting an AI Provider
+
+Providers that are no longer used within your project can be deleted. To delete
+a provider, navigate to the **Settings** > **AI Providers** section and click
+the **Delete** button next to the provider you want to remove.
diff --git a/docs/ai/gateway/managing-teams.mdx b/docs/ai/gateway/managing-teams.mdx
new file mode 100644
index 000000000..d110db93a
--- /dev/null
+++ b/docs/ai/gateway/managing-teams.mdx
@@ -0,0 +1,63 @@
+---
+title: Managing Teams
+---
+
+Teams in the Zuplo AI Gateway are how users are granted access to AI Providers
+and Apps. Teams are hiearcical with access propogating downword. Teams are also
+where you define usage limits.
+
+## Creating a Team
+
+
+
+1. Navigate to the **Teams** tab of your AI Gateway project in the
+ [Zuplo Portal](https://portal.zuplo.com).
+
+1. Click on the **Create Team** button.
+
+1. Enter the name of your team.
+
+1. Click **Create**
+
+
+
+## Adding Team Members
+
+Team members are the users who belong to a team and can access the AI Providers
+and Apps associated with that team.
+
+
+
+1. Navigate to the **Teams** tab of your AI Gateway project in the
+ [Zuplo Portal](https://portal.zuplo.com).
+
+1. Select the team you want to add members to.
+
+1. Click the **Members** tab.
+
+1. Click **Add Member**.
+
+1. Type the email address of the user you want to add. If the user is already a
+ member of your Zuplo account they will be directly added to the team. If they
+ don't have an account, they will be invited to join the account and then
+ added to the team.
+
+1. Select the role for the user (if your plan supports RBAC). The available
+ roles are:
+ - **Member**: Can access AI Providers and Apps assigned to the team.
+ - **Admin**: Can manage team settings, members, and access AI Providers and
+ Apps assigned to the team.
+
+ :::note
+
+ RBAC is an optional enterprise add-on. For more information see the
+ [document on roles and permissions](../../articles/accounts/roles-and-permissions.mdx).
+
+ :::
+
+1. Click **Add Member** to confirm.
+
+1. The user will receive an email notification if they are being invited to the
+ Zuplo account.
+
+
diff --git a/docs/ai/gateway/overview.mdx b/docs/ai/gateway/overview.mdx
new file mode 100644
index 000000000..2d381cdac
--- /dev/null
+++ b/docs/ai/gateway/overview.mdx
@@ -0,0 +1,6 @@
+---
+title: Zuplo AI Gateway
+sidebar_label: Overview
+---
+
+Introduction
diff --git a/docs/ai/gateway/provider-anthropic.mdx b/docs/ai/gateway/provider-anthropic.mdx
new file mode 100644
index 000000000..a0bf3b971
--- /dev/null
+++ b/docs/ai/gateway/provider-anthropic.mdx
@@ -0,0 +1,4 @@
+---
+title: Anthropic Provider
+sidebar_label: Anthropic
+---
diff --git a/docs/ai/gateway/provider-google.mdx b/docs/ai/gateway/provider-google.mdx
new file mode 100644
index 000000000..931f187da
--- /dev/null
+++ b/docs/ai/gateway/provider-google.mdx
@@ -0,0 +1,4 @@
+---
+title: Google Provider
+sidebar_label: Google
+---
diff --git a/docs/ai/gateway/provider-minstral.mdx b/docs/ai/gateway/provider-minstral.mdx
new file mode 100644
index 000000000..74ac8f762
--- /dev/null
+++ b/docs/ai/gateway/provider-minstral.mdx
@@ -0,0 +1,4 @@
+---
+title: Minstral Provider
+sidebar_label: Minstral
+---
diff --git a/docs/ai/gateway/provider-openai.mdx b/docs/ai/gateway/provider-openai.mdx
new file mode 100644
index 000000000..b898a5407
--- /dev/null
+++ b/docs/ai/gateway/provider-openai.mdx
@@ -0,0 +1,4 @@
+---
+title: OpenAI Provider
+sidebar_label: OpenAI
+---
diff --git a/docs/ai/gateway/providers.mdx b/docs/ai/gateway/providers.mdx
new file mode 100644
index 000000000..69bb8b07e
--- /dev/null
+++ b/docs/ai/gateway/providers.mdx
@@ -0,0 +1,13 @@
+---
+title: AI Providers
+sidebar_label: Overview
+---
+
+Zuplo's AI Gateway supports integration with various AI providers, allowing you
+to leverage different models and services for your AI applications.
+
+## Supported Providers
+
+Zuplo currently supports the following AI providers:
+
+|
diff --git a/docs/ai/gateway/teams.mdx b/docs/ai/gateway/teams.mdx
new file mode 100644
index 000000000..49e0feb6b
--- /dev/null
+++ b/docs/ai/gateway/teams.mdx
@@ -0,0 +1,4 @@
+---
+title: AI Gateway Teams
+sidebar_label: Overview
+---
diff --git a/docs/ai/gateway/universal-api.mdx b/docs/ai/gateway/universal-api.mdx
new file mode 100644
index 000000000..56593406d
--- /dev/null
+++ b/docs/ai/gateway/universal-api.mdx
@@ -0,0 +1,8 @@
+---
+title: AI Gateway Universal API
+sidebar_label: Universal API
+---
+
+Zuplo AI Gateway provides a universal API that standardizes interactions with
+various AI providers. This API follows the OpenAI API specification, making it
+easy to integrate with existing applications that already use OpenAI's API.
diff --git a/docs/ai/gateway/usage-limits.mdx b/docs/ai/gateway/usage-limits.mdx
new file mode 100644
index 000000000..4bdc2864e
--- /dev/null
+++ b/docs/ai/gateway/usage-limits.mdx
@@ -0,0 +1,4 @@
+---
+title: "Usage Limits & Threasholds"
+sidebar_label: "Usage Limits"
+---
diff --git a/docs/ai/guardrails.mdx b/docs/ai/guardrails.mdx
new file mode 100644
index 000000000..65c1e5efd
--- /dev/null
+++ b/docs/ai/guardrails.mdx
@@ -0,0 +1,4 @@
+---
+title: Zuplo AI Guardrails
+sidebar_label: Overview
+---
diff --git a/docs/ai/mcp-server/getting-started.mdx b/docs/ai/mcp-server/getting-started.mdx
new file mode 100644
index 000000000..d67bd34c9
--- /dev/null
+++ b/docs/ai/mcp-server/getting-started.mdx
@@ -0,0 +1,125 @@
+---
+title: Zuplo MCP Server Getting Started
+sidebar_label: Getting Started
+---
+
+#### Getting Started
+
+1. Set up your APIs in Zuplo using OpenAPI specifications
+2. Add the MCP Server Handler to a route
+3. Configure your server name, version, and which APIs to expose as tools
+4. Deploy your project to make the MCP tools available
+5. Connect your AI systems to the MCP server endpoint
+
+[Read the full technical documentation on the MCP Server Handler](/docs/handlers/mcp-server)
+
+### 2. MCP Custom Tools: Programmable AI Tools
+
+For more complex scenarios, use MCP Custom Tools to create sophisticated AI
+tools with custom business logic, multi-step workflows, and programmatic control
+using OpenAPI specifications and custom handler functions.
+
+#### Key Features
+
+- **OpenAPI Standard**: Define tools using standard OpenAPI 3.1 specifications
+- **Custom Logic**: Implement complex business workflows that go beyond simple
+ API calls to enable powerful AI workloads
+- **Multi-Step Operations**: Chain multiple API calls, data transformations, and
+ conditional logic
+- **Type Safety**: Built-in JSON Schema validation for inputs and outputs
+- **Runtime Integration**: Full access to your gateway through
+ `context.invokeRoute()`
+
+#### Example Use Case
+
+The following shows a powerful workflow that can enable an AI agent to interface
+with a process ordering system: instead of an agent calling each of your APIs
+manually, this workflow can be used as a single "aggregate" process to validate
+the provided customer, check that items are in stock, determine pricing, and
+place orders for those items.
+
+**OpenAPI Tool Definition:**
+
+```json
+{
+ "/process-order": {
+ "post": {
+ "summary": "Process customer order",
+ "description": "Process a customer order with inventory validation and pricing",
+ "operationId": "processCustomerOrder",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": ["customerId", "orderNum"],
+ "properties": {
+ "customerId": {
+ "type": "string",
+ "description": "Unique customer identifier"
+ },
+ "orderNum": {
+ "type": "number",
+ "description": "Order number to process"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-zuplo-route": {
+ "handler": {
+ "export": "default",
+ "module": "$import(./modules/process-order)"
+ }
+ }
+ }
+ }
+}
+```
+
+**Custom Handler Implementation:**
+
+```typescript
+// modules/process-order.ts
+import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
+
+export default async function (request: ZuploRequest, context: ZuploContext) {
+ const args = await request.json();
+
+ // 1. Validate customer exists and is active
+ const customerRes = await context.invokeRoute(
+ `/customers/${args.customerId}`,
+ );
+ if (!customerRes.ok) {
+ throw new Error("Customer not found or inactive");
+ }
+ const customer = await customerRes.json();
+
+ // 2. Check the customer's order
+ const orderResponse = await context.invokeRoute(`/orders/${args.orderNum}`);
+
+ if (!orderResponse.ok) {
+ throw new Error("Order not found");
+ }
+ const order = await orderResponse.json();
+
+ // 3. Return structured response
+ return {
+ orderNum: order.id,
+ items: order.items,
+ status: "processed",
+ customerId: args.customerId,
+ };
+}
+```
+
+#### Getting Started with Custom Tools
+
+1. Create an OpenAPI specification defining your tools as POST endpoints
+2. Implement custom handler functions for complex business logic
+3. Configure the MCP Server Handler with your OpenAPI specification
+4. Deploy and test with MCP clients
+
+[Read the full documentation on MCP Custom Tools](/docs/handlers/mcp-server-custom-tools)
diff --git a/docs/ai/mcp.mdx b/docs/ai/mcp-server/overview.mdx
similarity index 50%
rename from docs/ai/mcp.mdx
rename to docs/ai/mcp-server/overview.mdx
index 57e669933..62422dbb2 100644
--- a/docs/ai/mcp.mdx
+++ b/docs/ai/mcp-server/overview.mdx
@@ -1,6 +1,6 @@
---
title: Model Context Protocol (MCP)
-sidebar_label: Model Context Protocol (MCP)
+sidebar_label: Overview
---
[Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is
@@ -112,127 +112,6 @@ When exposing routes as MCP tools:
4. **Scope permissions carefully** - only expose routes and OpenAPI specs that
should be accessible to AI systems
-#### Getting Started
-
-1. Set up your APIs in Zuplo using OpenAPI specifications
-2. Add the MCP Server Handler to a route
-3. Configure your server name, version, and which APIs to expose as tools
-4. Deploy your project to make the MCP tools available
-5. Connect your AI systems to the MCP server endpoint
-
-[Read the full technical documentation on the MCP Server Handler](/docs/handlers/mcp-server)
-
-### 2. MCP Custom Tools: Programmable AI Tools
-
-For more complex scenarios, use MCP Custom Tools to create sophisticated AI
-tools with custom business logic, multi-step workflows, and programmatic control
-using OpenAPI specifications and custom handler functions.
-
-#### Key Features
-
-- **OpenAPI Standard**: Define tools using standard OpenAPI 3.1 specifications
-- **Custom Logic**: Implement complex business workflows that go beyond simple
- API calls to enable powerful AI workloads
-- **Multi-Step Operations**: Chain multiple API calls, data transformations, and
- conditional logic
-- **Type Safety**: Built-in JSON Schema validation for inputs and outputs
-- **Runtime Integration**: Full access to your gateway through
- `context.invokeRoute()`
-
-#### Example Use Case
-
-The following shows a powerful workflow that can enable an AI agent to interface
-with a process ordering system: instead of an agent calling each of your APIs
-manually, this workflow can be used as a single "aggregate" process to validate
-the provided customer, check that items are in stock, determine pricing, and
-place orders for those items.
-
-**OpenAPI Tool Definition:**
-
-```json
-{
- "/process-order": {
- "post": {
- "summary": "Process customer order",
- "description": "Process a customer order with inventory validation and pricing",
- "operationId": "processCustomerOrder",
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": ["customerId", "orderNum"],
- "properties": {
- "customerId": {
- "type": "string",
- "description": "Unique customer identifier"
- },
- "orderNum": {
- "type": "number",
- "description": "Order number to process"
- }
- }
- }
- }
- }
- },
- "x-zuplo-route": {
- "handler": {
- "export": "default",
- "module": "$import(./modules/process-order)"
- }
- }
- }
- }
-}
-```
-
-**Custom Handler Implementation:**
-
-```typescript
-// modules/process-order.ts
-import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
-
-export default async function (request: ZuploRequest, context: ZuploContext) {
- const args = await request.json();
-
- // 1. Validate customer exists and is active
- const customerRes = await context.invokeRoute(
- `/customers/${args.customerId}`,
- );
- if (!customerRes.ok) {
- throw new Error("Customer not found or inactive");
- }
- const customer = await customerRes.json();
-
- // 2. Check the customer's order
- const orderResponse = await context.invokeRoute(`/orders/${args.orderNum}`);
-
- if (!orderResponse.ok) {
- throw new Error("Order not found");
- }
- const order = await orderResponse.json();
-
- // 3. Return structured response
- return {
- orderNum: order.id,
- items: order.items,
- status: "processed",
- customerId: args.customerId,
- };
-}
-```
-
-#### Getting Started with Custom Tools
-
-1. Create an OpenAPI specification defining your tools as POST endpoints
-2. Implement custom handler functions for complex business logic
-3. Configure the MCP Server Handler with your OpenAPI specification
-4. Deploy and test with MCP clients
-
-[Read the full documentation on MCP Custom Tools](/docs/handlers/mcp-server-custom-tools)
-
## Learn More
- [MCP Server Handler Technical Documentation](/docs/handlers/mcp-server)
diff --git a/docs/ai/overview.mdx b/docs/ai/overview.mdx
new file mode 100644
index 000000000..83fc3b409
--- /dev/null
+++ b/docs/ai/overview.mdx
@@ -0,0 +1,4 @@
+---
+title: Zuplo AI
+sidebar_label: Overview
+---
diff --git a/docs/handlers/mcp-server-custom-tools.mdx b/docs/handlers/mcp-server-custom-tools.mdx
index 5f41234a2..261a3b991 100644
--- a/docs/handlers/mcp-server-custom-tools.mdx
+++ b/docs/handlers/mcp-server-custom-tools.mdx
@@ -534,6 +534,7 @@ dramatically reduce invalid tool usage. This validation is done automatically.
## Learn More
- [MCP Server Handler](./mcp-server.mdx) - For simple route-to-tool mapping
-- [Model Context Protocol Overview](../ai/mcp.mdx) - Understanding MCP concepts
+- [Model Context Protocol Overview](../ai/mcp/introduction.mdx) - Understanding
+ MCP concepts
- [MCP Specification](https://modelcontextprotocol.io/specification/) - Official
protocol documentation
diff --git a/package-lock.json b/package-lock.json
index cab503f9b..2814fd73c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,7 +17,7 @@
"lucide-react": "^0.516.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
- "zudoku": "^0.60.1"
+ "zudoku": "^0.61.4"
},
"devDependencies": {
"@types/json-schema": "7.0.15",
@@ -2846,6 +2846,12 @@
"url": "https://opencollective.com/pkgr"
}
},
+ "node_modules/@posthog/core": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.0.0.tgz",
+ "integrity": "sha512-gquQld+duT9DdzLIFoHZkUMW0DZOTSLCtSjuuC/zKFz65Qecbz9p37DHBJMkw0dCuB8Mgh2GtH8Ag3PznJrP3g==",
+ "license": "MIT"
+ },
"node_modules/@pothos/core": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/@pothos/core/-/core-4.8.0.tgz",
@@ -2874,19 +2880,19 @@
"license": "MIT"
},
"node_modules/@radix-ui/primitive": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz",
- "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz",
+ "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==",
"license": "MIT"
},
"node_modules/@radix-ui/react-accordion": {
- "version": "1.2.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz",
- "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==",
+ "version": "1.2.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz",
+ "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
- "@radix-ui/react-collapsible": "1.1.11",
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collapsible": "1.1.12",
"@radix-ui/react-collection": "1.1.7",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
@@ -2911,15 +2917,15 @@
}
},
"node_modules/@radix-ui/react-alert-dialog": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.14.tgz",
- "integrity": "sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz",
+ "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dialog": "1.1.14",
+ "@radix-ui/react-dialog": "1.1.15",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-slot": "1.2.3"
},
@@ -2985,15 +2991,15 @@
}
},
"node_modules/@radix-ui/react-checkbox": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.2.tgz",
- "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz",
+ "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-use-controllable-state": "1.2.2",
"@radix-ui/react-use-previous": "1.1.1",
@@ -3015,16 +3021,16 @@
}
},
"node_modules/@radix-ui/react-collapsible": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz",
- "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz",
+ "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-use-controllable-state": "1.2.2",
"@radix-ui/react-use-layout-effect": "1.1.1"
@@ -3101,20 +3107,20 @@
}
},
"node_modules/@radix-ui/react-dialog": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz",
- "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz",
+ "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.10",
- "@radix-ui/react-focus-guards": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
"@radix-ui/react-focus-scope": "1.1.7",
"@radix-ui/react-id": "1.1.1",
"@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-slot": "1.2.3",
"@radix-ui/react-use-controllable-state": "1.2.2",
@@ -3152,12 +3158,12 @@
}
},
"node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz",
- "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz",
+ "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-use-callback-ref": "1.1.1",
@@ -3179,16 +3185,16 @@
}
},
"node_modules/@radix-ui/react-dropdown-menu": {
- "version": "2.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz",
- "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==",
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz",
+ "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-menu": "2.1.15",
+ "@radix-ui/react-menu": "2.1.16",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-use-controllable-state": "1.2.2"
},
@@ -3208,9 +3214,9 @@
}
},
"node_modules/@radix-ui/react-focus-guards": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz",
- "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz",
+ "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==",
"license": "MIT",
"peerDependencies": {
"@types/react": "*",
@@ -3248,18 +3254,18 @@
}
},
"node_modules/@radix-ui/react-hover-card": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.14.tgz",
- "integrity": "sha512-CPYZ24Mhirm+g6D8jArmLzjYu4Eyg3TTUHswR26QgzXBHBe64BO/RHOJKzmF/Dxb4y4f9PKyJdwm/O/AhNkb+Q==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz",
+ "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.10",
- "@radix-ui/react-popper": "1.2.7",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-popper": "1.2.8",
"@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-use-controllable-state": "1.2.2"
},
@@ -3320,25 +3326,25 @@
}
},
"node_modules/@radix-ui/react-menu": {
- "version": "2.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz",
- "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==",
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz",
+ "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-collection": "1.1.7",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.10",
- "@radix-ui/react-focus-guards": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
"@radix-ui/react-focus-scope": "1.1.7",
"@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.7",
+ "@radix-ui/react-popper": "1.2.8",
"@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.10",
+ "@radix-ui/react-roving-focus": "1.1.11",
"@radix-ui/react-slot": "1.2.3",
"@radix-ui/react-use-callback-ref": "1.1.1",
"aria-hidden": "^1.2.4",
@@ -3360,21 +3366,21 @@
}
},
"node_modules/@radix-ui/react-popover": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz",
- "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==",
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz",
+ "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.10",
- "@radix-ui/react-focus-guards": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
"@radix-ui/react-focus-scope": "1.1.7",
"@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.7",
+ "@radix-ui/react-popper": "1.2.8",
"@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-slot": "1.2.3",
"@radix-ui/react-use-controllable-state": "1.2.2",
@@ -3397,9 +3403,9 @@
}
},
"node_modules/@radix-ui/react-popper": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz",
- "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz",
+ "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==",
"license": "MIT",
"dependencies": {
"@floating-ui/react-dom": "^2.0.0",
@@ -3453,9 +3459,9 @@
}
},
"node_modules/@radix-ui/react-presence": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz",
- "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz",
+ "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-compose-refs": "1.1.2",
@@ -3524,18 +3530,18 @@
}
},
"node_modules/@radix-ui/react-radio-group": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.7.tgz",
- "integrity": "sha512-9w5XhD0KPOrm92OTTE0SysH3sYzHsSTHNvZgUBo/VZ80VdYyB5RneDbc0dKpURS24IxkoFRu/hI0i4XyfFwY6g==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz",
+ "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.10",
+ "@radix-ui/react-roving-focus": "1.1.11",
"@radix-ui/react-use-controllable-state": "1.2.2",
"@radix-ui/react-use-previous": "1.1.1",
"@radix-ui/react-use-size": "1.1.1"
@@ -3556,12 +3562,12 @@
}
},
"node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz",
- "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz",
+ "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-collection": "1.1.7",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
@@ -3587,17 +3593,17 @@
}
},
"node_modules/@radix-ui/react-scroll-area": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz",
- "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==",
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz",
+ "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==",
"license": "MIT",
"dependencies": {
"@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-use-callback-ref": "1.1.1",
"@radix-ui/react-use-layout-effect": "1.1.1"
@@ -3618,22 +3624,22 @@
}
},
"node_modules/@radix-ui/react-select": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.5.tgz",
- "integrity": "sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==",
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz",
+ "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==",
"license": "MIT",
"dependencies": {
"@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-collection": "1.1.7",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.10",
- "@radix-ui/react-focus-guards": "1.1.2",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
"@radix-ui/react-focus-scope": "1.1.7",
"@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.7",
+ "@radix-ui/react-popper": "1.2.8",
"@radix-ui/react-portal": "1.1.9",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-slot": "1.2.3",
@@ -3661,13 +3667,13 @@
}
},
"node_modules/@radix-ui/react-slider": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.5.tgz",
- "integrity": "sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==",
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz",
+ "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==",
"license": "MIT",
"dependencies": {
"@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-collection": "1.1.7",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
@@ -3712,12 +3718,12 @@
}
},
"node_modules/@radix-ui/react-switch": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz",
- "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==",
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz",
+ "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-primitive": "2.1.3",
@@ -3741,18 +3747,18 @@
}
},
"node_modules/@radix-ui/react-tabs": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz",
- "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz",
+ "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-direction": "1.1.1",
"@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.10",
+ "@radix-ui/react-roving-focus": "1.1.11",
"@radix-ui/react-use-controllable-state": "1.2.2"
},
"peerDependencies": {
@@ -3771,12 +3777,12 @@
}
},
"node_modules/@radix-ui/react-toggle": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.9.tgz",
- "integrity": "sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==",
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz",
+ "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-use-controllable-state": "1.2.2"
},
@@ -3796,17 +3802,17 @@
}
},
"node_modules/@radix-ui/react-toggle-group": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.10.tgz",
- "integrity": "sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz",
+ "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-context": "1.1.2",
"@radix-ui/react-direction": "1.1.1",
"@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.10",
- "@radix-ui/react-toggle": "1.1.9",
+ "@radix-ui/react-roving-focus": "1.1.11",
+ "@radix-ui/react-toggle": "1.1.10",
"@radix-ui/react-use-controllable-state": "1.2.2"
},
"peerDependencies": {
@@ -3825,19 +3831,19 @@
}
},
"node_modules/@radix-ui/react-tooltip": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz",
- "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz",
+ "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.2",
+ "@radix-ui/primitive": "1.1.3",
"@radix-ui/react-compose-refs": "1.1.2",
"@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.10",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
"@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.7",
+ "@radix-ui/react-popper": "1.2.8",
"@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.4",
+ "@radix-ui/react-presence": "1.1.5",
"@radix-ui/react-primitive": "2.1.3",
"@radix-ui/react-slot": "1.2.3",
"@radix-ui/react-use-controllable-state": "1.2.2",
@@ -4843,84 +4849,84 @@
}
},
"node_modules/@shikijs/core": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.9.2.tgz",
- "integrity": "sha512-3q/mzmw09B2B6PgFNeiaN8pkNOixWS726IHmJEpjDAcneDPMQmUg2cweT9cWXY4XcyQS3i6mOOUgQz9RRUP6HA==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.12.0.tgz",
+ "integrity": "sha512-rPfCBd6gHIKBPpf2hKKWn2ISPSrmRKAFi+bYDjvZHpzs3zlksWvEwaF3Z4jnvW+xHxSRef7qDooIJkY0RpA9EA==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.9.2",
+ "@shikijs/types": "3.12.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4",
"hast-util-to-html": "^9.0.5"
}
},
"node_modules/@shikijs/engine-javascript": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.9.2.tgz",
- "integrity": "sha512-kUTRVKPsB/28H5Ko6qEsyudBiWEDLst+Sfi+hwr59E0GLHV0h8RfgbQU7fdN5Lt9A8R1ulRiZyTvAizkROjwDA==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.12.0.tgz",
+ "integrity": "sha512-Ni3nm4lnKxyKaDoXQQJYEayX052BL7D0ikU5laHp+ynxPpIF1WIwyhzrMU6WDN7AoAfggVR4Xqx3WN+JTS+BvA==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.9.2",
+ "@shikijs/types": "3.12.0",
"@shikijs/vscode-textmate": "^10.0.2",
"oniguruma-to-es": "^4.3.3"
}
},
"node_modules/@shikijs/engine-oniguruma": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.9.2.tgz",
- "integrity": "sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.12.0.tgz",
+ "integrity": "sha512-IfDl3oXPbJ/Jr2K8mLeQVpnF+FxjAc7ZPDkgr38uEw/Bg3u638neSrpwqOTnTHXt1aU0Fk1/J+/RBdst1kVqLg==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.9.2",
+ "@shikijs/types": "3.12.0",
"@shikijs/vscode-textmate": "^10.0.2"
}
},
"node_modules/@shikijs/langs": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.9.2.tgz",
- "integrity": "sha512-X1Q6wRRQXY7HqAuX3I8WjMscjeGjqXCg/Sve7J2GWFORXkSrXud23UECqTBIdCSNKJioFtmUGJQNKtlMMZMn0w==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.12.0.tgz",
+ "integrity": "sha512-HIca0daEySJ8zuy9bdrtcBPhcYBo8wR1dyHk1vKrOuwDsITtZuQeGhEkcEfWc6IDyTcom7LRFCH6P7ljGSCEiQ==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.9.2"
+ "@shikijs/types": "3.12.0"
}
},
"node_modules/@shikijs/rehype": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.9.2.tgz",
- "integrity": "sha512-obHyTWAUp5cpgpr4v7T9sjEHkLUMvBHvcpYAtdB1yuWU4/IeJ8boDMpnGUvvnxVpDwARlkvBA4Hr+BISo3zwjg==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.12.0.tgz",
+ "integrity": "sha512-qxZwugfCQUMECTmUOCGiG5cNHHTxxGk3esirD7mwwdSxl344KlN/6M9/anev+3uBFVs9UDNShjsMAla8egkCuw==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.9.2",
+ "@shikijs/types": "3.12.0",
"@types/hast": "^3.0.4",
"hast-util-to-string": "^3.0.1",
- "shiki": "3.9.2",
+ "shiki": "3.12.0",
"unified": "^11.0.5",
"unist-util-visit": "^5.0.0"
}
},
"node_modules/@shikijs/themes": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.9.2.tgz",
- "integrity": "sha512-6z5lBPBMRfLyyEsgf6uJDHPa6NAGVzFJqH4EAZ+03+7sedYir2yJBRu2uPZOKmj43GyhVHWHvyduLDAwJQfDjA==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.12.0.tgz",
+ "integrity": "sha512-/lxvQxSI5s4qZLV/AuFaA4Wt61t/0Oka/P9Lmpr1UV+HydNCczO3DMHOC/CsXCCpbv4Zq8sMD0cDa7mvaVoj0Q==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.9.2"
+ "@shikijs/types": "3.12.0"
}
},
"node_modules/@shikijs/transformers": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.9.2.tgz",
- "integrity": "sha512-MW5hT4TyUp6bNAgTExRYLk1NNasVQMTCw1kgbxHcEC0O5cbepPWaB+1k+JzW9r3SP2/R8kiens8/3E6hGKfgsA==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.12.0.tgz",
+ "integrity": "sha512-HcJwlvMAyZzOY+ayEAGE891BdJ7Vtio+qdWUTF9ki4d0LIkDb6DBz8ynOWGAEglHv6eQs/WcAWf/h6ina6IgCw==",
"license": "MIT",
"dependencies": {
- "@shikijs/core": "3.9.2",
- "@shikijs/types": "3.9.2"
+ "@shikijs/core": "3.12.0",
+ "@shikijs/types": "3.12.0"
}
},
"node_modules/@shikijs/types": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.9.2.tgz",
- "integrity": "sha512-/M5L0Uc2ljyn2jKvj4Yiah7ow/W+DJSglVafvWAJ/b8AZDeeRAdMu3c2riDzB7N42VD+jSnWxeP9AKtd4TfYVw==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.0.tgz",
+ "integrity": "sha512-jsFzm8hCeTINC3OCmTZdhR9DOl/foJWplH2Px0bTi4m8z59fnsueLsweX82oGcjRQ7mfQAluQYKGoH2VzsWY4A==",
"license": "MIT",
"dependencies": {
"@shikijs/vscode-textmate": "^10.0.2",
@@ -5485,9 +5491,9 @@
}
},
"node_modules/@tanstack/query-core": {
- "version": "5.81.5",
- "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.81.5.tgz",
- "integrity": "sha512-ZJOgCy/z2qpZXWaj/oxvodDx07XcQa9BF92c0oINjHkoqUPsmm3uG08HpTaviviZ/N9eP1f9CM7mKSEkIo7O1Q==",
+ "version": "5.85.5",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.85.5.tgz",
+ "integrity": "sha512-KO0WTob4JEApv69iYp1eGvfMSUkgw//IpMnq+//cORBzXf0smyRwPLrUvEe5qtAEGjwZTXrjxg+oJNP/C00t6w==",
"license": "MIT",
"funding": {
"type": "github",
@@ -5495,12 +5501,12 @@
}
},
"node_modules/@tanstack/react-query": {
- "version": "5.81.5",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.81.5.tgz",
- "integrity": "sha512-lOf2KqRRiYWpQT86eeeftAGnjuTR35myTP8MXyvHa81VlomoAWNEd8x5vkcAfQefu0qtYCvyqLropFZqgI2EQw==",
+ "version": "5.85.5",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.85.5.tgz",
+ "integrity": "sha512-/X4EFNcnPiSs8wM2v+b6DqS5mmGeuJQvxBglmDxl6ZQb5V26ouD2SJYAcC3VjbNwqhY2zjxVD15rDA5nGbMn3A==",
"license": "MIT",
"dependencies": {
- "@tanstack/query-core": "5.81.5"
+ "@tanstack/query-core": "5.85.5"
},
"funding": {
"type": "github",
@@ -6259,6 +6265,24 @@
"react": "^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@zuplo/mcp": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/@zuplo/mcp/-/mcp-0.0.18.tgz",
+ "integrity": "sha512-Lwffy72XuWAUhBgSuJKE085lgPTNmzfHE1I71sz7AxkW1+MhgIVsJi0xA0uPtBpjDCs9ABFoGxHnTCO35wWLyw==",
+ "license": "MIT",
+ "dependencies": {
+ "zod": "^3.25.0"
+ }
+ },
+ "node_modules/@zuplo/mcp/node_modules/zod": {
+ "version": "3.25.76",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
+ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
"node_modules/@zxcvbn-ts/core": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@zxcvbn-ts/core/-/core-3.0.4.tgz",
@@ -6390,9 +6414,9 @@
"license": "MIT"
},
"node_modules/allof-merge": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/allof-merge/-/allof-merge-0.6.6.tgz",
- "integrity": "sha512-116eZBf2he0/J4Tl7EYMz96I5Anaeio+VL0j/H2yxW9CoYQAMMv8gYcwkVRoO7XfIOv/qzSTfVzDVGAYxKFi3g==",
+ "version": "0.6.7",
+ "resolved": "https://registry.npmjs.org/allof-merge/-/allof-merge-0.6.7.tgz",
+ "integrity": "sha512-slvjkM56OdeVkm1tllrnaumtSHwqyHrepXkAe6Am+CW4WdbHkNqdOKPF6cvY3/IouzvXk1BoLICT5LY7sCoFGw==",
"license": "MIT",
"dependencies": {
"json-crawl": "^0.5.3"
@@ -6475,19 +6499,9 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
"license": "MIT"
},
- "node_modules/axios": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
- "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
- "license": "MIT",
- "dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
"node_modules/babel-plugin-macros": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
@@ -6966,6 +6980,7 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
@@ -7415,6 +7430,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
@@ -7648,6 +7664,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -8436,6 +8453,7 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
"integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
@@ -8451,6 +8469,7 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -8460,6 +8479,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
@@ -8849,6 +8869,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
@@ -12296,15 +12317,15 @@
}
},
"node_modules/posthog-node": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-4.17.1.tgz",
- "integrity": "sha512-cVlQPOwOPjakUnrueKRCQe1m2Ku+XzKaOos7Tn/zDZkkZFeBT/byP7tbNf7LiwhaBRWFBRowZZb/MsTtSRaorg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-5.7.0.tgz",
+ "integrity": "sha512-6J1AIZWtbr2lEbZOO2AzO/h1FPJjUZM4KWcdaL2UQw7FY8J7VNaH3NiaRockASFmglpID7zEY25gV/YwCtuXjg==",
"license": "MIT",
"dependencies": {
- "axios": "^1.8.2"
+ "@posthog/core": "1.0.0"
},
"engines": {
- "node": ">=15.0.0"
+ "node": ">=20"
}
},
"node_modules/preact": {
@@ -12556,9 +12577,9 @@
"license": "MIT"
},
"node_modules/react-hook-form": {
- "version": "7.60.0",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.60.0.tgz",
- "integrity": "sha512-SBrYOvMbDB7cV8ZfNpaiLcgjH/a1c7aK0lK+aNigpf4xWLO8q+o4tcvVurv3c4EOyzn/3dCsYt4GKD42VvJ/+A==",
+ "version": "7.62.0",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz",
+ "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==",
"license": "MIT",
"engines": {
"node": ">=18.0.0"
@@ -12661,9 +12682,9 @@
}
},
"node_modules/react-router": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.3.tgz",
- "integrity": "sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==",
+ "version": "7.8.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.2.tgz",
+ "integrity": "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==",
"license": "MIT",
"dependencies": {
"cookie": "^1.0.1",
@@ -13549,17 +13570,17 @@
}
},
"node_modules/shiki": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.9.2.tgz",
- "integrity": "sha512-t6NKl5e/zGTvw/IyftLcumolgOczhuroqwXngDeMqJ3h3EQiTY/7wmfgPlsmloD8oYfqkEDqxiaH37Pjm1zUhQ==",
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.12.0.tgz",
+ "integrity": "sha512-E+ke51tciraTHpaXYXfqnPZFSViKHhSQ3fiugThlfs/om/EonlQ0hSldcqgzOWWqX6PcjkKKzFgrjIaiPAXoaA==",
"license": "MIT",
"dependencies": {
- "@shikijs/core": "3.9.2",
- "@shikijs/engine-javascript": "3.9.2",
- "@shikijs/engine-oniguruma": "3.9.2",
- "@shikijs/langs": "3.9.2",
- "@shikijs/themes": "3.9.2",
- "@shikijs/types": "3.9.2",
+ "@shikijs/core": "3.12.0",
+ "@shikijs/engine-javascript": "3.12.0",
+ "@shikijs/engine-oniguruma": "3.12.0",
+ "@shikijs/langs": "3.12.0",
+ "@shikijs/themes": "3.12.0",
+ "@shikijs/types": "3.12.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
}
@@ -14230,6 +14251,15 @@
"fsevents": "~2.3.3"
}
},
+ "node_modules/tw-animate-css": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.6.tgz",
+ "integrity": "sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Wombosvideo"
+ }
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -15139,9 +15169,9 @@
}
},
"node_modules/zudoku": {
- "version": "0.60.1",
- "resolved": "https://registry.npmjs.org/zudoku/-/zudoku-0.60.1.tgz",
- "integrity": "sha512-sxQSHSRqf/lpuGcp0uCTpFgxMaKACcIJrq+i+nH3E8I7tR8Q2FEAedLUZRtXcX22aL5+3y3paMva+44oDUA48Q==",
+ "version": "0.61.4",
+ "resolved": "https://registry.npmjs.org/zudoku/-/zudoku-0.61.4.tgz",
+ "integrity": "sha512-qEoTyAA3rCK2Z/mFCvNBRL4ZlNeLGsB48bGCxBEe25OFm0/GfQlamI/PevPhg21SoRO2SPfM6KA5AxmnK1LzpA==",
"dependencies": {
"@apidevtools/json-schema-ref-parser": "14.1.1",
"@envelop/core": "5.3.0",
@@ -15150,46 +15180,47 @@
"@mdx-js/react": "3.1.0",
"@mdx-js/rollup": "3.1.0",
"@pothos/core": "4.8.0",
- "@radix-ui/react-accordion": "1.2.11",
- "@radix-ui/react-alert-dialog": "1.1.14",
+ "@radix-ui/react-accordion": "1.2.12",
+ "@radix-ui/react-alert-dialog": "1.1.15",
"@radix-ui/react-aspect-ratio": "1.1.7",
- "@radix-ui/react-checkbox": "1.3.2",
- "@radix-ui/react-collapsible": "1.1.11",
- "@radix-ui/react-dialog": "1.1.14",
- "@radix-ui/react-dropdown-menu": "2.1.15",
- "@radix-ui/react-hover-card": "1.1.14",
+ "@radix-ui/react-checkbox": "1.3.3",
+ "@radix-ui/react-collapsible": "1.1.12",
+ "@radix-ui/react-dialog": "1.1.15",
+ "@radix-ui/react-dropdown-menu": "2.1.16",
+ "@radix-ui/react-hover-card": "1.1.15",
"@radix-ui/react-label": "2.1.7",
- "@radix-ui/react-popover": "1.1.14",
+ "@radix-ui/react-popover": "1.1.15",
"@radix-ui/react-progress": "1.1.7",
- "@radix-ui/react-radio-group": "1.3.7",
- "@radix-ui/react-scroll-area": "1.2.9",
- "@radix-ui/react-select": "2.2.5",
- "@radix-ui/react-slider": "1.3.5",
+ "@radix-ui/react-radio-group": "1.3.8",
+ "@radix-ui/react-scroll-area": "1.2.10",
+ "@radix-ui/react-select": "2.2.6",
+ "@radix-ui/react-slider": "1.3.6",
"@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-switch": "1.2.5",
- "@radix-ui/react-tabs": "1.1.12",
- "@radix-ui/react-toggle": "1.1.9",
- "@radix-ui/react-toggle-group": "1.1.10",
- "@radix-ui/react-tooltip": "1.2.7",
+ "@radix-ui/react-switch": "1.2.6",
+ "@radix-ui/react-tabs": "1.1.13",
+ "@radix-ui/react-toggle": "1.1.10",
+ "@radix-ui/react-toggle-group": "1.1.11",
+ "@radix-ui/react-tooltip": "1.2.8",
"@radix-ui/react-visually-hidden": "1.2.3",
"@scalar/openapi-parser": "0.18.0",
"@sentry/node": "9.26.0",
- "@shikijs/langs": "3.9.2",
- "@shikijs/rehype": "3.9.2",
- "@shikijs/themes": "3.9.2",
- "@shikijs/transformers": "3.9.2",
+ "@shikijs/langs": "3.12.0",
+ "@shikijs/rehype": "3.12.0",
+ "@shikijs/themes": "3.12.0",
+ "@shikijs/transformers": "3.12.0",
"@sindresorhus/slugify": "2.2.1",
"@stefanprobst/rehype-extract-toc": "3.0.0",
"@tailwindcss/typography": "0.5.16",
"@tailwindcss/vite": "4.1.11",
"@tanem/react-nprogress": "5.0.55",
- "@tanstack/react-query": "5.81.5",
+ "@tanstack/react-query": "5.85.5",
"@types/react": "19.1.10",
"@types/react-dom": "19.1.7",
"@vitejs/plugin-react": "4.6.0",
"@zudoku/httpsnippet": "10.0.9",
"@zudoku/react-helmet-async": "2.0.5",
- "allof-merge": "0.6.6",
+ "@zuplo/mcp": "^0.0.18",
+ "allof-merge": "0.6.7",
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
"cmdk": "1.1.1",
@@ -15209,7 +15240,7 @@
"javascript-stringify": "2.1.0",
"json-schema-to-typescript-lite": "15.0.0",
"loglevel": "1.9.2",
- "lucide-react": "0.526.0",
+ "lucide-react": "0.542.0",
"motion": "12.23.12",
"nanoevents": "^9.1.0",
"next-themes": "0.4.6",
@@ -15218,12 +15249,12 @@
"pagefind": "1.4.0-alpha.1",
"picocolors": "1.1.1",
"piscina": "5.1.3",
- "posthog-node": "4.17.1",
+ "posthog-node": "5.7.0",
"react-error-boundary": "6.0.0",
- "react-hook-form": "7.60.0",
+ "react-hook-form": "7.62.0",
"react-is": "19.1.1",
"react-markdown": "10.1.0",
- "react-router": "7.6.3",
+ "react-router": "7.8.2",
"rehype-mdx-import-media": "1.2.0",
"rehype-raw": "7.0.0",
"rehype-slug": "6.0.0",
@@ -15235,11 +15266,12 @@
"remark-mdx-frontmatter": "5.2.0",
"rollup": "4.46.1",
"semver": "7.7.2",
- "shiki": "3.9.2",
+ "shiki": "3.12.0",
"sitemap": "8.0.0",
"strip-ansi": "7.1.0",
"tailwind-merge": "3.3.1",
"tailwindcss": "4.1.11",
+ "tw-animate-css": "1.3.6",
"unified": "^11.0.5",
"unist-util-visit": "5.0.0",
"vaul": "1.1.2",
@@ -15248,7 +15280,7 @@
"yaml": "2.8.1",
"yargs": "18.0.0",
"zod": "4.0.10",
- "zustand": "5.0.6"
+ "zustand": "5.0.8"
},
"bin": {
"zudoku": "cli.js"
@@ -15347,9 +15379,9 @@
}
},
"node_modules/zudoku/node_modules/lucide-react": {
- "version": "0.526.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.526.0.tgz",
- "integrity": "sha512-uGWG/2RKuDLeQHCodn5cmJ9Zij80EstOdcBP+j//B2sr78w7woiEL4aMu6CRlRkyOyJ8sZry8QLhQTmZjynLdA==",
+ "version": "0.542.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.542.0.tgz",
+ "integrity": "sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw==",
"license": "ISC",
"peerDependencies": {
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -15434,9 +15466,9 @@
}
},
"node_modules/zudoku/node_modules/zustand": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.6.tgz",
- "integrity": "sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.8.tgz",
+ "integrity": "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==",
"license": "MIT",
"engines": {
"node": ">=12.20.0"
diff --git a/package.json b/package.json
index 017346330..d88d1dcfe 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
"lucide-react": "^0.516.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
- "zudoku": "^0.60.1"
+ "zudoku": "^0.61.4"
},
"devDependencies": {
"@types/json-schema": "7.0.15",
diff --git a/sidebar.ts b/sidebar.ts
index 638cfd4d7..7662eba20 100644
--- a/sidebar.ts
+++ b/sidebar.ts
@@ -88,11 +88,6 @@ export const docs: Navigation = [
"articles/testing",
],
},
- {
- type: "category",
- label: "AI",
- items: ["ai/mcp"],
- },
{
type: "category",
label: "Observability",
@@ -347,6 +342,74 @@ export const docs: Navigation = [
},
];
+export const ai: Navigation = [
+ {
+ type: "category",
+ label: "Introduction",
+ items: ["ai/overview", "ai/features"],
+ collapsed: false,
+ },
+ {
+ type: "category",
+ label: "AI Gateway",
+ items: [
+ "ai/gateway/overview",
+ "ai/gateway/getting-started",
+ "ai/gateway/universal-api",
+ "ai/gateway/information-architecture",
+ {
+ type: "category",
+ label: "Providers",
+ items: [
+ "ai/gateway/providers",
+ "ai/gateway/managing-providers",
+ "ai/gateway/provider-openai",
+ "ai/gateway/provider-anthropic",
+ "ai/gateway/provider-google",
+ "ai/gateway/provider-minstral",
+ ],
+ },
+ {
+ type: "category",
+ label: "Teams",
+ items: [
+ "ai/gateway/teams",
+ "ai/gateway/managing-teams",
+ "ai/gateway/usage-limits",
+ ],
+ },
+ {
+ type: "category",
+ label: "Apps",
+ items: ["ai/gateway/apps"],
+ },
+ ],
+ collapsed: false,
+ },
+ {
+ type: "category",
+ label: "MCP Server",
+ items: [
+ "ai/mcp-server/overview",
+ "ai/mcp-server/getting-started",
+ {
+ type: "link",
+ icon: "square-code",
+ label: "Handler",
+ target: "_self",
+ to: "https://zuplo.com/docs/handlers/mcp-server",
+ },
+ ],
+ collapsed: false,
+ },
+
+ {
+ type: "category",
+ label: "Guardrails",
+ items: ["ai/guardrails"],
+ },
+];
+
export const programming: Navigation = [
{
type: "doc",
diff --git a/zudoku.config.tsx b/zudoku.config.tsx
index 4f9ac2e38..2dfb4afc6 100644
--- a/zudoku.config.tsx
+++ b/zudoku.config.tsx
@@ -1,5 +1,5 @@
import type { ZudokuConfig, ZudokuPlugin } from "zudoku";
-import { devPortal, docs, policies, programming } from "./sidebar.js";
+import { ai, devPortal, docs, policies, programming } from "./sidebar.js";
import { mdxComponents } from "./src/components.js";
import { HeadNavigation } from "./src/HeadNavigation";
import "./src/diagrams.css";
@@ -102,6 +102,11 @@ posthog.init('phc_xB1aydh7a41MW9TwUtLJjKme4izQiWf9zKbKhpysAiW', { person_profile
label: "Documentation",
items: docs,
},
+ {
+ type: "category",
+ label: "AI",
+ items: ai,
+ },
{
type: "category",
label: "Policies & Handlers",