From e318a80afc42275f9c9dcd29a34dae2322dcf782 Mon Sep 17 00:00:00 2001 From: Pranay Prakash Date: Thu, 6 Nov 2025 15:57:12 -0800 Subject: [PATCH 01/13] Implement Workflow DevKit --- apps/vibe-coding-platform/README.md | 2 + ...ndbox.md => create-sandbox.description.ts} | 19 +- .../ai/tools/create-sandbox.ts | 133 +- ...files.md => generate-files.description.ts} | 31 +- .../ai/tools/generate-files.ts | 184 +- ...-url.md => get-sandbox-url.description.ts} | 15 +- .../ai/tools/get-sandbox-url.ts | 79 +- apps/vibe-coding-platform/ai/tools/index.ts | 14 +- .../ai/tools/run-command.description.ts | 68 + .../ai/tools/run-command.md | 67 - .../ai/tools/run-command.ts | 386 +- .../app/api/chat/agent.ts | 64 + .../app/api/chat/route.ts | 118 +- apps/vibe-coding-platform/next.config.ts | 3 +- apps/vibe-coding-platform/package.json | 2 + apps/vibe-coding-platform/pnpm-lock.yaml | 3807 +++++++++++++++-- apps/vibe-coding-platform/tsconfig.json | 3 + 17 files changed, 4164 insertions(+), 831 deletions(-) rename apps/vibe-coding-platform/ai/tools/{create-sandbox.md => create-sandbox.description.ts} (64%) rename apps/vibe-coding-platform/ai/tools/{generate-files.md => generate-files.description.ts} (62%) rename apps/vibe-coding-platform/ai/tools/{get-sandbox-url.md => get-sandbox-url.description.ts} (70%) create mode 100644 apps/vibe-coding-platform/ai/tools/run-command.description.ts delete mode 100644 apps/vibe-coding-platform/ai/tools/run-command.md create mode 100644 apps/vibe-coding-platform/app/api/chat/agent.ts diff --git a/apps/vibe-coding-platform/README.md b/apps/vibe-coding-platform/README.md index e215bc4ccf..0c5fb94463 100644 --- a/apps/vibe-coding-platform/README.md +++ b/apps/vibe-coding-platform/README.md @@ -1,5 +1,7 @@ This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). +This project integrates [Workflow DevKit](https://useworkflow.dev/) to support a durable and reliable AI agent with automatic retries and state management. + ## Getting Started First, run the development server: diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.md b/apps/vibe-coding-platform/ai/tools/create-sandbox.description.ts similarity index 64% rename from apps/vibe-coding-platform/ai/tools/create-sandbox.md rename to apps/vibe-coding-platform/ai/tools/create-sandbox.description.ts index f8cf0075f6..0e45744897 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.md +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.description.ts @@ -1,4 +1,4 @@ -Use this tool to create a new Vercel Sandbox — an ephemeral, isolated Linux container that serves as your development environment for the current session. This sandbox provides a secure workspace where you can upload files, install dependencies, run commands, start development servers, and preview web apps. Each sandbox is uniquely identified and must be referenced for all subsequent operations (e.g., file generation, command execution, or URL access). +export default `Use this tool to create a new Vercel Sandbox — an ephemeral, isolated Linux container that serves as your development environment for the current session. This sandbox provides a secure workspace where you can upload files, install dependencies, run commands, start development servers, and preview web apps. Each sandbox is uniquely identified and must be referenced for all subsequent operations (e.g., file generation, command execution, or URL access). ## When to Use This Tool @@ -13,17 +13,17 @@ Use this tool **once per session** when: After creation, the sandbox allows you to: -- Upload and manage files via `Generate Files` -- Execute shell commands with `Run Command` and `Wait Command` -- Access running servers through public URLs using `Get Sandbox URL` +- Upload and manage files via \`Generate Files\` +- Execute shell commands with \`Run Command\` and \`Wait Command\` +- Access running servers through public URLs using \`Get Sandbox URL\` Each sandbox mimics a real-world development environment and supports rapid iteration and testing without polluting the local system. The base system is Amazon Linux 2023 with the following additional packages: -``` +\`\`\` bind-utils bzip2 findutils git gzip iputils libicu libjpeg libpng ncurses-libs openssl openssl-libs pnpm procps tar unzip which whois zstd -``` +\`\`\` -You can install additional packages using the `dnf` package manager. You can NEVER use port 8080 as it is reserved for internal applications. When requested, you need to use a different port. +You can install additional packages using the \`dnf\` package manager. You can NEVER use port 8080 as it is reserved for internal applications. When requested, you need to use a different port. ## Best Practices @@ -36,7 +36,7 @@ You can install additional packages using the `dnf` package manager. You can NEV User: Can we start fresh? I want to rebuild the project from scratch. -Assistant: Got it — I’ll create a new sandbox so we can start clean. +Assistant: Got it — I'll create a new sandbox so we can start clean. *Calls Create Sandbox* @@ -48,8 +48,9 @@ Skip using this tool when: 2. You only need to upload files (use Generate Files) 3. You want to execute or wait for a command (use Run Command / Wait Command) 4. You want to preview the application (use Get Sandbox URL) -5. The user hasn’t asked to reset the environment +5. The user hasn't asked to reset the environment ## Summary Use Create Sandbox to initialize a secure, temporary development environment — but **only once per session**. Treat the sandbox as the core workspace for all follow-up actions unless the user explicitly asks to discard and start anew. +` diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts index 8c4422019d..8b5aedb44c 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts @@ -1,75 +1,84 @@ -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessageChunk } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' import { tool } from 'ai' -import description from './create-sandbox.md' +import description from './create-sandbox.description' import z from 'zod/v3' +import { getWritable } from 'workflow' -interface Params { - writer: UIMessageStreamWriter> -} +const inputSchema = z.object({ + timeout: z + .number() + .min(600000) + .max(2700000) + .optional() + .describe( + 'Maximum time in milliseconds the Vercel Sandbox will remain active before automatically shutting down. Minimum 600000ms (10 minutes), maximum 2700000ms (45 minutes). Defaults to 600000ms (10 minutes). The sandbox will terminate all running processes when this timeout is reached.', + ), + ports: z + .array(z.number()) + .max(2) + .optional() + .describe( + 'Array of network ports to expose and make accessible from outside the Vercel Sandbox. These ports allow web servers, APIs, or other services running inside the Vercel Sandbox to be reached externally. Common ports include 3000 (Next.js), 8000 (Python servers), 5000 (Flask), etc.', + ), +}) -export const createSandbox = ({ writer }: Params) => - tool({ - description, - inputSchema: z.object({ - timeout: z - .number() - .min(600000) - .max(2700000) - .optional() - .describe( - 'Maximum time in milliseconds the Vercel Sandbox will remain active before automatically shutting down. Minimum 600000ms (10 minutes), maximum 2700000ms (45 minutes). Defaults to 600000ms (10 minutes). The sandbox will terminate all running processes when this timeout is reached.' - ), - ports: z - .array(z.number()) - .max(2) - .optional() - .describe( - 'Array of network ports to expose and make accessible from outside the Vercel Sandbox. These ports allow web servers, APIs, or other services running inside the Vercel Sandbox to be reached externally. Common ports include 3000 (Next.js), 8000 (Python servers), 5000 (Flask), etc.' - ), - }), - execute: async ({ timeout, ports }, { toolCallId }) => { - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { status: 'loading' }, - }) +async function createSandboxStep( + { timeout, ports }: z.infer, + { toolCallId }: { toolCallId: string }, +) { + 'use step' + + const writable = getWritable>() + const writer = writable.getWriter() + + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { status: 'loading' }, + }) + + try { + const sandbox = await Sandbox.create({ + timeout: timeout ?? 600000, + ports, + }) - try { - const sandbox = await Sandbox.create({ - timeout: timeout ?? 600000, - ports, - }) + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { sandboxId: sandbox.sandboxId, status: 'done' }, + }) - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { sandboxId: sandbox.sandboxId, status: 'done' }, - }) + return ( + `Sandbox created with ID: ${sandbox.sandboxId}.` + + `\nYou can now upload files, run commands, and access services on the exposed ports.` + ) + } catch (error) { + const richError = getRichError({ + action: 'Creating Sandbox', + error, + }) - return ( - `Sandbox created with ID: ${sandbox.sandboxId}.` + - `\nYou can now upload files, run commands, and access services on the exposed ports.` - ) - } catch (error) { - const richError = getRichError({ - action: 'Creating Sandbox', - error, - }) + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { + error: { message: richError.error.message }, + status: 'error', + }, + }) - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { - error: { message: richError.error.message }, - status: 'error', - }, - }) + console.log('Error creating Sandbox:', richError.error) + return richError.message + } +} - console.log('Error creating Sandbox:', richError.error) - return richError.message - } - }, +export const createSandbox = () => + tool({ + description, + inputSchema, + execute: createSandboxStep, }) diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.md b/apps/vibe-coding-platform/ai/tools/generate-files.description.ts similarity index 62% rename from apps/vibe-coding-platform/ai/tools/generate-files.md rename to apps/vibe-coding-platform/ai/tools/generate-files.description.ts index 96b3fc8afd..0dd83f04f3 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.md +++ b/apps/vibe-coding-platform/ai/tools/generate-files.description.ts @@ -1,8 +1,8 @@ -Use this tool to generate and upload code files into an existing Vercel Sandbox. It leverages an LLM to create file contents based on the current conversation context and user intent, then writes them directly into the sandbox file system. +export default `Use this tool to generate and upload code files into an existing Vercel Sandbox. It leverages an LLM to create file contents based on the current conversation context and user intent, then writes them directly into the sandbox file system. The generated files should be considered correct on first iteration and suitable for immediate use in the sandbox environment. This tool is essential for scaffolding applications, adding new features, writing configuration files, or fixing missing components. -All file paths must be relative to the sandbox root (e.g., `src/index.ts`, `package.json`, `components/Button.tsx`). +All file paths must be relative to the sandbox root (e.g., \`src/index.ts\`, \`package.json\`, \`components/Button.tsx\`). ## When to Use This Tool @@ -11,13 +11,13 @@ Use Generate Files when: 1. You need to create one or more new files as part of a feature, scaffold, or fix 2. The user requests code that implies file creation (e.g., new routes, APIs, components, services) 3. You need to bootstrap a new application structure inside a sandbox -4. You’re completing a multi-step task that involves generating or updating source code +4. You're completing a multi-step task that involves generating or updating source code 5. A prior command failed due to a missing file, and you need to supply it ## File Generation Guidelines - Every file must be complete, valid, and runnable where applicable -- File contents must reflect the user’s intent and the overall session context +- File contents must reflect the user's intent and the overall session context - File paths must be well-structured and use consistent naming conventions - Generated files should assume compatibility with other existing files in the sandbox @@ -25,24 +25,24 @@ Use Generate Files when: - Avoid redundant file generation if the file already exists and is unchanged - Use conventional file/folder structures for the tech stack in use -- If replacing an existing file, ensure the update fully satisfies the user’s request +- If replacing an existing file, ensure the update fully satisfies the user's request ## Examples of When to Use This Tool -User: Add a `NavBar.tsx` component and include it in `App.tsx` -Assistant: I’ll generate the `NavBar.tsx` file and update `App.tsx` to include it. +User: Add a \`NavBar.tsx\` component and include it in \`App.tsx\` +Assistant: I'll generate the \`NavBar.tsx\` file and update \`App.tsx\` to include it. *Uses Generate Files to create:* -- `components/NavBar.tsx` -- Modified `App.tsx` with import and usage of `NavBar` +- \`components/NavBar.tsx\` +- Modified \`App.tsx\` with import and usage of \`NavBar\` -User: Let’s scaffold a simple Express server with a `/ping` route. -Assistant: I’ll generate the necessary files to start the Express app. +User: Let's scaffold a simple Express server with a \`/ping\` route. +Assistant: I'll generate the necessary files to start the Express app. *Uses Generate Files to create:* -- `package.json` with Express as a dependency -- `index.js` with basic server and `/ping` route +- \`package.json\` with Express as a dependency +- \`index.js\` with basic server and \`/ping\` route ## When NOT to Use This Tool @@ -50,9 +50,9 @@ Assistant: I’ll generate the necessary files to start the Express app. Avoid using this tool when: 1. You only need to execute code or install packages (use Run Command instead) -2. You’re waiting for a command to finish (use Wait Command) +2. You're waiting for a command to finish (use Wait Command) 3. You want to preview a running server or UI (use Get Sandbox URL) -4. You haven’t created a sandbox yet (use Create Sandbox first) +4. You haven't created a sandbox yet (use Create Sandbox first) ## Output Behavior @@ -61,3 +61,4 @@ After generation, the tool will return a list of the files created, including th ## Summary Use Generate Files to programmatically create or update files in your Vercel Sandbox. It enables fast iteration, contextual coding, and dynamic file management — all driven by user intent and conversation context. +` diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.ts b/apps/vibe-coding-platform/ai/tools/generate-files.ts index 9f7d12d9fe..4f2d5a759e 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.ts +++ b/apps/vibe-coding-platform/ai/tools/generate-files.ts @@ -1,107 +1,127 @@ -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getContents, type File } from './generate-files/get-contents' import { getRichError } from './get-rich-error' import { getWriteFiles } from './generate-files/get-write-files' import { tool } from 'ai' -import description from './generate-files.md' +import description from './generate-files.description' import z from 'zod/v3' +import { + FatalError, + getStepMetadata, + getWritable, + RetryableError, +} from 'workflow' + +const inputSchema = z.object({ + sandboxId: z.string(), + paths: z.array(z.string()), +}) interface Params { modelId: string - writer: UIMessageStreamWriter> } -export const generateFiles = ({ writer, modelId }: Params) => - tool({ - description, - inputSchema: z.object({ - sandboxId: z.string(), - paths: z.array(z.string()), - }), - execute: async ({ sandboxId, paths }, { toolCallId, messages }) => { - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { paths: [], status: 'generating' }, - }) - - let sandbox: Sandbox | null = null - - try { - sandbox = await Sandbox.get({ sandboxId }) - } catch (error) { - const richError = getRichError({ - action: 'get sandbox by id', - args: { sandboxId }, - error, - }) +async function generateFilesStep( + { sandboxId, paths }: z.infer, + { toolCallId, messages }: { toolCallId: string; messages: any }, + modelId: string, +) { + 'use step' - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { error: richError.error, paths: [], status: 'error' }, - }) + const writable = getWritable>() + const writer = writable.getWriter() as any as UIMessageStreamWriter< + UIMessage + > - return richError.message - } + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { paths: [], status: 'generating' }, + }) - const writeFiles = getWriteFiles({ sandbox, toolCallId, writer }) - const iterator = getContents({ messages, modelId, paths }) - const uploaded: File[] = [] - - try { - for await (const chunk of iterator) { - if (chunk.files.length > 0) { - const error = await writeFiles(chunk) - if (error) { - return error - } else { - uploaded.push(...chunk.files) - } - } else { - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { - status: 'generating', - paths: chunk.paths, - }, - }) - } - } - } catch (error) { - const richError = getRichError({ - action: 'generate file contents', - args: { modelId, paths }, - error, - }) + let sandbox: Sandbox | null = null + + try { + sandbox = await Sandbox.get({ sandboxId }) + } catch (error) { + const richError = getRichError({ + action: 'get sandbox by id', + args: { sandboxId }, + error, + }) + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { error: richError.error, paths: [], status: 'error' }, + }) + + return richError.message + } + + const writeFiles = getWriteFiles({ sandbox, toolCallId, writer }) + const iterator = getContents({ messages, modelId, paths }) + const uploaded: File[] = [] + + try { + for await (const chunk of iterator) { + if (chunk.files.length > 0) { + const error = await writeFiles(chunk) + if (error) { + return error + } else { + uploaded.push(...chunk.files) + } + } else { writer.write({ id: toolCallId, type: 'data-generating-files', data: { - error: richError.error, - status: 'error', - paths, + status: 'generating', + paths: chunk.paths, }, }) - - return richError.message } + } + } catch (error) { + const richError = getRichError({ + action: 'generate file contents', + args: { modelId, paths }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { + error: richError.error, + status: 'error', + paths, + }, + }) + + return richError.message + } - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { paths: uploaded.map((file) => file.path), status: 'done' }, - }) - - return `Successfully generated and uploaded ${ - uploaded.length - } files. Their paths and contents are as follows: - ${uploaded - .map((file) => `Path: ${file.path}\nContent: ${file.content}\n`) - .join('\n')}` - }, + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { paths: uploaded.map((file) => file.path), status: 'done' }, + }) + + return `Successfully generated and uploaded ${ + uploaded.length + } files. Their paths and contents are as follows: + ${uploaded + .map((file) => `Path: ${file.path}\nContent: ${file.content}\n`) + .join('\n')}` +} + +export const generateFiles = ({ modelId }: Params) => + tool({ + description, + inputSchema, + execute: (input, context) => generateFilesStep(input, context, modelId), }) diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.md b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.description.ts similarity index 70% rename from apps/vibe-coding-platform/ai/tools/get-sandbox-url.md rename to apps/vibe-coding-platform/ai/tools/get-sandbox-url.description.ts index 5076855674..fb33d3368a 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.md +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.description.ts @@ -1,4 +1,4 @@ -Use this tool to retrieve a publicly accessible URL for a specific port that was exposed during the creation of a Vercel Sandbox. This allows users (and the assistant) to preview web applications, access APIs, or interact with services running inside the sandbox via HTTP. +export default `Use this tool to retrieve a publicly accessible URL for a specific port that was exposed during the creation of a Vercel Sandbox. This allows users (and the assistant) to preview web applications, access APIs, or interact with services running inside the sandbox via HTTP. ⚠️ The requested port must have been explicitly declared when the sandbox was created. If the port was not exposed at sandbox creation time, this tool will NOT work for that port. @@ -13,17 +13,17 @@ Use Get Sandbox URL when: ## Critical Requirements -- The port must have been **explicitly exposed** in the `Create Sandbox` step - - Example: `ports: [3000]` +- The port must have been **explicitly exposed** in the \`Create Sandbox\` step + - Example: \`ports: [3000]\` - The command serving on that port must be actively running - - Use `Run Command` followed by `Wait Command` (if needed) to start the server + - Use \`Run Command\` followed by \`Wait Command\` (if needed) to start the server ## Best Practices - Only call this tool after the server process has successfully started - Use typical ports based on framework defaults (e.g., 3000 for Next.js, 5173 for Vite, 8080 for Node APIs) - If multiple services run on different ports, ensure each port was exposed up front during sandbox creation -- Don’t attempt to expose or discover ports dynamically after creation — only predefined ports are valid +- Don't attempt to expose or discover ports dynamically after creation — only predefined ports are valid ## When NOT to Use This Tool @@ -41,7 +41,7 @@ User: Can I preview the app after it's built? Assistant: 1. Create Sandbox: expose port 3000 2. Generate Files: scaffold the app -3. Run Command: `npm run dev` +3. Run Command: \`npm run dev\` 4. (Optional) Wait Command 5. Get Sandbox URL: port 3000 → Returns: a public URL the user can open in a browser @@ -49,4 +49,5 @@ Assistant: ## Summary -Use Get Sandbox URL to access live previews of services running inside the sandbox — but only for ports that were explicitly exposed during sandbox creation. If the port wasn’t declared, it will not be accessible externally. +Use Get Sandbox URL to access live previews of services running inside the sandbox — but only for ports that were explicitly exposed during sandbox creation. If the port wasn't declared, it will not be accessible externally. +` diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts index 719921c61a..f2dc103ac0 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts @@ -1,45 +1,54 @@ -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessageChunk } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { tool } from 'ai' -import description from './get-sandbox-url.md' +import description from './get-sandbox-url.description' import z from 'zod/v3' +import { getWritable } from 'workflow' -interface Params { - writer: UIMessageStreamWriter> +const inputSchema = z.object({ + sandboxId: z + .string() + .describe( + "The unique identifier of the Vercel Sandbox (e.g., 'sbx_abc123xyz'). This ID is returned when creating a Vercel Sandbox and is used to reference the specific sandbox instance.", + ), + port: z + .number() + .describe( + 'The port number where a service is running inside the Vercel Sandbox (e.g., 3000 for Next.js dev server, 8000 for Python apps, 5000 for Flask). The port must have been exposed when the sandbox was created or when running commands.', + ), +}) + +async function getSandboxURLStep( + { sandboxId, port }: z.infer, + { toolCallId }: { toolCallId: string }, +) { + 'use step' + + const writable = getWritable>() + const writer = writable.getWriter() + + writer.write({ + id: toolCallId, + type: 'data-get-sandbox-url', + data: { status: 'loading' }, + }) + + const sandbox = await Sandbox.get({ sandboxId }) + const url = sandbox.domain(port) + + writer.write({ + id: toolCallId, + type: 'data-get-sandbox-url', + data: { url, status: 'done' }, + }) + + return { url } } -export const getSandboxURL = ({ writer }: Params) => +export const getSandboxURL = () => tool({ description, - inputSchema: z.object({ - sandboxId: z - .string() - .describe( - "The unique identifier of the Vercel Sandbox (e.g., 'sbx_abc123xyz'). This ID is returned when creating a Vercel Sandbox and is used to reference the specific sandbox instance." - ), - port: z - .number() - .describe( - 'The port number where a service is running inside the Vercel Sandbox (e.g., 3000 for Next.js dev server, 8000 for Python apps, 5000 for Flask). The port must have been exposed when the sandbox was created or when running commands.' - ), - }), - execute: async ({ sandboxId, port }, { toolCallId }) => { - writer.write({ - id: toolCallId, - type: 'data-get-sandbox-url', - data: { status: 'loading' }, - }) - - const sandbox = await Sandbox.get({ sandboxId }) - const url = sandbox.domain(port) - - writer.write({ - id: toolCallId, - type: 'data-get-sandbox-url', - data: { url, status: 'done' }, - }) - - return { url } - }, + inputSchema, + execute: getSandboxURLStep, }) diff --git a/apps/vibe-coding-platform/ai/tools/index.ts b/apps/vibe-coding-platform/ai/tools/index.ts index c5aa832556..0fcb82b924 100644 --- a/apps/vibe-coding-platform/ai/tools/index.ts +++ b/apps/vibe-coding-platform/ai/tools/index.ts @@ -1,5 +1,4 @@ -import type { InferUITools, UIMessage, UIMessageStreamWriter } from 'ai' -import type { DataPart } from '../messages/data-parts' +import type { InferUITools } from 'ai' import { createSandbox } from './create-sandbox' import { generateFiles } from './generate-files' import { getSandboxURL } from './get-sandbox-url' @@ -7,15 +6,14 @@ import { runCommand } from './run-command' interface Params { modelId: string - writer: UIMessageStreamWriter> } -export function tools({ modelId, writer }: Params) { +export function tools({ modelId }: Params) { return { - createSandbox: createSandbox({ writer }), - generateFiles: generateFiles({ writer, modelId }), - getSandboxURL: getSandboxURL({ writer }), - runCommand: runCommand({ writer }), + createSandbox: createSandbox(), + generateFiles: generateFiles({ modelId }), + getSandboxURL: getSandboxURL(), + runCommand: runCommand(), } } diff --git a/apps/vibe-coding-platform/ai/tools/run-command.description.ts b/apps/vibe-coding-platform/ai/tools/run-command.description.ts new file mode 100644 index 0000000000..cfc071b3b5 --- /dev/null +++ b/apps/vibe-coding-platform/ai/tools/run-command.description.ts @@ -0,0 +1,68 @@ +export default `Use this tool to run a command inside an existing Vercel Sandbox. You can choose whether the command should block until completion or run in the background by setting the \`wait\` parameter: + +- \`wait: true\` → Command runs and **must complete** before the response is returned. +- \`wait: false\` → Command starts in the background, and the response returns immediately with its \`commandId\`. + +⚠️ Commands are stateless — each one runs in a fresh shell session with **no memory** of previous commands. You CANNOT rely on \`cd\`, but other state like shell exports or background processes from prior commands should be available. + +## When to Use This Tool + +Use Run Command when: + +1. You need to install dependencies (e.g., \`pnpm install\`) +2. You want to run a build or test process (e.g., \`pnpm build\`, \`vite build\`) +3. You need to launch a development server or long-running process +4. You need to compile or execute code within the sandbox +5. You want to run a task in the background without blocking the session + +## Sequencing Rules + +- If two commands depend on each other, **set \`wait: true\` on the first** to ensure it finishes before starting the second + - ✅ Good: Run \`pnpm install\` with \`wait: true\` → then run \`pnpm dev\` + - ❌ Bad: Run both with \`wait: false\` and expect them to be sequential +- Do **not** issue multiple sequential commands in one call + - ❌ \`cd src && node index.js\` + - ✅ \`node src/index.js\` +- Do **not** assume directory state is preserved — use full relative paths + +## Command Format + +- Separate the base command from its arguments + - ✅ \`{ command: "pnpm", args: ["install", "--verbose"], wait: true }\` + - ❌ \`{ command: "pnpm install --verbose" }\` +- Avoid shell syntax like pipes, redirections, or \`&&\`. If unavoidable, ensure it works in a stateless, single-session execution + +## When to Set \`wait\` to True + +- The next step depends on the result of the command +- The command must finish before accessing its output +- Example: Installing dependencies before building, compiling before running tests + +## When to Set \`wait\` to False + +- The command is intended to stay running indefinitely (e.g., a dev server) +- The command has no impact on subsequent operations (e.g., printing logs) + +## Other Rules + +- When running \`pnpm dev\` in a Next.js or Vite project, HMR can handle updates so generally you don't need to kill the server process and start it again after changing files. + +## Examples + + +User: Install dependencies and then run the dev server +Assistant: +1. Run Command: \`{ command: "pnpm", args: ["install"], wait: true }\` +2. Run Command: \`{ command: "pnpm", args: ["run", "dev"], wait: false }\` + + + +User: Build the app with Vite +Assistant: +Run Command: \`{ command: "vite", args: ["build"], wait: true }\` + + +## Summary + +Use Run Command to start shell commands in the sandbox, controlling execution flow with the \`wait\` flag. Commands are stateless and isolated — use relative paths, and only run long-lived processes with \`wait: false\`. +` diff --git a/apps/vibe-coding-platform/ai/tools/run-command.md b/apps/vibe-coding-platform/ai/tools/run-command.md deleted file mode 100644 index 2dafae2ed0..0000000000 --- a/apps/vibe-coding-platform/ai/tools/run-command.md +++ /dev/null @@ -1,67 +0,0 @@ -Use this tool to run a command inside an existing Vercel Sandbox. You can choose whether the command should block until completion or run in the background by setting the `wait` parameter: - -- `wait: true` → Command runs and **must complete** before the response is returned. -- `wait: false` → Command starts in the background, and the response returns immediately with its `commandId`. - -⚠️ Commands are stateless — each one runs in a fresh shell session with **no memory** of previous commands. You CANNOT rely on `cd`, but other state like shell exports or background processes from prior commands should be available. - -## When to Use This Tool - -Use Run Command when: - -1. You need to install dependencies (e.g., `pnpm install`) -2. You want to run a build or test process (e.g., `pnpm build`, `vite build`) -3. You need to launch a development server or long-running process -4. You need to compile or execute code within the sandbox -5. You want to run a task in the background without blocking the session - -## Sequencing Rules - -- If two commands depend on each other, **set `wait: true` on the first** to ensure it finishes before starting the second - - ✅ Good: Run `pnpm install` with `wait: true` → then run `pnpm dev` - - ❌ Bad: Run both with `wait: false` and expect them to be sequential -- Do **not** issue multiple sequential commands in one call - - ❌ `cd src && node index.js` - - ✅ `node src/index.js` -- Do **not** assume directory state is preserved — use full relative paths - -## Command Format - -- Separate the base command from its arguments - - ✅ `{ command: "pnpm", args: ["install", "--verbose"], wait: true }` - - ❌ `{ command: "pnpm install --verbose" }` -- Avoid shell syntax like pipes, redirections, or `&&`. If unavoidable, ensure it works in a stateless, single-session execution - -## When to Set `wait` to True - -- The next step depends on the result of the command -- The command must finish before accessing its output -- Example: Installing dependencies before building, compiling before running tests - -## When to Set `wait` to False - -- The command is intended to stay running indefinitely (e.g., a dev server) -- The command has no impact on subsequent operations (e.g., printing logs) - -## Other Rules - -- When running `pnpm dev` in a Next.js or Vite project, HMR can handle updates so generally you don't need to kill the server process and start it again after changing files. - -## Examples - - -User: Install dependencies and then run the dev server -Assistant: -1. Run Command: `{ command: "pnpm", args: ["install"], wait: true }` -2. Run Command: `{ command: "pnpm", args: ["run", "dev"], wait: false }` - - - -User: Build the app with Vite -Assistant: -Run Command: `{ command: "vite", args: ["build"], wait: true }` - - -## Summary - -Use Run Command to start shell commands in the sandbox, controlling execution flow with the `wait` flag. Commands are stateless and isolated — use relative paths, and only run long-lived processes with `wait: false`. diff --git a/apps/vibe-coding-platform/ai/tools/run-command.ts b/apps/vibe-coding-platform/ai/tools/run-command.ts index 398648ef5e..8891c57a57 100644 --- a/apps/vibe-coding-platform/ai/tools/run-command.ts +++ b/apps/vibe-coding-platform/ai/tools/run-command.ts @@ -1,204 +1,204 @@ -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessageChunk } from 'ai' import type { DataPart } from '../messages/data-parts' import { Command, Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' import { tool } from 'ai' -import description from './run-command.md' +import description from './run-command.description' import z from 'zod/v3' +import { getWritable } from 'workflow' + +const inputSchema = z.object({ + sandboxId: z + .string() + .describe('The ID of the Vercel Sandbox to run the command in'), + command: z + .string() + .describe( + "The base command to run (e.g., 'npm', 'node', 'python', 'ls', 'cat'). Do NOT include arguments here. IMPORTANT: Each command runs independently in a fresh shell session - there is no persistent state between commands. You cannot use 'cd' to change directories for subsequent commands.", + ), + args: z + .array(z.string()) + .optional() + .describe( + "Array of arguments for the command. Each argument should be a separate string (e.g., ['install', '--verbose'] for npm install --verbose, or ['src/index.js'] to run a file, or ['-la', './src'] to list files). IMPORTANT: Use relative paths (e.g., 'src/file.js') or absolute paths instead of trying to change directories with 'cd' first, since each command runs in a fresh shell session.", + ), + sudo: z.boolean().optional().describe('Whether to run the command with sudo'), + wait: z + .boolean() + .describe( + 'Whether to wait for the command to finish before returning. If true, the command will block until it completes, and you will receive its output.', + ), +}) + +async function runCommandStep( + { sandboxId, command, sudo, wait, args = [] }: z.infer, + { toolCallId }: { toolCallId: string }, +) { + 'use step' + + const writable = getWritable>() + const writer = writable.getWriter() + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { sandboxId, command, args, status: 'executing' }, + }) + + let sandbox: Sandbox | null = null + + try { + sandbox = await Sandbox.get({ sandboxId }) + } catch (error) { + const richError = getRichError({ + action: 'get sandbox by id', + args: { sandboxId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } + + let cmd: Command | null = null + + try { + cmd = await sandbox.runCommand({ + detached: true, + cmd: command, + args, + sudo, + }) + } catch (error) { + const richError = getRichError({ + action: 'run command in sandbox', + args: { sandboxId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'executing', + }, + }) -interface Params { - writer: UIMessageStreamWriter> + if (!wait) { + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'running', + }, + }) + + return `The command \`${command} ${args.join( + ' ', + )}\` has been started in the background in the sandbox with ID \`${sandboxId}\` with the commandId ${ + cmd.cmdId + }.` + } + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'waiting', + }, + }) + + const done = await cmd.wait() + try { + const [stdout, stderr] = await Promise.all([done.stdout(), done.stderr()]) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + exitCode: done.exitCode, + status: 'done', + }, + }) + + return ( + `The command \`${command} ${args.join( + ' ', + )}\` has finished with exit code ${done.exitCode}.` + + `Stdout of the command was: \n` + + `\`\`\`\n${stdout}\n\`\`\`\n` + + `Stderr of the command was: \n` + + `\`\`\`\n${stderr}\n\`\`\`` + ) + } catch (error) { + const richError = getRichError({ + action: 'wait for command to finish', + args: { sandboxId, commandId: cmd.cmdId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } } -export const runCommand = ({ writer }: Params) => +export const runCommand = () => tool({ description, - inputSchema: z.object({ - sandboxId: z - .string() - .describe('The ID of the Vercel Sandbox to run the command in'), - command: z - .string() - .describe( - "The base command to run (e.g., 'npm', 'node', 'python', 'ls', 'cat'). Do NOT include arguments here. IMPORTANT: Each command runs independently in a fresh shell session - there is no persistent state between commands. You cannot use 'cd' to change directories for subsequent commands." - ), - args: z - .array(z.string()) - .optional() - .describe( - "Array of arguments for the command. Each argument should be a separate string (e.g., ['install', '--verbose'] for npm install --verbose, or ['src/index.js'] to run a file, or ['-la', './src'] to list files). IMPORTANT: Use relative paths (e.g., 'src/file.js') or absolute paths instead of trying to change directories with 'cd' first, since each command runs in a fresh shell session." - ), - sudo: z - .boolean() - .optional() - .describe('Whether to run the command with sudo'), - wait: z - .boolean() - .describe( - 'Whether to wait for the command to finish before returning. If true, the command will block until it completes, and you will receive its output.' - ), - }), - execute: async ( - { sandboxId, command, sudo, wait, args = [] }, - { toolCallId } - ) => { - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { sandboxId, command, args, status: 'executing' }, - }) - - let sandbox: Sandbox | null = null - - try { - sandbox = await Sandbox.get({ sandboxId }) - } catch (error) { - const richError = getRichError({ - action: 'get sandbox by id', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - - let cmd: Command | null = null - - try { - cmd = await sandbox.runCommand({ - detached: true, - cmd: command, - args, - sudo, - }) - } catch (error) { - const richError = getRichError({ - action: 'run command in sandbox', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'executing', - }, - }) - - if (!wait) { - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'running', - }, - }) - - return `The command \`${command} ${args.join( - ' ' - )}\` has been started in the background in the sandbox with ID \`${sandboxId}\` with the commandId ${ - cmd.cmdId - }.` - } - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'waiting', - }, - }) - - const done = await cmd.wait() - try { - const [stdout, stderr] = await Promise.all([ - done.stdout(), - done.stderr(), - ]) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - exitCode: done.exitCode, - status: 'done', - }, - }) - - return ( - `The command \`${command} ${args.join( - ' ' - )}\` has finished with exit code ${done.exitCode}.` + - `Stdout of the command was: \n` + - `\`\`\`\n${stdout}\n\`\`\`\n` + - `Stderr of the command was: \n` + - `\`\`\`\n${stderr}\n\`\`\`` - ) - } catch (error) { - const richError = getRichError({ - action: 'wait for command to finish', - args: { sandboxId, commandId: cmd.cmdId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - }, + inputSchema, + execute: runCommandStep, }) diff --git a/apps/vibe-coding-platform/app/api/chat/agent.ts b/apps/vibe-coding-platform/app/api/chat/agent.ts new file mode 100644 index 0000000000..5dd1fac6bf --- /dev/null +++ b/apps/vibe-coding-platform/app/api/chat/agent.ts @@ -0,0 +1,64 @@ +import { convertToModelMessages, type UIMessageChunk } from 'ai' +import { type ChatUIMessage } from '@/components/chat/types' +import { getModelOptions } from '@/ai/gateway' +import { tools } from '@/ai/tools' +import { DurableAgent } from '@workflow/ai/agent' +import { getWritable } from 'workflow' + +export async function codingWorkflow({ + prompt, + modelId, + messages, + reasoningEffort, +}: { + prompt: string + modelId: string + messages: ChatUIMessage[] + reasoningEffort?: 'minimal' | 'low' | 'medium' +}) { + 'use workflow' + + const writable = getWritable() + + const agent = new DurableAgent({ + // TODO: wire up all these options, not just the modelId + // ...getModelOptions(modelId, { reasoningEffort }), + + model: getModelOptions(modelId, { reasoningEffort }).model.modelId, + system: prompt, + tools: tools({ modelId }), + }) + + await agent.stream({ + messages: convertToModelMessages( + messages.map((message) => { + message.parts = message.parts.map((part) => { + if (part.type === 'data-report-errors') { + return { + type: 'text', + text: + `There are errors in the generated code. This is the summary of the errors we have:\n` + + `\`\`\`${part.data.summary}\`\`\`\n` + + (part.data.paths?.length + ? `The following files may contain errors:\n` + + `\`\`\`${part.data.paths?.join('\n')}\`\`\`\n` + : '') + + `Fix the errors reported.`, + } + } + return part + }) + return message + }), + ), + writable, + // TODO: wire up stopWhen in DurableAgent + // stopWhen: stepCountIs(20), + + // TODO: wire up onError in DurableAgent + // onError: (error) => { + // console.error('Error communicating with AI') + // console.error(JSON.stringify(error, null, 2)) + // }, + }) +} diff --git a/apps/vibe-coding-platform/app/api/chat/route.ts b/apps/vibe-coding-platform/app/api/chat/route.ts index 865be9ce69..ea2b3079ef 100644 --- a/apps/vibe-coding-platform/app/api/chat/route.ts +++ b/apps/vibe-coding-platform/app/api/chat/route.ts @@ -1,17 +1,12 @@ import { type ChatUIMessage } from '@/components/chat/types' -import { - convertToModelMessages, - createUIMessageStream, - createUIMessageStreamResponse, - stepCountIs, - streamText, -} from 'ai' +import { createUIMessageStreamResponse } from 'ai' import { DEFAULT_MODEL } from '@/ai/constants' import { NextResponse } from 'next/server' import { getAvailableModels, getModelOptions } from '@/ai/gateway' import { checkBotId } from 'botid/server' -import { tools } from '@/ai/tools' import prompt from './prompt.md' +import { start } from 'workflow/api' +import { codingWorkflow } from './agent' interface BodyData { messages: ChatUIMessage[] @@ -32,56 +27,69 @@ export async function POST(req: Request) { if (!model) { return NextResponse.json( { error: `Model ${modelId} not found.` }, - { status: 400 } + { status: 400 }, ) } + const run = await start(codingWorkflow, [ + { + modelId, + reasoningEffort, + prompt, + messages, + }, + ]) + return createUIMessageStreamResponse({ - stream: createUIMessageStream({ - originalMessages: messages, - execute: ({ writer }) => { - const result = streamText({ - ...getModelOptions(modelId, { reasoningEffort }), - system: prompt, - messages: convertToModelMessages( - messages.map((message) => { - message.parts = message.parts.map((part) => { - if (part.type === 'data-report-errors') { - return { - type: 'text', - text: - `There are errors in the generated code. This is the summary of the errors we have:\n` + - `\`\`\`${part.data.summary}\`\`\`\n` + - (part.data.paths?.length - ? `The following files may contain errors:\n` + - `\`\`\`${part.data.paths?.join('\n')}\`\`\`\n` - : '') + - `Fix the errors reported.`, - } - } - return part - }) - return message - }) - ), - stopWhen: stepCountIs(20), - tools: tools({ modelId, writer }), - onError: (error) => { - console.error('Error communicating with AI') - console.error(JSON.stringify(error, null, 2)) - }, - }) - result.consumeStream() - writer.merge( - result.toUIMessageStream({ - sendReasoning: true, - sendStart: false, - messageMetadata: () => ({ - model: model.name, - }), - }) - ) - }, - }), + stream: run.readable, }) + + // return createUIMessageStreamResponse({ + // stream: createUIMessageStream({ + // originalMessages: messages, + // execute: ({ writer }) => { + // const result = streamText({ + // ...getModelOptions(modelId, { reasoningEffort }), + // system: prompt, + // messages: convertToModelMessages( + // messages.map((message) => { + // message.parts = message.parts.map((part) => { + // if (part.type === 'data-report-errors') { + // return { + // type: 'text', + // text: + // `There are errors in the generated code. This is the summary of the errors we have:\n` + + // `\`\`\`${part.data.summary}\`\`\`\n` + + // (part.data.paths?.length + // ? `The following files may contain errors:\n` + + // `\`\`\`${part.data.paths?.join('\n')}\`\`\`\n` + // : '') + + // `Fix the errors reported.`, + // } + // } + // return part + // }) + // return message + // }), + // ), + // stopWhen: stepCountIs(20), + // tools: tools({ modelId, writer }), + // onError: (error) => { + // console.error('Error communicating with AI') + // console.error(JSON.stringify(error, null, 2)) + // }, + // }) + // result.consumeStream() + // writer.merge( + // result.toUIMessageStream({ + // sendReasoning: true, + // sendStart: false, + // messageMetadata: () => ({ + // model: model.name, + // }), + // }), + // ) + // }, + // }), + // }) } diff --git a/apps/vibe-coding-platform/next.config.ts b/apps/vibe-coding-platform/next.config.ts index 3583ce5d54..9f3956e763 100644 --- a/apps/vibe-coding-platform/next.config.ts +++ b/apps/vibe-coding-platform/next.config.ts @@ -1,5 +1,6 @@ import type { NextConfig } from 'next' import { withBotId } from 'botid/next/config' +import { withWorkflow } from 'workflow/next' const nextConfig: NextConfig = { webpack(config) { @@ -32,4 +33,4 @@ const nextConfig: NextConfig = { }, } -export default withBotId(nextConfig) +export default withWorkflow(withBotId(nextConfig)) diff --git a/apps/vibe-coding-platform/package.json b/apps/vibe-coding-platform/package.json index a6c9423656..06d33cf681 100644 --- a/apps/vibe-coding-platform/package.json +++ b/apps/vibe-coding-platform/package.json @@ -23,6 +23,7 @@ "@radix-ui/react-select": "2.2.5", "@radix-ui/react-slot": "1.2.3", "@vercel/sandbox": "0.0.17", + "@workflow/ai": "4.0.1-beta.11", "ai": "5.0.59", "arctic": "3.7.0", "botid": "1.4.5", @@ -48,6 +49,7 @@ "swr": "2.3.4", "tailwind-merge": "3.3.1", "use-stick-to-bottom": "1.1.1", + "workflow": "4.0.1-beta.11", "zod": "3.25.76", "zustand": "5.0.6" }, diff --git a/apps/vibe-coding-platform/pnpm-lock.yaml b/apps/vibe-coding-platform/pnpm-lock.yaml index 1164383737..b8bcb81f85 100644 --- a/apps/vibe-coding-platform/pnpm-lock.yaml +++ b/apps/vibe-coding-platform/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: '@vercel/sandbox': specifier: 0.0.17 version: 0.0.17 + '@workflow/ai': + specifier: 4.0.1-beta.11 + version: 4.0.1-beta.11(ai@5.0.59(zod@3.25.76))(workflow@4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(svelte@5.43.3)(typescript@5.9.2)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1))) ai: specifier: 5.0.59 version: 5.0.59(zod@3.25.76) @@ -122,6 +125,9 @@ importers: use-stick-to-bottom: specifier: 1.1.1 version: 1.1.1(react@19.1.0) + workflow: + specifier: 4.0.1-beta.11 + version: 4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(svelte@5.43.3)(typescript@5.9.2)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)) zod: specifier: 3.25.76 version: 3.25.76 @@ -149,7 +155,7 @@ importers: version: 15.5.13 raw-loader: specifier: 4.0.2 - version: 4.0.2(webpack@5.101.0) + version: 4.0.2(webpack@5.101.0(@swc/core@1.11.24)) tailwindcss: specifier: ^4 version: 4.1.11 @@ -214,6 +220,129 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-sso@3.922.0': + resolution: {integrity: sha512-jdHs7uy7cSpiMvrxhYmqHyJxgK7hyqw4plG8OQ4YTBpq0SbfAxdoOuOkwJ1IVUUQho4otR1xYYjiX/8e8J8qwQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sts@3.922.0': + resolution: {integrity: sha512-dmmDC8qf2//VbuT8vSKiH0mxpUzyWImWs86WDm+LE2oos71wS8i+1GdLNhCVb13wQFSTsA3EX3tf9Q7vjrPF9g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.922.0': + resolution: {integrity: sha512-EvfP4cqJfpO3L2v5vkIlTkMesPtRwWlMfsaW6Tpfm7iYfBOuTi6jx60pMDMTyJNVfh6cGmXwh/kj1jQdR+w99Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.922.0': + resolution: {integrity: sha512-WikGQpKkROJSK3D3E7odPjZ8tU7WJp5/TgGdRuZw3izsHUeH48xMv6IznafpRTmvHcjAbDQj4U3CJZNAzOK/OQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.922.0': + resolution: {integrity: sha512-i72DgHMK7ydAEqdzU0Duqh60Q8W59EZmRJ73y0Y5oFmNOqnYsAI+UXyOoCsubp+Dkr6+yOwAn1gPt1XGE9Aowg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.922.0': + resolution: {integrity: sha512-bVF+pI5UCLNkvbiZr/t2fgTtv84s8FCdOGAPxQiQcw5qOZywNuuCCY3wIIchmQr6GJr8YFkEp5LgDCac5EC5aQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.922.0': + resolution: {integrity: sha512-agCwaD6mBihToHkjycL8ObIS2XOnWypWZZWhJSoWyHwFrhEKz1zGvgylK9Dc711oUfU+zU6J8e0JPKNJMNb3BQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.922.0': + resolution: {integrity: sha512-1DZOYezT6okslpvMW7oA2q+y17CJd4fxjNFH0jtThfswdh9CtG62+wxenqO+NExttq0UMaKisrkZiVrYQBTShw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.922.0': + resolution: {integrity: sha512-nbD3G3hShTYxLCkKMqLkLPtKwAAfxdY/k9jHtZmVBFXek2T6tQrqZHKxlAu+fd23Ga4/Aik7DLQQx1RA1a5ipg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.609.0': + resolution: {integrity: sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.609.0 + + '@aws-sdk/credential-provider-web-identity@3.922.0': + resolution: {integrity: sha512-wjGIhgMHGGQfQTdFaJphNOKyAL8wZs6znJdHADPVURmgR+EWLyN/0fDO1u7wx8xaLMZpbHIFWBEvf9TritR/cQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.922.0': + resolution: {integrity: sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.922.0': + resolution: {integrity: sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.922.0': + resolution: {integrity: sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.922.0': + resolution: {integrity: sha512-N4Qx/9KP3oVQBJOrSghhz8iZFtUC2NNeSZt88hpPhbqAEAtuX8aD8OzVcpnAtrwWqy82Yd2YTxlkqMGkgqnBsQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.922.0': + resolution: {integrity: sha512-uYvKCF1TGh/MuJ4TMqmUM0Csuao02HawcseG4LUDyxdUsd/EFuxalWq1Cx4fKZQ2K8F504efZBjctMAMNY+l7A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.922.0': + resolution: {integrity: sha512-44Y/rNNwhngR2KHp6gkx//TOr56/hx6s4l+XLjOqH7EBCHL7XhnrT1y92L+DLiroVr1tCSmO8eHQwBv0Y2+mvw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.922.0': + resolution: {integrity: sha512-/inmPnjZE0ZBE16zaCowAvouSx05FJ7p6BQYuzlJ8vxEU0sS0Hf8fvhuiRnN9V9eDUPIBY+/5EjbMWygXL4wlQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.609.0': + resolution: {integrity: sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/types@3.922.0': + resolution: {integrity: sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.922.0': + resolution: {integrity: sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.893.0': + resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.922.0': + resolution: {integrity: sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA==} + + '@aws-sdk/util-user-agent-node@3.922.0': + resolution: {integrity: sha512-NrPe/Rsr5kcGunkog0eBV+bY0inkRELsD2SacC4lQZvZiXf8VJ2Y7j+Yq1tB+h+FPLsdt3v9wItIvDf/laAm0Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.921.0': + resolution: {integrity: sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q==} + engines: {node: '>=18.0.0'} + + '@aws/lambda-invoke-store@0.1.1': + resolution: {integrity: sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA==} + engines: {node: '>=18.0.0'} + '@babel/runtime@7.28.2': resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} engines: {node: '>=6.9.0'} @@ -221,6 +350,162 @@ packages: '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} @@ -365,6 +650,9 @@ packages: '@jridgewell/gen-mapping@0.3.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -429,6 +717,14 @@ packages: cpu: [x64] os: [win32] + '@oclif/core@4.8.0': + resolution: {integrity: sha512-jteNUQKgJHLHFbbz806aGZqf+RJJ7t4gwF4MYa8fCwCxQ8/klJNWc0MvaJiBebk7Mc+J39mdlsB4XraaCKznFw==} + engines: {node: '>=18.0.0'} + + '@oclif/plugin-help@6.2.35': + resolution: {integrity: sha512-ZMcQTsHaiCEOZIRZoynUQ+98fyM1Adoqx4LbOgYWRVKXKbavHPCZKm6F+/y0GpWscXVoeGnvJO6GIBsigrqaSA==} + engines: {node: '>=18.0.0'} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -451,6 +747,9 @@ packages: '@oslojs/jwt@0.2.0': resolution: {integrity: sha512-bLE7BtHrURedCn4Mco3ma9L4Y1GR2SMBuIvjWr7rmQ4/W/4Jy70TIAgZ+0nIlk0xHz1vNP8x8DCns45Sb2XRbg==} + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -797,116 +1096,524 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@tailwindcss/node@4.1.11': - resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + cpu: [arm] + os: [android] - '@tailwindcss/oxide-android-arm64@4.1.11': - resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} - engines: {node: '>= 10'} + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.11': - resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} - engines: {node: '>= 10'} + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.11': - resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} - engines: {node: '>= 10'} + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.11': - resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} - engines: {node: '>= 10'} + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': - resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} - engines: {node: '>= 10'} + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': - resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} - engines: {node: '>= 10'} + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': - resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} - engines: {node: '>= 10'} + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': - resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} - engines: {node: '>= 10'} + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.11': - resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} - engines: {node: '>= 10'} + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.11': - resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + cpu: [arm64] + os: [openharmony] - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': - resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} - engines: {node: '>= 10'} + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': - resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} - engines: {node: '>= 10'} + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.11': - resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} - engines: {node: '>= 10'} + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + cpu: [x64] + os: [win32] - '@tailwindcss/postcss@4.1.11': - resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + '@smithy/abort-controller@4.2.4': + resolution: {integrity: sha512-Z4DUr/AkgyFf1bOThW2HwzREagee0sB5ycl+hDiSZOfRLW8ZgrOjDi6g8mHH19yyU5E2A/64W3z6SMIf5XiUSQ==} + engines: {node: '>=18.0.0'} - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@smithy/config-resolver@4.4.1': + resolution: {integrity: sha512-BciDJ5hkyYEGBBKMbjGB1A/Zq8bYZ41Zo9BMnGdKF6QD1fY4zIkYx6zui/0CHaVGnv6h0iy8y4rnPX9CPCAPyQ==} + engines: {node: '>=18.0.0'} - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@smithy/core@3.17.2': + resolution: {integrity: sha512-n3g4Nl1Te+qGPDbNFAYf+smkRVB+JhFsGy9uJXXZQEufoP4u0r+WLh6KvTDolCswaagysDc/afS1yvb2jnj1gQ==} + engines: {node: '>=18.0.0'} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@smithy/credential-provider-imds@4.2.4': + resolution: {integrity: sha512-YVNMjhdz2pVto5bRdux7GMs0x1m0Afz3OcQy/4Yf9DH4fWOtroGH7uLvs7ZmDyoBJzLdegtIPpXrpJOZWvUXdw==} + engines: {node: '>=18.0.0'} - '@types/hast@2.3.10': + '@smithy/fetch-http-handler@5.3.5': + resolution: {integrity: sha512-mg83SM3FLI8Sa2ooTJbsh5MFfyMTyNRwxqpKHmE0ICRIa66Aodv80DMsTQI02xBLVJ0hckwqTRr5IGAbbWuFLQ==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.2.4': + resolution: {integrity: sha512-kKU0gVhx/ppVMntvUOZE7WRMFW86HuaxLwvqileBEjL7PoILI8/djoILw3gPQloGVE6O0oOzqafxeNi2KbnUJw==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.2.4': + resolution: {integrity: sha512-z6aDLGiHzsMhbS2MjetlIWopWz//K+mCoPXjW6aLr0mypF+Y7qdEh5TyJ20Onf9FbWHiWl4eC+rITdizpnXqOw==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.2.0': + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.2.4': + resolution: {integrity: sha512-hJRZuFS9UsElX4DJSJfoX4M1qXRH+VFiLMUnhsWvtOOUWRNvvOfDaUSdlNbjwv1IkpVjj/Rd/O59Jl3nhAcxow==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.3.6': + resolution: {integrity: sha512-PXehXofGMFpDqr933rxD8RGOcZ0QBAWtuzTgYRAHAL2BnKawHDEdf/TnGpcmfPJGwonhginaaeJIKluEojiF/w==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.4.6': + resolution: {integrity: sha512-OhLx131znrEDxZPAvH/OYufR9d1nB2CQADyYFN4C3V/NQS7Mg4V6uvxHC/Dr96ZQW8IlHJTJ+vAhKt6oxWRndA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.2.4': + resolution: {integrity: sha512-jUr3x2CDhV15TOX2/Uoz4gfgeqLrRoTQbYAuhLS7lcVKNev7FeYSJ1ebEfjk+l9kbb7k7LfzIR/irgxys5ZTOg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.2.4': + resolution: {integrity: sha512-Gy3TKCOnm9JwpFooldwAboazw+EFYlC+Bb+1QBsSi5xI0W5lX81j/P5+CXvD/9ZjtYKRgxq+kkqd/KOHflzvgA==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.3.4': + resolution: {integrity: sha512-3X3w7qzmo4XNNdPKNS4nbJcGSwiEMsNsRSunMA92S4DJLLIrH5g1AyuOA2XKM9PAPi8mIWfqC+fnfKNsI4KvHw==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.4.4': + resolution: {integrity: sha512-VXHGfzCXLZeKnFp6QXjAdy+U8JF9etfpUXD1FAbzY1GzsFJiDQRQIt2CnMUvUdz3/YaHNqT3RphVWMUpXTIODA==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@3.1.11': + resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@4.2.4': + resolution: {integrity: sha512-g2DHo08IhxV5GdY3Cpt/jr0mkTlAD39EJKN27Jb5N8Fb5qt8KG39wVKTXiTRCmHHou7lbXR8nKVU14/aRUf86w==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.3.4': + resolution: {integrity: sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.2.4': + resolution: {integrity: sha512-KQ1gFXXC+WsbPFnk7pzskzOpn4s+KheWgO3dzkIEmnb6NskAIGp/dGdbKisTPJdtov28qNDohQrgDUKzXZBLig==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.2.4': + resolution: {integrity: sha512-aHb5cqXZocdzEkZ/CvhVjdw5l4r1aU/9iMEyoKzH4eXMowT6M0YjBpp7W/+XjkBnY8Xh0kVd55GKjnPKlCwinQ==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.2.4': + resolution: {integrity: sha512-fdWuhEx4+jHLGeew9/IvqVU/fxT/ot70tpRGuOLxE3HzZOyKeTQfYeV1oaBXpzi93WOk668hjMuuagJ2/Qs7ng==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.3.4': + resolution: {integrity: sha512-y5ozxeQ9omVjbnJo9dtTsdXj9BEvGx2X8xvRgKnV+/7wLBuYJQL6dOa/qMY6omyHi7yjt1OA97jZLoVRYi8lxA==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.3.4': + resolution: {integrity: sha512-ScDCpasxH7w1HXHYbtk3jcivjvdA1VICyAdgvVqKhKKwxi+MTwZEqFw0minE+oZ7F07oF25xh4FGJxgqgShz0A==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.9.2': + resolution: {integrity: sha512-gZU4uAFcdrSi3io8U99Qs/FvVdRxPvIMToi+MFfsy/DN9UqtknJ1ais+2M9yR8e0ASQpNmFYEKeIKVcMjQg3rg==} + engines: {node: '>=18.0.0'} + + '@smithy/types@3.7.2': + resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==} + engines: {node: '>=16.0.0'} + + '@smithy/types@4.8.1': + resolution: {integrity: sha512-N0Zn0OT1zc+NA+UVfkYqQzviRh5ucWwO7mBV3TmHHprMnfcJNfhlPicDkBHi0ewbh+y3evR6cNAW0Raxvb01NA==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.2.4': + resolution: {integrity: sha512-w/N/Iw0/PTwJ36PDqU9PzAwVElo4qXxCC0eCTlUtIz/Z5V/2j/cViMHi0hPukSBHp4DVwvUlUhLgCzqSJ6plrg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.3.0': + resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.2.0': + resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.2.1': + resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.2.0': + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.2.0': + resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.3.5': + resolution: {integrity: sha512-GwaGjv/QLuL/QHQaqhf/maM7+MnRFQQs7Bsl6FlaeK6lm6U7mV5AAnVabw68cIoMl5FQFyKK62u7RWRzWL25OQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.2.7': + resolution: {integrity: sha512-6hinjVqec0WYGsqN7h9hL/ywfULmJJNXGXnNZW7jrIn/cFuC/aVlVaiDfBIJEvKcOrmN8/EgsW69eY0gXABeHw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.2.4': + resolution: {integrity: sha512-f+nBDhgYRCmUEDKEQb6q0aCcOTXRDqH5wWaFHJxt4anB4pKHlgGoYP3xtioKXH64e37ANUkzWf6p4Mnv1M5/Vg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.2.0': + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.2.4': + resolution: {integrity: sha512-fKGQAPAn8sgV0plRikRVo6g6aR0KyKvgzNrPuM74RZKy/wWVzx3BMk+ZWEueyN3L5v5EDg+P582mKU+sH5OAsg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.2.4': + resolution: {integrity: sha512-yQncJmj4dtv/isTXxRb4AamZHy4QFr4ew8GxS6XLWt7sCIxkPxPzINWd7WLISEFPsIan14zrKgvyAF+/yzfwoA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.5.5': + resolution: {integrity: sha512-7M5aVFjT+HPilPOKbOmQfCIPchZe4DSBc1wf1+NvHvSoFTiFtauZzT+onZvCj70xhXd0AEmYnZYmdJIuwxOo4w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.2.0': + resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.2.0': + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + engines: {node: '>=18.0.0'} + + '@smithy/uuid@1.1.0': + resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} + engines: {node: '>=18.0.0'} + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@sveltejs/acorn-typescript@1.0.6': + resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/kit@2.48.4': + resolution: {integrity: sha512-TGFX1pZUt9qqY20Cv5NyYvy0iLWHf2jXi8s+eCGsig7jQMdwZWKUFMR6TbvFNhfDSUpc1sH/Y5EHv20g3HHA3g==} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@sveltejs/vite-plugin-svelte-inspector@5.0.1': + resolution: {integrity: sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + + '@sveltejs/vite-plugin-svelte@6.2.1': + resolution: {integrity: sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + + '@swc/core-darwin-arm64@1.11.24': + resolution: {integrity: sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.11.24': + resolution: {integrity: sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.11.24': + resolution: {integrity: sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.11.24': + resolution: {integrity: sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.11.24': + resolution: {integrity: sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.11.24': + resolution: {integrity: sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.11.24': + resolution: {integrity: sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.11.24': + resolution: {integrity: sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.11.24': + resolution: {integrity: sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.11.24': + resolution: {integrity: sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.11.24': + resolution: {integrity: sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} + + '@tailwindcss/node@4.1.11': + resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + + '@tailwindcss/oxide-android-arm64@4.1.11': + resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.11': + resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.11': + resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.11': + resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.11': + resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.11': + resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.11': + resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.11': + resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} '@types/hast@3.0.4': @@ -944,10 +1651,33 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@vercel/functions@3.1.4': + resolution: {integrity: sha512-1dEfZkb7qxsA+ilo+1uBUCEgr7e90vHcimpDYkUB84DM051wQ5amJDk9x+cnaI29paZb5XukXwGl8yk3Udb/DQ==} + engines: {node: '>= 20'} + peerDependencies: + '@aws-sdk/credential-provider-web-identity': '*' + peerDependenciesMeta: + '@aws-sdk/credential-provider-web-identity': + optional: true + '@vercel/oidc@2.0.0': resolution: {integrity: sha512-U0hncpXof7gC9xtmSrjz6vrDqdwJXi8z/zSc9FyS80AoXKfCZtpkBz9gtL3x30Agmpxpwe35P1W2dP9Epa/RGA==} engines: {node: '>= 18'} + '@vercel/oidc@3.0.3': + resolution: {integrity: sha512-yNEQvPcVrK9sIe637+I0jD6leluPxzwJKx/Haw6F4H77CdDsszUn5V3o96LPziXkSNE2B83+Z3mjqGKBK/R6Gg==} + engines: {node: '>= 20'} + + '@vercel/queue@0.0.0-alpha.23': + resolution: {integrity: sha512-1JuRZ4U3nLUisu9sP++J9Y12/p1J1NDPcpDGBFJ+sjc7DfGZAqEzCIUypnC7ymbfkEFaVnSznmrBs8wkVeTMpQ==} + engines: {node: '>=20.0.0'} + hasBin: true + + '@vercel/queue@0.0.0-alpha.28': + resolution: {integrity: sha512-EPFrBQPJrGjt8lr9kTmio5G57CGILnf4+pKalQNt88cAinXxaWLrvpBTzwG0esx+yreaUoqkFzpgWxTjsgZtlg==} + engines: {node: '>=20.0.0'} + hasBin: true + '@vercel/sandbox@0.0.17': resolution: {integrity: sha512-oLfYqYKMjwNopjO2BKbVd0uA1dL43jk6yqaeIgquLJG/Jo01FZb5sd6XfGIfFa21XDxXGM61eomX7fSps/hvYg==} @@ -996,6 +1726,73 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@workflow/ai@4.0.1-beta.11': + resolution: {integrity: sha512-o+Z8kbMZOtdHSeeFMi5pummv4W46pkyHBO0KBq5Ik9wvaj7NKneRREDXPdiODO2C1iSBUBED8NU5v2GLyfK3zA==} + peerDependencies: + ai: ^5 + workflow: 4.0.1-beta.11 + + '@workflow/builders@4.0.1-beta.7': + resolution: {integrity: sha512-BSsdc8t4+74hLyrl9PLgfDvO1/PTA+7j1WLiwMgqlYBISCh4t00FGXWcrool6yu/MbIvDWlz6YHT81RhKy3sQQ==} + + '@workflow/cli@4.0.1-beta.11': + resolution: {integrity: sha512-0MgtEc8t9ouRYaO+x9+ZSbcMazxW2+OMQNZG9zjBo6l6wRphB2iNcDhnfn1cEwYXa/yuX1u+pQZN8nxUwD1CIw==} + hasBin: true + + '@workflow/core@4.0.1-beta.9': + resolution: {integrity: sha512-U0gAi6NQBPiAyChJRAq4Z33yTq7zUqz9Qr3BQKvdbYxf3ZS2FgEiK7K5bfaV0G4tDLDWtDu2aFH6akgXd/aXwA==} + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@workflow/errors@4.0.1-beta.3': + resolution: {integrity: sha512-jeYCjWysbrLQzRsrcOADQgm++NjfaVmbCTcq7Ay8uHCIHXo/VzcUu75+Yv9vhW0neQoQdkN/SJ2UfLvB4gox3w==} + + '@workflow/next@4.0.1-beta.11': + resolution: {integrity: sha512-4o5NwZOSI21DgJbFZn7b1i+/u8RQzNewYWm0L8Zgqdys7ZMQiT1FazCkXfqAMOuePaB4KzGnTkeC307TNFE5+w==} + peerDependencies: + next: '>13' + peerDependenciesMeta: + next: + optional: true + + '@workflow/nitro@4.0.1-beta.11': + resolution: {integrity: sha512-351u1K+rLWRzQmbRjct4k+mv5vYwCQ/9OzFrWCPZfbbCTk7j3sOmErC1Zot/mYn/BqU/EOomWCpWO/CaE2prLg==} + + '@workflow/sveltekit@4.0.0-beta.5': + resolution: {integrity: sha512-oM8iF6mkWtRpD87KKXqn/l7vNv2jILBiB17idWtJ5rbE8lpbDOky0Tj/hiZ3yuv/2oYRb8KfTmu/18Er1EP3ow==} + + '@workflow/swc-plugin@4.0.1-beta.3': + resolution: {integrity: sha512-cVTqi7eyEq1jNqxz72PyyqMyvF391ZVmIc8mUE4IisqrlWGF5vBNQ9vrPOtASWr57/L7GzPDabo9qxyfpgmSrg==} + peerDependencies: + '@swc/core': 1.11.24 + + '@workflow/typescript-plugin@4.0.1-beta.4': + resolution: {integrity: sha512-AkZ3wHbPJq0ZhswR9ctdysJ1ZSW3lmYII+spnbgS72zxkwgl1MNwPtlFt1+lANLDLx6638IbRFwFvsqLtQLqrQ==} + peerDependencies: + typescript: '>=5.0.0' + + '@workflow/web@4.0.1-beta.8': + resolution: {integrity: sha512-Han4IUJskUldqO9GGYMBWCn5DR0lO/7XvO/0fkGkYfI4TAtUqayxHVLXisTcFG6HVNVcZz3E5r5/MPWpepXMcQ==} + + '@workflow/world-local@4.0.1-beta.5': + resolution: {integrity: sha512-tGKDqR5EH2SUlvU8KZGTmfvBuBQJJjLOKPDeldW9pgS1DtFkxZt+U8qz9myvU0LpZtX/sB3yLHVjC/FBmGF63g==} + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@workflow/world-vercel@4.0.1-beta.5': + resolution: {integrity: sha512-7LuCsAiJYxdij9FXEEwwPB24kYhPKviLxKDmdEeWjx/0tp/sRC1oE0izmMqwE1YQzWYSiAP/MAPsR2/EffXFRg==} + + '@workflow/world@4.0.1-beta.4': + resolution: {integrity: sha512-vhuL+vJZnTx6fNDO4nZJh4ytFbVvy6LrOD6MzsFqGWWm1SOxRtnr6ATNBo6PIOuem2t72UrXDjbpMbEWKoLVOQ==} + peerDependencies: + zod: 4.1.11 + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -1043,10 +1840,37 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.1.1: + resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + ansi-regex@6.2.0: resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + ansis@3.17.0: + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} + engines: {node: '>=14'} + arctic@3.7.0: resolution: {integrity: sha512-ZMQ+f6VazDgUJOd+qNV+H7GohNSYal1mVjm5kEaZfE2Ifb7Ss70w+Q7xpJC87qZDkMZIXYf0pTIYZA0OPasSbw==} @@ -1054,15 +1878,32 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.6.0: resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==} @@ -1080,6 +1921,16 @@ packages: react: optional: true + bowser@2.12.1: + resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + browserslist@4.25.1: resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1088,12 +1939,28 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + builtin-modules@5.0.0: + resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} + engines: {node: '>=18.20'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + caniuse-lite@1.0.30001731: resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -1115,6 +1982,10 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -1126,9 +1997,29 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + clean-stack@3.0.1: + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} + engines: {node: '>=10'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -1156,13 +2047,31 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -1172,9 +2081,37 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -1186,16 +2123,37 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + devalue@5.4.2: + resolution: {integrity: sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + easy-table@1.2.0: + resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + electron-to-chromium@1.5.198: resolution: {integrity: sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} + enhanced-resolve@5.18.2: + resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} + engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.3: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} @@ -1204,13 +2162,26 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -1219,6 +2190,17 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esrap@2.1.2: + resolution: {integrity: sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -1242,6 +2224,13 @@ packages: resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} engines: {node: '>=18.0.0'} + execa@9.6.0: + resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + engines: {node: ^18.19.0 || >=20.5.0} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -1257,17 +2246,62 @@ packages: fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-xml-parser@5.2.5: + resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} + hasBin: true + fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -1278,6 +2312,14 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} @@ -1317,6 +2359,14 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -1341,15 +2391,69 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-hexadecimal@1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} @@ -1379,9 +2483,16 @@ packages: engines: {node: '>=6'} hasBin: true + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonlines@0.1.1: resolution: {integrity: sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA==} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + lightningcss-darwin-arm64@1.30.1: resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} @@ -1446,6 +2557,10 @@ packages: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -1454,6 +2569,17 @@ packages: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -1611,6 +2737,18 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -1622,11 +2760,31 @@ packages: mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mixpart@0.0.4: + resolution: {integrity: sha512-RAoaOSXnMLrfUfmFbNynRYjeMru/bhgAYRy/GQVI8gmRq7vm9V9c2gGVYnYoQ008X6YTmRIu5b0397U7vb0bIA==} + engines: {node: '>=22.0.0'} + + mixpart@0.0.5-alpha.0: + resolution: {integrity: sha512-XS3bfxqdHsxqLoK0DnkGiM++KZGhXFj8KrzfNND/4d0DDBkbVdmlEajIAOQ+2+tHVw2zFI1ng8SnJSOfVZg0HA==} + engines: {node: '>=22.0.0'} + + mixpart@0.0.5-alpha.1: + resolution: {integrity: sha512-2ZfG/NO2SVE9HLk1/W+yOrIOA0d674ljZExLdievZQpYjbJYQjIdye8vNMR63yF7nN/NbO9q8mp16JUEYBCilg==} + engines: {node: '>=20.0.0'} + mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1635,6 +2793,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + engines: {node: ^18 || >=20} + hasBin: true + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -1668,6 +2831,10 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nuqs@2.4.3: resolution: {integrity: sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q==} peerDependencies: @@ -1686,18 +2853,69 @@ packages: react-router-dom: optional: true + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + + os-paths@4.4.0: + resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} + engines: {node: '>= 6.0'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pid-port@2.0.0: + resolution: {integrity: sha512-EDmfRxLl6lkhPjDI+19l5pkII89xVsiCP3aGjS808f7M16DyCKSXEWthD/hjyDLn5I4gKqTVw7hSgdvdXRJDTw==} + engines: {node: '>=20'} + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -1706,6 +2924,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} engines: {node: '>=6'} @@ -1798,6 +3020,10 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + refractor@3.6.0: resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} @@ -1816,14 +3042,35 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -1838,21 +3085,48 @@ packages: resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} engines: {node: '>= 10.13.0'} + seedrandom@3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + sharp@0.34.3: resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -1876,16 +3150,39 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + streamx@2.22.1: resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strnum@2.1.1: + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + style-to-js@1.1.17: resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} @@ -1905,10 +3202,22 @@ packages: babel-plugin-macros: optional: true + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-hyperlinks@4.3.0: + resolution: {integrity: sha512-i6sWEzuwadSlcr2mOnb0ktlIl+K5FVxsPXmoPfknDd2gyw4ZBIAZ5coc0NQzYqDdEYXMHy8NaY9rWwa1Q1myiQ==} + engines: {node: '>=20'} + + svelte@5.43.3: + resolution: {integrity: sha512-kjkAjCk41mJfvJZG56XcJNOdJSke94JxtcX8zFzzz2vrt47E0LnoBzU6azIZ1aBxJgUep8qegAkguSf1GjxLXQ==} + engines: {node: '>=18'} + swr@2.3.4: resolution: {integrity: sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==} peerDependencies: @@ -1931,6 +3240,10 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} + terminal-link@5.0.0: + resolution: {integrity: sha512-qFAy10MTMwjzjU8U16YS4YoZD+NQLHzLssFMNqgravjbvIPNiqkGFR4yjhJfmY9R5OFU7+yHxc6y+uGHkKwLRA==} + engines: {node: '>=20'} + terser-webpack-plugin@5.3.14: resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} @@ -1959,6 +3272,14 @@ packages: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -1971,14 +3292,38 @@ packages: tw-animate-css@1.3.6: resolution: {integrity: sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true + ulid@3.0.1: + resolution: {integrity: sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q==} + hasBin: true + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@6.22.0: + resolution: {integrity: sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==} + engines: {node: '>=18.17'} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -1997,6 +3342,10 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -2045,10 +3394,61 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite@7.2.0: + resolution: {integrity: sha512-C/Naxf8H0pBx1PA4BdpT+c/5wdqI9ILMdwjSMILw7tVIh3JsxzZqdeTLmmdaoh5MYUEOyBnM9K3o0DzoZ/fe+w==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + watchpack@2.4.4: resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -2066,6 +3466,51 @@ packages: webpack-cli: optional: true + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workflow@4.0.1-beta.11: + resolution: {integrity: sha512-8XVBIYGCWdXJNGC6TnBNH5L28Ib7oZpWXZaF4cujMijlSb8xs9zGlyEAgChTu4sEQQ5uFhHkwCSHcD1TH7sdGQ==} + hasBin: true + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + xdg-app-paths@5.5.1: + resolution: {integrity: sha512-hI3flOB4PLZIy5prbtTpirobtPE2ZtZ52szO+2mM9Efp6ErM398La+C1lIpNWDfNoQk+6Lsi6nMcCwVB7pxeMQ==} + engines: {node: '>= 6.0'} + + xdg-portable@7.3.0: + resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} + engines: {node: '>= 6.0'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -2074,12 +3519,26 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + zod@3.24.4: resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.1.11: + resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} + zustand@5.0.6: resolution: {integrity: sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==} engines: {node: '>=12.20.0'} @@ -2121,40 +3580,406 @@ snapshots: '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)': + '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@standard-schema/spec': 1.0.0 + eventsource-parser: 3.0.6 + zod: 3.25.76 + + '@ai-sdk/provider@2.0.0': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/react@2.0.59(react@19.1.0)(zod@3.25.76)': + dependencies: + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + ai: 5.0.59(zod@3.25.76) + react: 19.1.0 + swr: 2.3.4(react@19.1.0) + throttleit: 2.1.0 + optionalDependencies: + zod: 3.25.76 + + '@ai-sdk/vercel@1.0.20(zod@3.25.76)': + dependencies: + '@ai-sdk/openai-compatible': 1.0.19(zod@3.25.76) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + zod: 3.25.76 + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-locate-window': 3.893.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.922.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.922.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-sso@3.922.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.922.0 + '@aws-sdk/middleware-host-header': 3.922.0 + '@aws-sdk/middleware-logger': 3.922.0 + '@aws-sdk/middleware-recursion-detection': 3.922.0 + '@aws-sdk/middleware-user-agent': 3.922.0 + '@aws-sdk/region-config-resolver': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-endpoints': 3.922.0 + '@aws-sdk/util-user-agent-browser': 3.922.0 + '@aws-sdk/util-user-agent-node': 3.922.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/core': 3.17.2 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/hash-node': 4.2.4 + '@smithy/invalid-dependency': 4.2.4 + '@smithy/middleware-content-length': 4.2.4 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/middleware-retry': 4.4.6 + '@smithy/middleware-serde': 4.2.4 + '@smithy/middleware-stack': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/node-http-handler': 4.4.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.5 + '@smithy/util-defaults-mode-node': 4.2.7 + '@smithy/util-endpoints': 3.2.4 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-retry': 4.2.4 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.922.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.922.0 + '@aws-sdk/credential-provider-node': 3.922.0 + '@aws-sdk/middleware-host-header': 3.922.0 + '@aws-sdk/middleware-logger': 3.922.0 + '@aws-sdk/middleware-recursion-detection': 3.922.0 + '@aws-sdk/middleware-user-agent': 3.922.0 + '@aws-sdk/region-config-resolver': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-endpoints': 3.922.0 + '@aws-sdk/util-user-agent-browser': 3.922.0 + '@aws-sdk/util-user-agent-node': 3.922.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/core': 3.17.2 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/hash-node': 4.2.4 + '@smithy/invalid-dependency': 4.2.4 + '@smithy/middleware-content-length': 4.2.4 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/middleware-retry': 4.4.6 + '@smithy/middleware-serde': 4.2.4 + '@smithy/middleware-stack': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/node-http-handler': 4.4.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.5 + '@smithy/util-defaults-mode-node': 4.2.7 + '@smithy/util-endpoints': 3.2.4 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-retry': 4.2.4 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.922.0': + dependencies: + '@aws-sdk/types': 3.922.0 + '@aws-sdk/xml-builder': 3.921.0 + '@smithy/core': 3.17.2 + '@smithy/node-config-provider': 4.3.4 + '@smithy/property-provider': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/signature-v4': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/util-base64': 4.3.0 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.922.0': + dependencies: + '@aws-sdk/core': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.922.0': + dependencies: + '@aws-sdk/core': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/node-http-handler': 4.4.4 + '@smithy/property-provider': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/util-stream': 4.5.5 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.922.0': + dependencies: + '@aws-sdk/core': 3.922.0 + '@aws-sdk/credential-provider-env': 3.922.0 + '@aws-sdk/credential-provider-http': 3.922.0 + '@aws-sdk/credential-provider-process': 3.922.0 + '@aws-sdk/credential-provider-sso': 3.922.0 + '@aws-sdk/credential-provider-web-identity': 3.922.0 + '@aws-sdk/nested-clients': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/credential-provider-imds': 4.2.4 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.922.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.922.0 + '@aws-sdk/credential-provider-http': 3.922.0 + '@aws-sdk/credential-provider-ini': 3.922.0 + '@aws-sdk/credential-provider-process': 3.922.0 + '@aws-sdk/credential-provider-sso': 3.922.0 + '@aws-sdk/credential-provider-web-identity': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/credential-provider-imds': 4.2.4 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.922.0': + dependencies: + '@aws-sdk/core': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.922.0': + dependencies: + '@aws-sdk/client-sso': 3.922.0 + '@aws-sdk/core': 3.922.0 + '@aws-sdk/token-providers': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.922.0)': + dependencies: + '@aws-sdk/client-sts': 3.922.0 + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.922.0': + dependencies: + '@aws-sdk/core': 3.922.0 + '@aws-sdk/nested-clients': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-host-header@3.922.0': + dependencies: + '@aws-sdk/types': 3.922.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.922.0': + dependencies: + '@aws-sdk/types': 3.922.0 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.922.0': + dependencies: + '@aws-sdk/types': 3.922.0 + '@aws/lambda-invoke-store': 0.1.1 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.922.0': + dependencies: + '@aws-sdk/core': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-endpoints': 3.922.0 + '@smithy/core': 3.17.2 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.922.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.922.0 + '@aws-sdk/middleware-host-header': 3.922.0 + '@aws-sdk/middleware-logger': 3.922.0 + '@aws-sdk/middleware-recursion-detection': 3.922.0 + '@aws-sdk/middleware-user-agent': 3.922.0 + '@aws-sdk/region-config-resolver': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-endpoints': 3.922.0 + '@aws-sdk/util-user-agent-browser': 3.922.0 + '@aws-sdk/util-user-agent-node': 3.922.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/core': 3.17.2 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/hash-node': 4.2.4 + '@smithy/invalid-dependency': 4.2.4 + '@smithy/middleware-content-length': 4.2.4 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/middleware-retry': 4.4.6 + '@smithy/middleware-serde': 4.2.4 + '@smithy/middleware-stack': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/node-http-handler': 4.4.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.5 + '@smithy/util-defaults-mode-node': 4.2.7 + '@smithy/util-endpoints': 3.2.4 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-retry': 4.2.4 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.922.0': + dependencies: + '@aws-sdk/types': 3.922.0 + '@smithy/config-resolver': 4.4.1 + '@smithy/node-config-provider': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.922.0': + dependencies: + '@aws-sdk/core': 3.922.0 + '@aws-sdk/nested-clients': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.609.0': + dependencies: + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/types@3.922.0': dependencies: - '@ai-sdk/provider': 2.0.0 - '@standard-schema/spec': 1.0.0 - eventsource-parser: 3.0.6 - zod: 3.25.76 + '@smithy/types': 4.8.1 + tslib: 2.8.1 - '@ai-sdk/provider@2.0.0': + '@aws-sdk/util-endpoints@3.922.0': dependencies: - json-schema: 0.4.0 + '@aws-sdk/types': 3.922.0 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 + '@smithy/util-endpoints': 3.2.4 + tslib: 2.8.1 - '@ai-sdk/react@2.0.59(react@19.1.0)(zod@3.25.76)': + '@aws-sdk/util-locate-window@3.893.0': dependencies: - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - ai: 5.0.59(zod@3.25.76) - react: 19.1.0 - swr: 2.3.4(react@19.1.0) - throttleit: 2.1.0 - optionalDependencies: - zod: 3.25.76 + tslib: 2.8.1 - '@ai-sdk/vercel@1.0.20(zod@3.25.76)': + '@aws-sdk/util-user-agent-browser@3.922.0': dependencies: - '@ai-sdk/openai-compatible': 1.0.19(zod@3.25.76) - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - zod: 3.25.76 + '@aws-sdk/types': 3.922.0 + '@smithy/types': 4.8.1 + bowser: 2.12.1 + tslib: 2.8.1 - '@alloc/quick-lru@5.2.0': {} + '@aws-sdk/util-user-agent-node@3.922.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.922.0 + '@aws-sdk/types': 3.922.0 + '@smithy/node-config-provider': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 - '@ampproject/remapping@2.3.0': + '@aws-sdk/xml-builder@3.921.0': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@smithy/types': 4.8.1 + fast-xml-parser: 5.2.5 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.1.1': {} '@babel/runtime@7.28.2': {} @@ -2163,6 +3988,84 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + '@floating-ui/core@1.7.3': dependencies: '@floating-ui/utils': 0.2.10 @@ -2275,6 +4178,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.10': @@ -2315,6 +4223,31 @@ snapshots: '@next/swc-win32-x64-msvc@15.5.4': optional: true + '@oclif/core@4.8.0': + dependencies: + ansi-escapes: 4.3.2 + ansis: 3.17.0 + clean-stack: 3.0.1 + cli-spinners: 2.9.2 + debug: 4.4.3(supports-color@8.1.1) + ejs: 3.1.10 + get-package-type: 0.1.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + lilconfig: 3.1.3 + minimatch: 9.0.5 + semver: 7.7.3 + string-width: 4.2.3 + supports-color: 8.1.1 + tinyglobby: 0.2.15 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + + '@oclif/plugin-help@6.2.35': + dependencies: + '@oclif/core': 4.8.0 + '@opentelemetry/api@1.9.0': {} '@oslojs/asn1@1.0.0': @@ -2336,6 +4269,8 @@ snapshots: dependencies: '@oslojs/encoding': 0.4.1 + '@polka/url@1.0.0-next.29': {} + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.2': {} @@ -2351,60 +4286,238 @@ snapshots: '@types/react': 19.1.9 '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-context@1.1.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-direction@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-id@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.9)(react@19.1.0)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-context@1.1.2(@types/react@19.1.9)(react@19.1.0)': + '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: + '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.0) '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) aria-hidden: 1.2.6 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -2413,262 +4526,535 @@ snapshots: '@types/react': 19.1.9 '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.9)(react@19.1.0)': dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 optionalDependencies: '@types/react': 19.1.9 - '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.9)(react@19.1.0)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.9)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.9)(react@19.1.0)': dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 optionalDependencies: '@types/react': 19.1.9 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.9)(react@19.1.0)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-id@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.9)(react@19.1.0)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) react: 19.1.0 optionalDependencies: '@types/react': 19.1.9 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.9)(react@19.1.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-popover@1.1.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.9)(react@19.1.0)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) - aria-hidden: 1.2.6 + '@radix-ui/rect': 1.1.1 react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.9)(react@19.1.0)': dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/rect': 1.1.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 19.1.9 '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/rect@1.1.1': {} + + '@rollup/rollup-android-arm-eabi@4.52.5': + optional: true + + '@rollup/rollup-android-arm64@4.52.5': + optional: true + + '@rollup/rollup-darwin-arm64@4.52.5': + optional: true + + '@rollup/rollup-darwin-x64@4.52.5': + optional: true + + '@rollup/rollup-freebsd-arm64@4.52.5': + optional: true + + '@rollup/rollup-freebsd-x64@4.52.5': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.52.5': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.52.5': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-x64-musl@4.52.5': + optional: true + + '@rollup/rollup-openharmony-arm64@4.52.5': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.52.5': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.52.5': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.52.5': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.52.5': + optional: true + + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@smithy/abort-controller@4.2.4': + dependencies: + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/config-resolver@4.4.1': + dependencies: + '@smithy/node-config-provider': 4.3.4 + '@smithy/types': 4.8.1 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-endpoints': 3.2.4 + '@smithy/util-middleware': 4.2.4 + tslib: 2.8.1 + + '@smithy/core@3.17.2': + dependencies: + '@smithy/middleware-serde': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-stream': 4.5.5 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.2.4': + dependencies: + '@smithy/node-config-provider': 4.3.4 + '@smithy/property-provider': 4.2.4 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.3.5': + dependencies: + '@smithy/protocol-http': 5.3.4 + '@smithy/querystring-builder': 4.2.4 + '@smithy/types': 4.8.1 + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.2.4': + dependencies: + '@smithy/types': 4.8.1 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.2.4': + dependencies: + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.2.4': + dependencies: + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.3.6': + dependencies: + '@smithy/core': 3.17.2 + '@smithy/middleware-serde': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + '@smithy/url-parser': 4.2.4 + '@smithy/util-middleware': 4.2.4 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.6': + dependencies: + '@smithy/node-config-provider': 4.3.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/service-error-classification': 4.2.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-retry': 4.2.4 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/middleware-serde@4.2.4': + dependencies: + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.2.4': + dependencies: + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.3.4': + dependencies: + '@smithy/property-provider': 4.2.4 + '@smithy/shared-ini-file-loader': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.4.4': + dependencies: + '@smithy/abort-controller': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/querystring-builder': 4.2.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/property-provider@3.1.11': + dependencies: + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@smithy/property-provider@4.2.4': + dependencies: + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/protocol-http@5.3.4': + dependencies: + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.2.4': + dependencies: + '@smithy/types': 4.8.1 + '@smithy/util-uri-escape': 4.2.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.2.4': + dependencies: + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.2.4': + dependencies: + '@smithy/types': 4.8.1 + + '@smithy/shared-ini-file-loader@4.3.4': + dependencies: + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/signature-v4@5.3.4': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-middleware': 4.2.4 + '@smithy/util-uri-escape': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.9.2': + dependencies: + '@smithy/core': 3.17.2 + '@smithy/middleware-endpoint': 4.3.6 + '@smithy/middleware-stack': 4.2.4 + '@smithy/protocol-http': 5.3.4 + '@smithy/types': 4.8.1 + '@smithy/util-stream': 4.5.5 + tslib: 2.8.1 + + '@smithy/types@3.7.2': + dependencies: + tslib: 2.8.1 + + '@smithy/types@4.8.1': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.2.4': + dependencies: + '@smithy/querystring-parser': 4.2.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 + + '@smithy/util-base64@4.3.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.2.1': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + tslib: 2.8.1 - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@smithy/util-buffer-from@2.2.0': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@smithy/util-buffer-from@4.2.0': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + '@smithy/is-array-buffer': 4.2.0 + tslib: 2.8.1 - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@smithy/util-config-provider@4.2.0': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + tslib: 2.8.1 - '@radix-ui/react-scroll-area@1.2.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@smithy/util-defaults-mode-browser@4.3.5': dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + '@smithy/property-provider': 4.2.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + tslib: 2.8.1 - '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@smithy/util-defaults-mode-node@4.2.7': dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + '@smithy/config-resolver': 4.4.1 + '@smithy/credential-provider-imds': 4.2.4 + '@smithy/node-config-provider': 4.3.4 + '@smithy/property-provider': 4.2.4 + '@smithy/smithy-client': 4.9.2 + '@smithy/types': 4.8.1 + tslib: 2.8.1 - '@radix-ui/react-slot@1.2.3(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-endpoints@3.2.4': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/node-config-provider': 4.3.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-hex-encoding@4.2.0': dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + tslib: 2.8.1 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-middleware@4.2.4': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/types': 4.8.1 + tslib: 2.8.1 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-retry@4.2.4': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/service-error-classification': 4.2.4 + '@smithy/types': 4.8.1 + tslib: 2.8.1 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-stream@4.5.5': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/fetch-http-handler': 5.3.5 + '@smithy/node-http-handler': 4.4.4 + '@smithy/types': 4.8.1 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-uri-escape@4.2.0': dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + tslib: 2.8.1 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-utf8@2.3.0': dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-utf8@4.2.0': dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/util-buffer-from': 4.2.0 + tslib: 2.8.1 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/uuid@1.1.0': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + tslib: 2.8.1 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@standard-schema/spec@1.0.0': {} + + '@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + acorn: 8.15.0 + + '@sveltejs/kit@2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1))': + dependencies: + '@standard-schema/spec': 1.0.0 + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)) + '@types/cookie': 0.6.0 + acorn: 8.15.0 + cookie: 0.6.0 + devalue: 5.4.2 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.17 + mrmime: 2.0.1 + sade: 1.8.1 + set-cookie-parser: 2.7.2 + sirv: 3.0.2 + svelte: 5.43.3 + vite: 7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1) optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + '@opentelemetry/api': 1.9.0 - '@radix-ui/rect@1.1.1': {} + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1))': + dependencies: + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)) + debug: 4.4.3(supports-color@8.1.1) + svelte: 5.43.3 + vite: 7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1) + transitivePeerDependencies: + - supports-color - '@standard-schema/spec@1.0.0': {} + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)) + debug: 4.4.3(supports-color@8.1.1) + deepmerge: 4.3.1 + magic-string: 0.30.17 + svelte: 5.43.3 + vite: 7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1) + vitefu: 1.1.1(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)) + transitivePeerDependencies: + - supports-color + + '@swc/core-darwin-arm64@1.11.24': + optional: true + + '@swc/core-darwin-x64@1.11.24': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.11.24': + optional: true + + '@swc/core-linux-arm64-gnu@1.11.24': + optional: true + + '@swc/core-linux-arm64-musl@1.11.24': + optional: true + + '@swc/core-linux-x64-gnu@1.11.24': + optional: true + + '@swc/core-linux-x64-musl@1.11.24': + optional: true + + '@swc/core-win32-arm64-msvc@1.11.24': + optional: true + + '@swc/core-win32-ia32-msvc@1.11.24': + optional: true + + '@swc/core-win32-x64-msvc@1.11.24': + optional: true + + '@swc/core@1.11.24': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.25 + optionalDependencies: + '@swc/core-darwin-arm64': 1.11.24 + '@swc/core-darwin-x64': 1.11.24 + '@swc/core-linux-arm-gnueabihf': 1.11.24 + '@swc/core-linux-arm64-gnu': 1.11.24 + '@swc/core-linux-arm64-musl': 1.11.24 + '@swc/core-linux-x64-gnu': 1.11.24 + '@swc/core-linux-x64-musl': 1.11.24 + '@swc/core-win32-arm64-msvc': 1.11.24 + '@swc/core-win32-ia32-msvc': 1.11.24 + '@swc/core-win32-x64-msvc': 1.11.24 + + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 + '@swc/types@0.1.25': + dependencies: + '@swc/counter': 0.1.3 + '@tailwindcss/node@4.1.11': dependencies: '@ampproject/remapping': 2.3.0 @@ -2741,6 +5127,8 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.11 + '@types/cookie@0.6.0': {} + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -2799,8 +5187,25 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@vercel/functions@3.1.4(@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.922.0))': + dependencies: + '@vercel/oidc': 3.0.3 + optionalDependencies: + '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.922.0) + '@vercel/oidc@2.0.0': {} + '@vercel/oidc@3.0.3': {} + + '@vercel/queue@0.0.0-alpha.23': + dependencies: + mixpart: 0.0.5-alpha.0 + + '@vercel/queue@0.0.0-alpha.28': + dependencies: + '@vercel/oidc': 3.0.3 + mixpart: 0.0.5-alpha.1 + '@vercel/sandbox@0.0.17': dependencies: '@vercel/oidc': 2.0.0 @@ -2886,6 +5291,193 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@workflow/ai@4.0.1-beta.11(ai@5.0.59(zod@3.25.76))(workflow@4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(svelte@5.43.3)(typescript@5.9.2)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))': + dependencies: + '@ai-sdk/provider': 2.0.0 + ai: 5.0.59(zod@3.25.76) + workflow: 4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(svelte@5.43.3)(typescript@5.9.2)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)) + zod: 4.1.11 + + '@workflow/builders@4.0.1-beta.7(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)': + dependencies: + '@swc/core': 1.11.24 + '@workflow/core': 4.0.1-beta.9(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.0.1-beta.3 + '@workflow/swc-plugin': 4.0.1-beta.3(@swc/core@1.11.24) + builtin-modules: 5.0.0 + chalk: 5.6.2 + comment-json: 4.2.5 + enhanced-resolve: 5.18.2 + esbuild: 0.25.12 + find-up: 7.0.0 + tinyglobby: 0.2.15 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@swc/helpers' + - supports-color + + '@workflow/cli@4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@oclif/core': 4.8.0 + '@oclif/plugin-help': 6.2.35 + '@swc/core': 1.11.24 + '@workflow/builders': 4.0.1-beta.7(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/core': 4.0.1-beta.9(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.0.1-beta.3 + '@workflow/swc-plugin': 4.0.1-beta.3(@swc/core@1.11.24) + '@workflow/web': 4.0.1-beta.8(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@workflow/world': 4.0.1-beta.4(zod@4.1.11) + '@workflow/world-local': 4.0.1-beta.5(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.0.1-beta.5 + boxen: 8.0.1 + builtin-modules: 5.0.0 + chalk: 5.6.2 + chokidar: 4.0.3 + comment-json: 4.2.5 + date-fns: 4.1.0 + easy-table: 1.2.0 + enhanced-resolve: 5.18.2 + esbuild: 0.25.12 + find-up: 7.0.0 + mixpart: 0.0.4 + open: 10.2.0 + ora: 8.2.0 + terminal-link: 5.0.0 + tinyglobby: 0.2.15 + xdg-app-paths: 5.5.1 + zod: 4.1.11 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@babel/core' + - '@opentelemetry/api' + - '@playwright/test' + - '@swc/helpers' + - babel-plugin-macros + - babel-plugin-react-compiler + - react + - react-dom + - sass + - supports-color + + '@workflow/core@4.0.1-beta.9(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)': + dependencies: + '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.922.0) + '@types/ms': 2.1.0 + '@vercel/functions': 3.1.4(@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.922.0)) + '@workflow/errors': 4.0.1-beta.3 + '@workflow/world': 4.0.1-beta.4(zod@4.1.11) + '@workflow/world-local': 4.0.1-beta.5(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.0.1-beta.5 + debug: 4.4.3(supports-color@8.1.1) + devalue: 5.4.2 + ms: 2.1.3 + nanoid: 5.1.6 + pid-port: 2.0.0 + seedrandom: 3.0.5 + ulid: 3.0.1 + zod: 4.1.11 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - supports-color + + '@workflow/errors@4.0.1-beta.3': + dependencies: + ms: 2.1.3 + + '@workflow/next@4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': + dependencies: + '@swc/core': 1.11.24 + '@workflow/builders': 4.0.1-beta.7(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/core': 4.0.1-beta.9(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.0.1-beta.3(@swc/core@1.11.24) + semver: 7.7.3 + watchpack: 2.4.4 + optionalDependencies: + next: 15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@swc/helpers' + - supports-color + + '@workflow/nitro@4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)': + dependencies: + '@swc/core': 1.11.24 + '@workflow/builders': 4.0.1-beta.7(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/core': 4.0.1-beta.9(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.0.1-beta.3(@swc/core@1.11.24) + exsolve: 1.0.7 + pathe: 2.0.3 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@swc/helpers' + - supports-color + + '@workflow/sveltekit@4.0.0-beta.5(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1))': + dependencies: + '@sveltejs/kit': 2.48.4(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)) + '@swc/core': 1.11.24 + '@workflow/builders': 4.0.1-beta.7(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.0.1-beta.3(@swc/core@1.11.24) + exsolve: 1.0.7 + fs-extra: 11.3.2 + pathe: 2.0.3 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@sveltejs/vite-plugin-svelte' + - '@swc/helpers' + - supports-color + - svelte + - vite + + '@workflow/swc-plugin@4.0.1-beta.3(@swc/core@1.11.24)': + dependencies: + '@swc/core': 1.11.24 + + '@workflow/typescript-plugin@4.0.1-beta.4(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@workflow/web@4.0.1-beta.8(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + next: 15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + transitivePeerDependencies: + - '@babel/core' + - '@opentelemetry/api' + - '@playwright/test' + - babel-plugin-macros + - babel-plugin-react-compiler + - react + - react-dom + - sass + + '@workflow/world-local@4.0.1-beta.5(@opentelemetry/api@1.9.0)': + dependencies: + '@vercel/queue': 0.0.0-alpha.23 + '@workflow/world': 4.0.1-beta.4(zod@4.1.11) + ulid: 3.0.1 + undici: 6.22.0 + zod: 4.1.11 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + + '@workflow/world-vercel@4.0.1-beta.5': + dependencies: + '@vercel/oidc': 3.0.3 + '@vercel/queue': 0.0.0-alpha.28 + '@workflow/errors': 4.0.1-beta.3 + '@workflow/world': 4.0.1-beta.4(zod@4.1.11) + zod: 4.1.11 + + '@workflow/world@4.0.1-beta.4(zod@4.1.11)': + dependencies: + zod: 4.1.11 + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -2931,7 +5523,29 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ansi-regex@6.2.0: {} + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.1.1: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + ansis@3.17.0: {} arctic@3.7.0: dependencies: @@ -2943,14 +5557,24 @@ snapshots: dependencies: tslib: 2.8.1 + aria-query@5.3.2: {} + + array-timsort@1.0.3: {} + async-retry@1.3.3: dependencies: retry: 0.13.1 + async@3.2.6: {} + + axobject-query@4.1.0: {} + b4a@1.6.7: {} bail@2.0.2: {} + balanced-match@1.0.2: {} + bare-events@2.6.0: optional: true @@ -2961,6 +5585,23 @@ snapshots: next: 15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 + bowser@2.12.1: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001731 @@ -2970,10 +5611,20 @@ snapshots: buffer-from@1.1.2: {} + builtin-modules@5.0.0: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + camelcase@8.0.0: {} + caniuse-lite@1.0.30001731: {} ccount@2.0.1: {} + chalk@5.6.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@1.1.4: {} @@ -2988,6 +5639,10 @@ snapshots: character-reference-invalid@2.0.1: {} + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + chownr@3.0.0: {} chrome-trace-event@1.0.4: {} @@ -2996,17 +5651,30 @@ snapshots: dependencies: clsx: 2.1.1 + clean-stack@3.0.1: + dependencies: + escape-string-regexp: 4.0.0 + + cli-boxes@3.0.0: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + client-only@0.0.1: {} + clone@1.0.4: + optional: true + clsx@2.1.1: {} color-convert@2.0.1: dependencies: color-name: 1.1.4 - optional: true - color-name@1.1.4: - optional: true + color-name@1.1.4: {} color-string@1.9.1: dependencies: @@ -3026,32 +5694,95 @@ snapshots: commander@2.20.3: {} + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + cookie@0.6.0: {} + cookie@1.0.2: {} + core-util-is@1.0.3: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + csstype@3.1.3: {} + date-fns@4.1.0: {} + debug@4.4.1: dependencies: ms: 2.1.3 + debug@4.4.3(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 + deepmerge@4.3.1: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + optional: true + + define-lazy-prop@3.0.0: {} + dequal@2.0.3: {} detect-libc@2.0.4: {} detect-node-es@1.1.0: {} + devalue@5.4.2: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 + easy-table@1.2.0: + dependencies: + ansi-regex: 5.0.1 + optionalDependencies: + wcwidth: 1.0.1 + + ejs@3.1.10: + dependencies: + jake: 10.9.4 + electron-to-chromium@1.5.198: {} + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + emojis-list@3.0.0: {} + enhanced-resolve@5.18.2: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.2 + enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 @@ -3059,10 +5790,43 @@ snapshots: entities@6.0.1: {} + environment@1.1.0: {} + es-module-lexer@1.7.0: {} + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + escalade@3.2.0: {} + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} eslint-scope@5.1.1: @@ -3070,6 +5834,14 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 + esm-env@1.2.2: {} + + esprima@4.0.1: {} + + esrap@2.1.2: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -3084,6 +5856,23 @@ snapshots: eventsource-parser@3.0.6: {} + execa@9.6.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + + exsolve@1.0.7: {} + extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -3094,20 +5883,64 @@ snapshots: fast-uri@3.0.6: {} + fast-xml-parser@5.2.5: + dependencies: + strnum: 2.1.1 + fault@1.0.4: dependencies: format: 0.2.2 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + format@0.2.2: {} + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + get-east-asian-width@1.4.0: {} + get-nonce@1.0.1: {} + get-package-type@0.1.0: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + glob-to-regexp@0.4.1: {} graceful-fs@4.2.11: {} has-flag@4.0.0: {} + has-flag@5.0.1: {} + + has-own-prop@2.0.0: {} + hast-util-from-parse5@8.0.3: dependencies: '@types/hast': 3.0.4 @@ -3199,6 +6032,10 @@ snapshots: html-void-elements@3.0.0: {} + human-signals@8.0.1: {} + + indent-string@4.0.0: {} + inline-style-parser@0.2.4: {} is-alphabetical@1.0.4: {} @@ -3222,12 +6059,50 @@ snapshots: is-decimal@2.0.1: {} + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + is-hexadecimal@1.0.4: {} is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@2.0.0: {} + is-plain-obj@4.1.0: {} + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + is-stream@4.0.1: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.4 + picocolors: 1.1.1 + jest-worker@27.5.1: dependencies: '@types/node': 20.19.9 @@ -3248,8 +6123,16 @@ snapshots: json5@2.2.3: {} + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonlines@0.1.1: {} + kleur@4.1.5: {} + lightningcss-darwin-arm64@1.30.1: optional: true @@ -3295,6 +6178,8 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + lilconfig@3.1.3: {} + loader-runner@4.3.0: {} loader-utils@2.0.4: @@ -3303,6 +6188,17 @@ snapshots: emojis-list: 3.0.0 json5: 2.2.3 + locate-character@3.0.0: {} + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + longest-streak@3.1.0: {} lowlight@1.20.0: @@ -3672,6 +6568,16 @@ snapshots: dependencies: mime-db: 1.52.0 + mimic-function@5.0.1: {} + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + minipass@7.1.2: {} minizlib@3.0.2: @@ -3680,12 +6586,24 @@ snapshots: mitt@3.0.1: {} + mixpart@0.0.4: {} + + mixpart@0.0.5-alpha.0: {} + + mixpart@0.0.5-alpha.1: {} + mkdirp@3.0.1: {} + mri@1.2.0: {} + + mrmime@2.0.1: {} + ms@2.1.3: {} nanoid@3.3.11: {} + nanoid@5.1.6: {} + neo-async@2.6.2: {} next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): @@ -3719,6 +6637,11 @@ snapshots: node-releases@2.0.19: {} + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + nuqs@2.4.3(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0): dependencies: mitt: 3.0.1 @@ -3726,6 +6649,39 @@ snapshots: optionalDependencies: next: 15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.2.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + ora@8.2.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + os-paths@4.4.0: {} + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + parse-entities@2.0.0: dependencies: character-entities: 1.2.4 @@ -3745,12 +6701,28 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-ms@4.0.0: {} + parse5@7.3.0: dependencies: entities: 6.0.1 + path-exists@5.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + pathe@2.0.3: {} + picocolors@1.1.1: {} + picomatch@4.0.3: {} + + pid-port@2.0.0: + dependencies: + execa: 9.6.0 + postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -3763,6 +6735,10 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + prismjs@1.27.0: {} prismjs@1.30.0: {} @@ -3781,11 +6757,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 - raw-loader@4.0.2(webpack@5.101.0): + raw-loader@4.0.2(webpack@5.101.0(@swc/core@1.11.24)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.101.0 + webpack: 5.101.0(@swc/core@1.11.24) react-dom@19.1.0(react@19.1.0): dependencies: @@ -3859,6 +6835,8 @@ snapshots: react@19.1.0: {} + readdirp@4.1.2: {} + refractor@3.6.0: dependencies: hastscript: 6.0.0 @@ -3905,10 +6883,51 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + repeat-string@1.6.1: {} + require-from-string@2.0.2: {} + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + retry@0.13.1: {} + rollup@4.52.5: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 + fsevents: 2.3.3 + + run-applescript@7.1.0: {} + + sade@1.8.1: + dependencies: + mri: 1.2.0 + safe-buffer@5.2.1: {} scheduler@0.26.0: {} @@ -3926,13 +6945,19 @@ snapshots: ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) + seedrandom@3.0.5: {} + semver@7.7.2: optional: true + semver@7.7.3: {} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 + set-cookie-parser@2.7.2: {} + sharp@0.34.3: dependencies: color: 4.2.3 @@ -3963,11 +6988,25 @@ snapshots: '@img/sharp-win32-x64': 0.34.3 optional: true + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 optional: true + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + sonner@2.0.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 @@ -3986,6 +7025,8 @@ snapshots: space-separated-tokens@2.0.2: {} + stdin-discarder@0.2.2: {} + streamx@2.22.1: dependencies: fast-fifo: 1.3.2 @@ -3993,15 +7034,35 @@ snapshots: optionalDependencies: bare-events: 2.6.0 + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.0 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + strip-ansi@7.1.0: dependencies: ansi-regex: 6.2.0 + strip-final-newline@4.0.0: {} + + strnum@2.1.1: {} + style-to-js@1.1.17: dependencies: style-to-object: 1.0.9 @@ -4015,10 +7076,34 @@ snapshots: client-only: 0.0.1 react: 19.1.0 + supports-color@10.2.2: {} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 + supports-hyperlinks@4.3.0: + dependencies: + has-flag: 5.0.1 + supports-color: 10.2.2 + + svelte@5.43.3: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.4 + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 2.1.2 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.17 + zimmerframe: 1.1.4 + swr@2.3.4(react@19.1.0): dependencies: dequal: 2.0.3 @@ -4046,14 +7131,21 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - terser-webpack-plugin@5.3.14(webpack@5.101.0): + terminal-link@5.0.0: + dependencies: + ansi-escapes: 7.1.1 + supports-hyperlinks: 4.3.0 + + terser-webpack-plugin@5.3.14(@swc/core@1.11.24)(webpack@5.101.0(@swc/core@1.11.24)): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.101.0 + webpack: 5.101.0(@swc/core@1.11.24) + optionalDependencies: + '@swc/core': 1.11.24 terser@5.43.1: dependencies: @@ -4068,6 +7160,13 @@ snapshots: throttleit@2.1.0: {} + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + totalist@3.0.1: {} + trim-lines@3.0.1: {} trough@2.2.0: {} @@ -4076,10 +7175,22 @@ snapshots: tw-animate-css@1.3.6: {} + type-fest@0.21.3: {} + + type-fest@4.41.0: {} + typescript@5.9.2: {} + ulid@3.0.1: {} + undici-types@6.21.0: {} + undici@6.22.0: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -4113,6 +7224,8 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + universalify@2.0.1: {} + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: browserslist: 4.25.1 @@ -4161,16 +7274,40 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.19.9 + fsevents: 2.3.3 + jiti: 2.5.1 + lightningcss: 1.30.1 + terser: 5.43.1 + + vitefu@1.1.1(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)): + optionalDependencies: + vite: 7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1) + watchpack@2.4.4: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + optional: true + web-namespaces@2.0.1: {} webpack-sources@3.3.3: {} - webpack@5.101.0: + webpack@5.101.0(@swc/core@1.11.24): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -4194,7 +7331,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.11.24)(webpack@5.101.0(@swc/core@1.11.24)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -4202,14 +7339,90 @@ snapshots: - esbuild - uglify-js + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wordwrap@1.0.0: {} + + workflow@4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(svelte@5.43.3)(typescript@5.9.2)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)): + dependencies: + '@workflow/cli': 4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@workflow/core': 4.0.1-beta.9(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.0.1-beta.3 + '@workflow/next': 4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + '@workflow/nitro': 4.0.1-beta.11(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0) + '@workflow/sveltekit': 4.0.0-beta.5(@aws-sdk/client-sts@3.922.0)(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)))(svelte@5.43.3)(vite@7.2.0(@types/node@20.19.9)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)) + '@workflow/typescript-plugin': 4.0.1-beta.4(typescript@5.9.2) + ms: 2.1.3 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@babel/core' + - '@playwright/test' + - '@sveltejs/vite-plugin-svelte' + - '@swc/helpers' + - babel-plugin-macros + - babel-plugin-react-compiler + - next + - react + - react-dom + - sass + - supports-color + - svelte + - typescript + - vite + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + + xdg-app-paths@5.5.1: + dependencies: + os-paths: 4.4.0 + xdg-portable: 7.3.0 + + xdg-portable@7.3.0: + dependencies: + os-paths: 4.4.0 + xtend@4.0.2: {} yallist@5.0.0: {} + yocto-queue@1.2.1: {} + + yoctocolors@2.1.2: {} + + zimmerframe@1.1.4: {} + zod@3.24.4: {} zod@3.25.76: {} + zod@4.1.11: {} + zustand@5.0.6(@types/react@19.1.9)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)): optionalDependencies: '@types/react': 19.1.9 diff --git a/apps/vibe-coding-platform/tsconfig.json b/apps/vibe-coding-platform/tsconfig.json index d8b93235f2..17e069a557 100644 --- a/apps/vibe-coding-platform/tsconfig.json +++ b/apps/vibe-coding-platform/tsconfig.json @@ -16,6 +16,9 @@ "plugins": [ { "name": "next" + }, + { + "name": "workflow" } ], "paths": { From 1769cceb8fdd61178a08f640fbe09b6e786b4e65 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 10:10:06 -0800 Subject: [PATCH 02/13] Add Haiku model --- apps/vibe-coding-platform/ai/constants.ts | 2 ++ apps/vibe-coding-platform/ai/gateway.ts | 3 ++- apps/vibe-coding-platform/ai/tools/index.ts | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/vibe-coding-platform/ai/constants.ts b/apps/vibe-coding-platform/ai/constants.ts index 7ece65e9bd..1eec10943b 100644 --- a/apps/vibe-coding-platform/ai/constants.ts +++ b/apps/vibe-coding-platform/ai/constants.ts @@ -3,6 +3,7 @@ import { type GatewayModelId } from '@ai-sdk/gateway' export enum Models { AmazonNovaPro = 'amazon/nova-pro', AnthropicClaude4Sonnet = 'anthropic/claude-4-sonnet', + AnthropicClaude45Haiku = 'anthropic/claude-haiku-4.5', AnthropicClaude45Sonnet = 'anthropic/claude-sonnet-4.5', GoogleGeminiFlash = 'google/gemini-2.5-flash', MoonshotKimiK2 = 'moonshotai/kimi-k2', @@ -15,6 +16,7 @@ export const DEFAULT_MODEL = Models.AnthropicClaude45Sonnet export const SUPPORTED_MODELS: GatewayModelId[] = [ Models.AmazonNovaPro, Models.AnthropicClaude4Sonnet, + Models.AnthropicClaude45Haiku, Models.AnthropicClaude45Sonnet, Models.GoogleGeminiFlash, Models.MoonshotKimiK2, diff --git a/apps/vibe-coding-platform/ai/gateway.ts b/apps/vibe-coding-platform/ai/gateway.ts index c9ed0dd07b..863f7e36c8 100644 --- a/apps/vibe-coding-platform/ai/gateway.ts +++ b/apps/vibe-coding-platform/ai/gateway.ts @@ -37,7 +37,8 @@ export function getModelOptions( if ( modelId === Models.AnthropicClaude4Sonnet || - modelId === Models.AnthropicClaude45Sonnet + modelId === Models.AnthropicClaude45Sonnet || + modelId === Models.AnthropicClaude45Haiku ) { return { model: gateway(modelId), diff --git a/apps/vibe-coding-platform/ai/tools/index.ts b/apps/vibe-coding-platform/ai/tools/index.ts index c5aa832556..64e1183e3e 100644 --- a/apps/vibe-coding-platform/ai/tools/index.ts +++ b/apps/vibe-coding-platform/ai/tools/index.ts @@ -13,8 +13,8 @@ interface Params { export function tools({ modelId, writer }: Params) { return { createSandbox: createSandbox({ writer }), - generateFiles: generateFiles({ writer, modelId }), getSandboxURL: getSandboxURL({ writer }), + generateFiles: generateFiles({ writer, modelId }), runCommand: runCommand({ writer }), } } From a6bef747484c41b94b06e4408925c604f57803e1 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 10:22:12 -0800 Subject: [PATCH 03/13] [vibe-coding-platform] Tidy code to prepare for workflow use --- ...te-sandbox.md => create-sandbox.prompt.ts} | 19 +- .../ai/tools/create-sandbox.ts | 125 +++---- ...rate-files.md => generate-files.prompt.ts} | 31 +- .../ai/tools/generate-files.ts | 168 +++++---- ...ndbox-url.md => get-sandbox-url.prompt.ts} | 15 +- .../ai/tools/get-sandbox-url.ts | 77 ++-- apps/vibe-coding-platform/ai/tools/index.ts | 10 +- .../ai/tools/run-command.md | 67 ---- .../ai/tools/run-command.prompt.ts | 68 ++++ .../ai/tools/run-command.ts | 328 +++++++++--------- 10 files changed, 469 insertions(+), 439 deletions(-) rename apps/vibe-coding-platform/ai/tools/{create-sandbox.md => create-sandbox.prompt.ts} (64%) rename apps/vibe-coding-platform/ai/tools/{generate-files.md => generate-files.prompt.ts} (62%) rename apps/vibe-coding-platform/ai/tools/{get-sandbox-url.md => get-sandbox-url.prompt.ts} (70%) delete mode 100644 apps/vibe-coding-platform/ai/tools/run-command.md create mode 100644 apps/vibe-coding-platform/ai/tools/run-command.prompt.ts diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.md b/apps/vibe-coding-platform/ai/tools/create-sandbox.prompt.ts similarity index 64% rename from apps/vibe-coding-platform/ai/tools/create-sandbox.md rename to apps/vibe-coding-platform/ai/tools/create-sandbox.prompt.ts index f8cf0075f6..0e45744897 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.md +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.prompt.ts @@ -1,4 +1,4 @@ -Use this tool to create a new Vercel Sandbox — an ephemeral, isolated Linux container that serves as your development environment for the current session. This sandbox provides a secure workspace where you can upload files, install dependencies, run commands, start development servers, and preview web apps. Each sandbox is uniquely identified and must be referenced for all subsequent operations (e.g., file generation, command execution, or URL access). +export default `Use this tool to create a new Vercel Sandbox — an ephemeral, isolated Linux container that serves as your development environment for the current session. This sandbox provides a secure workspace where you can upload files, install dependencies, run commands, start development servers, and preview web apps. Each sandbox is uniquely identified and must be referenced for all subsequent operations (e.g., file generation, command execution, or URL access). ## When to Use This Tool @@ -13,17 +13,17 @@ Use this tool **once per session** when: After creation, the sandbox allows you to: -- Upload and manage files via `Generate Files` -- Execute shell commands with `Run Command` and `Wait Command` -- Access running servers through public URLs using `Get Sandbox URL` +- Upload and manage files via \`Generate Files\` +- Execute shell commands with \`Run Command\` and \`Wait Command\` +- Access running servers through public URLs using \`Get Sandbox URL\` Each sandbox mimics a real-world development environment and supports rapid iteration and testing without polluting the local system. The base system is Amazon Linux 2023 with the following additional packages: -``` +\`\`\` bind-utils bzip2 findutils git gzip iputils libicu libjpeg libpng ncurses-libs openssl openssl-libs pnpm procps tar unzip which whois zstd -``` +\`\`\` -You can install additional packages using the `dnf` package manager. You can NEVER use port 8080 as it is reserved for internal applications. When requested, you need to use a different port. +You can install additional packages using the \`dnf\` package manager. You can NEVER use port 8080 as it is reserved for internal applications. When requested, you need to use a different port. ## Best Practices @@ -36,7 +36,7 @@ You can install additional packages using the `dnf` package manager. You can NEV User: Can we start fresh? I want to rebuild the project from scratch. -Assistant: Got it — I’ll create a new sandbox so we can start clean. +Assistant: Got it — I'll create a new sandbox so we can start clean. *Calls Create Sandbox* @@ -48,8 +48,9 @@ Skip using this tool when: 2. You only need to upload files (use Generate Files) 3. You want to execute or wait for a command (use Run Command / Wait Command) 4. You want to preview the application (use Get Sandbox URL) -5. The user hasn’t asked to reset the environment +5. The user hasn't asked to reset the environment ## Summary Use Create Sandbox to initialize a secure, temporary development environment — but **only once per session**. Treat the sandbox as the core workspace for all follow-up actions unless the user explicitly asks to discard and start anew. +` diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts index 8c4422019d..0e05ff9ff6 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts @@ -1,75 +1,82 @@ -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' import { tool } from 'ai' -import description from './create-sandbox.md' +import description from './create-sandbox.prompt' import z from 'zod/v3' -interface Params { - writer: UIMessageStreamWriter> -} +const inputSchema = z.object({ + timeout: z + .number() + .min(600000) + .max(2700000) + .optional() + .describe( + 'Maximum time in milliseconds the Vercel Sandbox will remain active before automatically shutting down. Minimum 600000ms (10 minutes), maximum 2700000ms (45 minutes). Defaults to 600000ms (10 minutes). The sandbox will terminate all running processes when this timeout is reached.' + ), + ports: z + .array(z.number()) + .max(2) + .optional() + .describe( + 'Array of network ports to expose and make accessible from outside the Vercel Sandbox. These ports allow web servers, APIs, or other services running inside the Vercel Sandbox to be reached externally. Common ports include 3000 (Next.js), 8000 (Python servers), 5000 (Flask), etc.' + ), +}) + +const createSandboxStep = + (writer: UIMessageStreamWriter>) => + async ( + { timeout, ports }: z.infer, + { toolCallId }: { toolCallId: string } + ) => { + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { status: 'loading' }, + }) + + try { + const sandbox = await Sandbox.create({ + timeout: timeout ?? 600000, + ports, + }) -export const createSandbox = ({ writer }: Params) => - tool({ - description, - inputSchema: z.object({ - timeout: z - .number() - .min(600000) - .max(2700000) - .optional() - .describe( - 'Maximum time in milliseconds the Vercel Sandbox will remain active before automatically shutting down. Minimum 600000ms (10 minutes), maximum 2700000ms (45 minutes). Defaults to 600000ms (10 minutes). The sandbox will terminate all running processes when this timeout is reached.' - ), - ports: z - .array(z.number()) - .max(2) - .optional() - .describe( - 'Array of network ports to expose and make accessible from outside the Vercel Sandbox. These ports allow web servers, APIs, or other services running inside the Vercel Sandbox to be reached externally. Common ports include 3000 (Next.js), 8000 (Python servers), 5000 (Flask), etc.' - ), - }), - execute: async ({ timeout, ports }, { toolCallId }) => { writer.write({ id: toolCallId, type: 'data-create-sandbox', - data: { status: 'loading' }, + data: { sandboxId: sandbox.sandboxId, status: 'done' }, }) - try { - const sandbox = await Sandbox.create({ - timeout: timeout ?? 600000, - ports, - }) - - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { sandboxId: sandbox.sandboxId, status: 'done' }, - }) + return ( + `Sandbox created with ID: ${sandbox.sandboxId}.` + + `\nYou can now upload files, run commands, and access services on the exposed ports.` + ) + } catch (error) { + const richError = getRichError({ + action: 'Creating Sandbox', + error, + }) - return ( - `Sandbox created with ID: ${sandbox.sandboxId}.` + - `\nYou can now upload files, run commands, and access services on the exposed ports.` - ) - } catch (error) { - const richError = getRichError({ - action: 'Creating Sandbox', - error, - }) + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { + error: { message: richError.error.message }, + status: 'error', + }, + }) - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { - error: { message: richError.error.message }, - status: 'error', - }, - }) + console.log('Error creating Sandbox:', richError.error) + return richError.message + } + } - console.log('Error creating Sandbox:', richError.error) - return richError.message - } - }, +export const createSandbox = ( + writer: UIMessageStreamWriter> +) => + tool({ + description, + inputSchema, + execute: createSandboxStep(writer), }) diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.md b/apps/vibe-coding-platform/ai/tools/generate-files.prompt.ts similarity index 62% rename from apps/vibe-coding-platform/ai/tools/generate-files.md rename to apps/vibe-coding-platform/ai/tools/generate-files.prompt.ts index 96b3fc8afd..0dd83f04f3 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.md +++ b/apps/vibe-coding-platform/ai/tools/generate-files.prompt.ts @@ -1,8 +1,8 @@ -Use this tool to generate and upload code files into an existing Vercel Sandbox. It leverages an LLM to create file contents based on the current conversation context and user intent, then writes them directly into the sandbox file system. +export default `Use this tool to generate and upload code files into an existing Vercel Sandbox. It leverages an LLM to create file contents based on the current conversation context and user intent, then writes them directly into the sandbox file system. The generated files should be considered correct on first iteration and suitable for immediate use in the sandbox environment. This tool is essential for scaffolding applications, adding new features, writing configuration files, or fixing missing components. -All file paths must be relative to the sandbox root (e.g., `src/index.ts`, `package.json`, `components/Button.tsx`). +All file paths must be relative to the sandbox root (e.g., \`src/index.ts\`, \`package.json\`, \`components/Button.tsx\`). ## When to Use This Tool @@ -11,13 +11,13 @@ Use Generate Files when: 1. You need to create one or more new files as part of a feature, scaffold, or fix 2. The user requests code that implies file creation (e.g., new routes, APIs, components, services) 3. You need to bootstrap a new application structure inside a sandbox -4. You’re completing a multi-step task that involves generating or updating source code +4. You're completing a multi-step task that involves generating or updating source code 5. A prior command failed due to a missing file, and you need to supply it ## File Generation Guidelines - Every file must be complete, valid, and runnable where applicable -- File contents must reflect the user’s intent and the overall session context +- File contents must reflect the user's intent and the overall session context - File paths must be well-structured and use consistent naming conventions - Generated files should assume compatibility with other existing files in the sandbox @@ -25,24 +25,24 @@ Use Generate Files when: - Avoid redundant file generation if the file already exists and is unchanged - Use conventional file/folder structures for the tech stack in use -- If replacing an existing file, ensure the update fully satisfies the user’s request +- If replacing an existing file, ensure the update fully satisfies the user's request ## Examples of When to Use This Tool -User: Add a `NavBar.tsx` component and include it in `App.tsx` -Assistant: I’ll generate the `NavBar.tsx` file and update `App.tsx` to include it. +User: Add a \`NavBar.tsx\` component and include it in \`App.tsx\` +Assistant: I'll generate the \`NavBar.tsx\` file and update \`App.tsx\` to include it. *Uses Generate Files to create:* -- `components/NavBar.tsx` -- Modified `App.tsx` with import and usage of `NavBar` +- \`components/NavBar.tsx\` +- Modified \`App.tsx\` with import and usage of \`NavBar\` -User: Let’s scaffold a simple Express server with a `/ping` route. -Assistant: I’ll generate the necessary files to start the Express app. +User: Let's scaffold a simple Express server with a \`/ping\` route. +Assistant: I'll generate the necessary files to start the Express app. *Uses Generate Files to create:* -- `package.json` with Express as a dependency -- `index.js` with basic server and `/ping` route +- \`package.json\` with Express as a dependency +- \`index.js\` with basic server and \`/ping\` route ## When NOT to Use This Tool @@ -50,9 +50,9 @@ Assistant: I’ll generate the necessary files to start the Express app. Avoid using this tool when: 1. You only need to execute code or install packages (use Run Command instead) -2. You’re waiting for a command to finish (use Wait Command) +2. You're waiting for a command to finish (use Wait Command) 3. You want to preview a running server or UI (use Get Sandbox URL) -4. You haven’t created a sandbox yet (use Create Sandbox first) +4. You haven't created a sandbox yet (use Create Sandbox first) ## Output Behavior @@ -61,3 +61,4 @@ After generation, the tool will return a list of the files created, including th ## Summary Use Generate Files to programmatically create or update files in your Vercel Sandbox. It enables fast iteration, contextual coding, and dynamic file management — all driven by user intent and conversation context. +` diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.ts b/apps/vibe-coding-platform/ai/tools/generate-files.ts index 9f7d12d9fe..bd21a153a2 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.ts +++ b/apps/vibe-coding-platform/ai/tools/generate-files.ts @@ -1,107 +1,121 @@ -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getContents, type File } from './generate-files/get-contents' import { getRichError } from './get-rich-error' import { getWriteFiles } from './generate-files/get-write-files' import { tool } from 'ai' -import description from './generate-files.md' +import description from './generate-files.prompt' import z from 'zod/v3' +const inputSchema = z.object({ + sandboxId: z.string(), + paths: z.array(z.string()), +}) + interface Params { modelId: string - writer: UIMessageStreamWriter> } -export const generateFiles = ({ writer, modelId }: Params) => - tool({ - description, - inputSchema: z.object({ - sandboxId: z.string(), - paths: z.array(z.string()), - }), - execute: async ({ sandboxId, paths }, { toolCallId, messages }) => { +const generateFilesStep = + ( + writer: UIMessageStreamWriter>, + { modelId }: Params + ) => + async ( + { sandboxId, paths }: z.infer, + { toolCallId, messages }: { toolCallId: string; messages: any } + ) => { + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { paths: [], status: 'generating' }, + }) + + let sandbox: Sandbox | null = null + + try { + sandbox = await Sandbox.get({ sandboxId }) + } catch (error) { + const richError = getRichError({ + action: 'get sandbox by id', + args: { sandboxId }, + error, + }) + writer.write({ id: toolCallId, type: 'data-generating-files', - data: { paths: [], status: 'generating' }, + data: { error: richError.error, paths: [], status: 'error' }, }) - let sandbox: Sandbox | null = null - - try { - sandbox = await Sandbox.get({ sandboxId }) - } catch (error) { - const richError = getRichError({ - action: 'get sandbox by id', - args: { sandboxId }, - error, - }) + return richError.message + } - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { error: richError.error, paths: [], status: 'error' }, - }) - - return richError.message - } + const writeFiles = getWriteFiles({ sandbox, toolCallId, writer }) + const iterator = getContents({ messages, modelId, paths }) + const uploaded: File[] = [] - const writeFiles = getWriteFiles({ sandbox, toolCallId, writer }) - const iterator = getContents({ messages, modelId, paths }) - const uploaded: File[] = [] - - try { - for await (const chunk of iterator) { - if (chunk.files.length > 0) { - const error = await writeFiles(chunk) - if (error) { - return error - } else { - uploaded.push(...chunk.files) - } + try { + for await (const chunk of iterator) { + if (chunk.files.length > 0) { + const error = await writeFiles(chunk) + if (error) { + return error } else { - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { - status: 'generating', - paths: chunk.paths, - }, - }) + uploaded.push(...chunk.files) } + } else { + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { + status: 'generating', + paths: chunk.paths, + }, + }) } - } catch (error) { - const richError = getRichError({ - action: 'generate file contents', - args: { modelId, paths }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { - error: richError.error, - status: 'error', - paths, - }, - }) - - return richError.message } + } catch (error) { + const richError = getRichError({ + action: 'generate file contents', + args: { modelId, paths }, + error, + }) writer.write({ id: toolCallId, type: 'data-generating-files', - data: { paths: uploaded.map((file) => file.path), status: 'done' }, + data: { + error: richError.error, + status: 'error', + paths, + }, }) - return `Successfully generated and uploaded ${ - uploaded.length - } files. Their paths and contents are as follows: - ${uploaded - .map((file) => `Path: ${file.path}\nContent: ${file.content}\n`) - .join('\n')}` - }, + return richError.message + } + + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { paths: uploaded.map((file) => file.path), status: 'done' }, + }) + + return `Successfully generated and uploaded ${ + uploaded.length + } files. Their paths and contents are as follows: + ${uploaded + .map((file) => `Path: ${file.path}\nContent: ${file.content}\n`) + .join('\n')}` + } + +export const generateFiles = ( + writer: UIMessageStreamWriter>, + { modelId }: Params +) => + tool({ + description, + inputSchema, + execute: generateFilesStep(writer, { modelId }), }) diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.md b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.prompt.ts similarity index 70% rename from apps/vibe-coding-platform/ai/tools/get-sandbox-url.md rename to apps/vibe-coding-platform/ai/tools/get-sandbox-url.prompt.ts index 5076855674..fb33d3368a 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.md +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.prompt.ts @@ -1,4 +1,4 @@ -Use this tool to retrieve a publicly accessible URL for a specific port that was exposed during the creation of a Vercel Sandbox. This allows users (and the assistant) to preview web applications, access APIs, or interact with services running inside the sandbox via HTTP. +export default `Use this tool to retrieve a publicly accessible URL for a specific port that was exposed during the creation of a Vercel Sandbox. This allows users (and the assistant) to preview web applications, access APIs, or interact with services running inside the sandbox via HTTP. ⚠️ The requested port must have been explicitly declared when the sandbox was created. If the port was not exposed at sandbox creation time, this tool will NOT work for that port. @@ -13,17 +13,17 @@ Use Get Sandbox URL when: ## Critical Requirements -- The port must have been **explicitly exposed** in the `Create Sandbox` step - - Example: `ports: [3000]` +- The port must have been **explicitly exposed** in the \`Create Sandbox\` step + - Example: \`ports: [3000]\` - The command serving on that port must be actively running - - Use `Run Command` followed by `Wait Command` (if needed) to start the server + - Use \`Run Command\` followed by \`Wait Command\` (if needed) to start the server ## Best Practices - Only call this tool after the server process has successfully started - Use typical ports based on framework defaults (e.g., 3000 for Next.js, 5173 for Vite, 8080 for Node APIs) - If multiple services run on different ports, ensure each port was exposed up front during sandbox creation -- Don’t attempt to expose or discover ports dynamically after creation — only predefined ports are valid +- Don't attempt to expose or discover ports dynamically after creation — only predefined ports are valid ## When NOT to Use This Tool @@ -41,7 +41,7 @@ User: Can I preview the app after it's built? Assistant: 1. Create Sandbox: expose port 3000 2. Generate Files: scaffold the app -3. Run Command: `npm run dev` +3. Run Command: \`npm run dev\` 4. (Optional) Wait Command 5. Get Sandbox URL: port 3000 → Returns: a public URL the user can open in a browser @@ -49,4 +49,5 @@ Assistant: ## Summary -Use Get Sandbox URL to access live previews of services running inside the sandbox — but only for ports that were explicitly exposed during sandbox creation. If the port wasn’t declared, it will not be accessible externally. +Use Get Sandbox URL to access live previews of services running inside the sandbox — but only for ports that were explicitly exposed during sandbox creation. If the port wasn't declared, it will not be accessible externally. +` diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts index 719921c61a..53e29c25c2 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts @@ -1,45 +1,52 @@ -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { tool } from 'ai' -import description from './get-sandbox-url.md' +import description from './get-sandbox-url.prompt' import z from 'zod/v3' -interface Params { - writer: UIMessageStreamWriter> -} +const inputSchema = z.object({ + sandboxId: z + .string() + .describe( + "The unique identifier of the Vercel Sandbox (e.g., 'sbx_abc123xyz'). This ID is returned when creating a Vercel Sandbox and is used to reference the specific sandbox instance." + ), + port: z + .number() + .describe( + 'The port number where a service is running inside the Vercel Sandbox (e.g., 3000 for Next.js dev server, 8000 for Python apps, 5000 for Flask). The port must have been exposed when the sandbox was created or when running commands.' + ), +}) -export const getSandboxURL = ({ writer }: Params) => - tool({ - description, - inputSchema: z.object({ - sandboxId: z - .string() - .describe( - "The unique identifier of the Vercel Sandbox (e.g., 'sbx_abc123xyz'). This ID is returned when creating a Vercel Sandbox and is used to reference the specific sandbox instance." - ), - port: z - .number() - .describe( - 'The port number where a service is running inside the Vercel Sandbox (e.g., 3000 for Next.js dev server, 8000 for Python apps, 5000 for Flask). The port must have been exposed when the sandbox was created or when running commands.' - ), - }), - execute: async ({ sandboxId, port }, { toolCallId }) => { - writer.write({ - id: toolCallId, - type: 'data-get-sandbox-url', - data: { status: 'loading' }, - }) +const executeGetSandboxUrl = + (writer: UIMessageStreamWriter>) => + async ( + { sandboxId, port }: z.infer, + { toolCallId }: { toolCallId: string } + ) => { + writer.write({ + id: toolCallId, + type: 'data-get-sandbox-url', + data: { status: 'loading' }, + }) + + const sandbox = await Sandbox.get({ sandboxId }) + const url = sandbox.domain(port) - const sandbox = await Sandbox.get({ sandboxId }) - const url = sandbox.domain(port) + writer.write({ + id: toolCallId, + type: 'data-get-sandbox-url', + data: { url, status: 'done' }, + }) - writer.write({ - id: toolCallId, - type: 'data-get-sandbox-url', - data: { url, status: 'done' }, - }) + return { url } + } - return { url } - }, +export const getSandboxURL = ( + writer: UIMessageStreamWriter> +) => + tool({ + description, + inputSchema, + execute: executeGetSandboxUrl(writer), }) diff --git a/apps/vibe-coding-platform/ai/tools/index.ts b/apps/vibe-coding-platform/ai/tools/index.ts index 64e1183e3e..7e42675009 100644 --- a/apps/vibe-coding-platform/ai/tools/index.ts +++ b/apps/vibe-coding-platform/ai/tools/index.ts @@ -1,9 +1,9 @@ import type { InferUITools, UIMessage, UIMessageStreamWriter } from 'ai' -import type { DataPart } from '../messages/data-parts' import { createSandbox } from './create-sandbox' import { generateFiles } from './generate-files' import { getSandboxURL } from './get-sandbox-url' import { runCommand } from './run-command' +import { DataPart } from '../messages/data-parts' interface Params { modelId: string @@ -12,10 +12,10 @@ interface Params { export function tools({ modelId, writer }: Params) { return { - createSandbox: createSandbox({ writer }), - getSandboxURL: getSandboxURL({ writer }), - generateFiles: generateFiles({ writer, modelId }), - runCommand: runCommand({ writer }), + createSandbox: createSandbox(writer), + generateFiles: generateFiles(writer, { modelId }), + getSandboxURL: getSandboxURL(writer), + runCommand: runCommand(writer), } } diff --git a/apps/vibe-coding-platform/ai/tools/run-command.md b/apps/vibe-coding-platform/ai/tools/run-command.md deleted file mode 100644 index 2dafae2ed0..0000000000 --- a/apps/vibe-coding-platform/ai/tools/run-command.md +++ /dev/null @@ -1,67 +0,0 @@ -Use this tool to run a command inside an existing Vercel Sandbox. You can choose whether the command should block until completion or run in the background by setting the `wait` parameter: - -- `wait: true` → Command runs and **must complete** before the response is returned. -- `wait: false` → Command starts in the background, and the response returns immediately with its `commandId`. - -⚠️ Commands are stateless — each one runs in a fresh shell session with **no memory** of previous commands. You CANNOT rely on `cd`, but other state like shell exports or background processes from prior commands should be available. - -## When to Use This Tool - -Use Run Command when: - -1. You need to install dependencies (e.g., `pnpm install`) -2. You want to run a build or test process (e.g., `pnpm build`, `vite build`) -3. You need to launch a development server or long-running process -4. You need to compile or execute code within the sandbox -5. You want to run a task in the background without blocking the session - -## Sequencing Rules - -- If two commands depend on each other, **set `wait: true` on the first** to ensure it finishes before starting the second - - ✅ Good: Run `pnpm install` with `wait: true` → then run `pnpm dev` - - ❌ Bad: Run both with `wait: false` and expect them to be sequential -- Do **not** issue multiple sequential commands in one call - - ❌ `cd src && node index.js` - - ✅ `node src/index.js` -- Do **not** assume directory state is preserved — use full relative paths - -## Command Format - -- Separate the base command from its arguments - - ✅ `{ command: "pnpm", args: ["install", "--verbose"], wait: true }` - - ❌ `{ command: "pnpm install --verbose" }` -- Avoid shell syntax like pipes, redirections, or `&&`. If unavoidable, ensure it works in a stateless, single-session execution - -## When to Set `wait` to True - -- The next step depends on the result of the command -- The command must finish before accessing its output -- Example: Installing dependencies before building, compiling before running tests - -## When to Set `wait` to False - -- The command is intended to stay running indefinitely (e.g., a dev server) -- The command has no impact on subsequent operations (e.g., printing logs) - -## Other Rules - -- When running `pnpm dev` in a Next.js or Vite project, HMR can handle updates so generally you don't need to kill the server process and start it again after changing files. - -## Examples - - -User: Install dependencies and then run the dev server -Assistant: -1. Run Command: `{ command: "pnpm", args: ["install"], wait: true }` -2. Run Command: `{ command: "pnpm", args: ["run", "dev"], wait: false }` - - - -User: Build the app with Vite -Assistant: -Run Command: `{ command: "vite", args: ["build"], wait: true }` - - -## Summary - -Use Run Command to start shell commands in the sandbox, controlling execution flow with the `wait` flag. Commands are stateless and isolated — use relative paths, and only run long-lived processes with `wait: false`. diff --git a/apps/vibe-coding-platform/ai/tools/run-command.prompt.ts b/apps/vibe-coding-platform/ai/tools/run-command.prompt.ts new file mode 100644 index 0000000000..9428acb91a --- /dev/null +++ b/apps/vibe-coding-platform/ai/tools/run-command.prompt.ts @@ -0,0 +1,68 @@ +export default `Use this tool to run a command inside an existing Vercel Sandbox. You can choose whether the command should block until completion or run in the background by setting the \`wait\` parameter: + +- \`wait: true\` → Command runs and **must complete** before the response is returned. +- \`wait: false\` → Command starts in the background, and the response returns immediately with its \`commandId\`. + +⚠️ Commands are stateless — each one runs in a fresh shell session with **no memory** of previous commands. You CANNOT rely on \`cd\`, but other state like shell exports or background processes from prior commands should be available. + +## When to Use This Tool + +Use Run Command when: + +1. You need to install dependencies (e.g., \`pnpm install\`) +2. You want to run a build or test process (e.g., \`pnpm build\`, \`vite build\`) +3. You need to launch a development server or long-running process +4. You need to compile or execute code within the sandbox +5. You want to run a task in the background without blocking the session + +## Sequencing Rules + +- If two commands depend on each other, **set \`wait: true\` on the first** to ensure it finishes before starting the second + - ✅ Good: Run \`pnpm install\` with \`wait: true\` → then run \`pnpm dev\` + - ❌ Bad: Run both with \`wait: false\` and expect them to be sequential +- Do **not** issue multiple sequential commands in one call + - ❌ \`cd src && node index.js\` + - ✅ \`node src/index.js\` +- Do **not** assume directory state is preserved — use full relative paths + +## Command Format + +- Separate the base command from its arguments + - ✅ \`{ command: "pnpm", args: ["install", "--verbose"], wait: true }\` + - ❌ \`{ command: "pnpm install --verbose" }\` +- Avoid shell syntax like pipes, redirections, or \`&&\`. If unavoidable, ensure it works in a stateless, single-session execution + +## When to Set \`wait\` to True + +- The next step depends on the result of the command +- The command must finish before accessing its output +- Example: Installing dependencies before building, compiling before running tests + +## When to Set \`wait\` to False + +- The command is intended to stay running indefinitely (e.g., a dev server) +- The command has no impact on subsequent operations (e.g., printing logs) + +## Other Rules + +- When running \`pnpm dev\` in a Next.js or Vite project, HMR can handle updates so generally you don't need to kill the server process and start it again after changing files. + +## Examples + + +User: Install dependencies and then run the dev server +Assistant: +1. Run Command: \`{ command: "pnpm", args: ["install"], wait: true }\` +2. Run Command: \`{ command: "pnpm", args: ["run", "dev"], wait: false }\` + + + +User: Build the app with Vite +Assistant: +Run Command: \`{ command: "vite", args: ["build"], wait: true }\` + + +## Summary + +Use Run Command to start shell commands in the sandbox, controlling execution flow with the \`wait\` flag. Commands are stateless and isolated — use relative paths, and only run long-lived processes with \`wait: false\`. +` diff --git a/apps/vibe-coding-platform/ai/tools/run-command.ts b/apps/vibe-coding-platform/ai/tools/run-command.ts index 398648ef5e..7d0b3695ca 100644 --- a/apps/vibe-coding-platform/ai/tools/run-command.ts +++ b/apps/vibe-coding-platform/ai/tools/run-command.ts @@ -1,110 +1,116 @@ -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Command, Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' import { tool } from 'ai' -import description from './run-command.md' +import description from './run-command.prompt' import z from 'zod/v3' -interface Params { - writer: UIMessageStreamWriter> -} +const inputSchema = z.object({ + sandboxId: z + .string() + .describe('The ID of the Vercel Sandbox to run the command in'), + command: z + .string() + .describe( + "The base command to run (e.g., 'npm', 'node', 'python', 'ls', 'cat'). Do NOT include arguments here. IMPORTANT: Each command runs independently in a fresh shell session - there is no persistent state between commands. You cannot use 'cd' to change directories for subsequent commands." + ), + args: z + .array(z.string()) + .optional() + .describe( + "Array of arguments for the command. Each argument should be a separate string (e.g., ['install', '--verbose'] for npm install --verbose, or ['src/index.js'] to run a file, or ['-la', './src'] to list files). IMPORTANT: Use relative paths (e.g., 'src/file.js') or absolute paths instead of trying to change directories with 'cd' first, since each command runs in a fresh shell session." + ), + sudo: z.boolean().optional().describe('Whether to run the command with sudo'), + wait: z + .boolean() + .describe( + 'Whether to wait for the command to finish before returning. If true, the command will block until it completes, and you will receive its output.' + ), +}) + +const executeRunCommand = + (writer: UIMessageStreamWriter>) => + async ( + { sandboxId, command, sudo, wait, args = [] }: z.infer, + { toolCallId }: { toolCallId: string } + ) => { + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { sandboxId, command, args, status: 'executing' }, + }) + + let sandbox: Sandbox | null = null + + try { + sandbox = await Sandbox.get({ sandboxId }) + } catch (error) { + const richError = getRichError({ + action: 'get sandbox by id', + args: { sandboxId }, + error, + }) -export const runCommand = ({ writer }: Params) => - tool({ - description, - inputSchema: z.object({ - sandboxId: z - .string() - .describe('The ID of the Vercel Sandbox to run the command in'), - command: z - .string() - .describe( - "The base command to run (e.g., 'npm', 'node', 'python', 'ls', 'cat'). Do NOT include arguments here. IMPORTANT: Each command runs independently in a fresh shell session - there is no persistent state between commands. You cannot use 'cd' to change directories for subsequent commands." - ), - args: z - .array(z.string()) - .optional() - .describe( - "Array of arguments for the command. Each argument should be a separate string (e.g., ['install', '--verbose'] for npm install --verbose, or ['src/index.js'] to run a file, or ['-la', './src'] to list files). IMPORTANT: Use relative paths (e.g., 'src/file.js') or absolute paths instead of trying to change directories with 'cd' first, since each command runs in a fresh shell session." - ), - sudo: z - .boolean() - .optional() - .describe('Whether to run the command with sudo'), - wait: z - .boolean() - .describe( - 'Whether to wait for the command to finish before returning. If true, the command will block until it completes, and you will receive its output.' - ), - }), - execute: async ( - { sandboxId, command, sudo, wait, args = [] }, - { toolCallId } - ) => { writer.write({ id: toolCallId, type: 'data-run-command', - data: { sandboxId, command, args, status: 'executing' }, + data: { + sandboxId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } + + let cmd: Command | null = null + + try { + cmd = await sandbox.runCommand({ + detached: true, + cmd: command, + args, + sudo, + }) + } catch (error) { + const richError = getRichError({ + action: 'run command in sandbox', + args: { sandboxId }, + error, }) - let sandbox: Sandbox | null = null - - try { - sandbox = await Sandbox.get({ sandboxId }) - } catch (error) { - const richError = getRichError({ - action: 'get sandbox by id', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - - let cmd: Command | null = null - - try { - cmd = await sandbox.runCommand({ - detached: true, - cmd: command, + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + command, args, - sudo, - }) - } catch (error) { - const richError = getRichError({ - action: 'run command in sandbox', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } + error: richError.error, + status: 'error', + }, + }) + return richError.message + } + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'executing', + }, + }) + + if (!wait) { writer.write({ id: toolCallId, type: 'data-run-command', @@ -113,29 +119,61 @@ export const runCommand = ({ writer }: Params) => commandId: cmd.cmdId, command, args, - status: 'executing', + status: 'running', }, }) - if (!wait) { - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'running', - }, - }) - - return `The command \`${command} ${args.join( + return `The command \`${command} ${args.join( + ' ' + )}\` has been started in the background in the sandbox with ID \`${sandboxId}\` with the commandId ${ + cmd.cmdId + }.` + } + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'waiting', + }, + }) + + const done = await cmd.wait() + try { + const [stdout, stderr] = await Promise.all([done.stdout(), done.stderr()]) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + exitCode: done.exitCode, + status: 'done', + }, + }) + + return ( + `The command \`${command} ${args.join( ' ' - )}\` has been started in the background in the sandbox with ID \`${sandboxId}\` with the commandId ${ - cmd.cmdId - }.` - } + )}\` has finished with exit code ${done.exitCode}.` + + `Stdout of the command was: \n` + + `\`\`\`\n${stdout}\n\`\`\`\n` + + `Stderr of the command was: \n` + + `\`\`\`\n${stderr}\n\`\`\`` + ) + } catch (error) { + const richError = getRichError({ + action: 'wait for command to finish', + args: { sandboxId, commandId: cmd.cmdId }, + error, + }) writer.write({ id: toolCallId, @@ -145,60 +183,20 @@ export const runCommand = ({ writer }: Params) => commandId: cmd.cmdId, command, args, - status: 'waiting', + error: richError.error, + status: 'error', }, }) - const done = await cmd.wait() - try { - const [stdout, stderr] = await Promise.all([ - done.stdout(), - done.stderr(), - ]) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - exitCode: done.exitCode, - status: 'done', - }, - }) - - return ( - `The command \`${command} ${args.join( - ' ' - )}\` has finished with exit code ${done.exitCode}.` + - `Stdout of the command was: \n` + - `\`\`\`\n${stdout}\n\`\`\`\n` + - `Stderr of the command was: \n` + - `\`\`\`\n${stderr}\n\`\`\`` - ) - } catch (error) { - const richError = getRichError({ - action: 'wait for command to finish', - args: { sandboxId, commandId: cmd.cmdId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - }, + return richError.message + } + } + +export const runCommand = ( + writer: UIMessageStreamWriter> +) => + tool({ + description, + inputSchema, + execute: executeRunCommand(writer), }) From 3a3b39a166c3a00c6b2eb94797ef7a4a095d5128 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 10:30:37 -0800 Subject: [PATCH 04/13] Small tidy --- apps/vibe-coding-platform/ai/tools/create-sandbox.ts | 6 ++++-- apps/vibe-coding-platform/ai/tools/generate-files.ts | 11 +++++++---- apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts | 6 ++++-- apps/vibe-coding-platform/ai/tools/index.ts | 8 ++++---- apps/vibe-coding-platform/ai/tools/run-command.ts | 6 ++++-- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts index 0e05ff9ff6..462a81ed71 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts @@ -72,9 +72,11 @@ const createSandboxStep = } } -export const createSandbox = ( +export const createSandbox = ({ + writer, +}: { writer: UIMessageStreamWriter> -) => +}) => tool({ description, inputSchema, diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.ts b/apps/vibe-coding-platform/ai/tools/generate-files.ts index bd21a153a2..1acde4c8f4 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.ts +++ b/apps/vibe-coding-platform/ai/tools/generate-files.ts @@ -110,10 +110,13 @@ const generateFilesStep = .join('\n')}` } -export const generateFiles = ( - writer: UIMessageStreamWriter>, - { modelId }: Params -) => +export const generateFiles = ({ + writer, + modelId, +}: { + writer: UIMessageStreamWriter> + modelId: string +}) => tool({ description, inputSchema, diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts index 53e29c25c2..991dcad67a 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts @@ -42,9 +42,11 @@ const executeGetSandboxUrl = return { url } } -export const getSandboxURL = ( +export const getSandboxURL = ({ + writer, +}: { writer: UIMessageStreamWriter> -) => +}) => tool({ description, inputSchema, diff --git a/apps/vibe-coding-platform/ai/tools/index.ts b/apps/vibe-coding-platform/ai/tools/index.ts index 7e42675009..5e4ab6992a 100644 --- a/apps/vibe-coding-platform/ai/tools/index.ts +++ b/apps/vibe-coding-platform/ai/tools/index.ts @@ -12,10 +12,10 @@ interface Params { export function tools({ modelId, writer }: Params) { return { - createSandbox: createSandbox(writer), - generateFiles: generateFiles(writer, { modelId }), - getSandboxURL: getSandboxURL(writer), - runCommand: runCommand(writer), + createSandbox: createSandbox({ writer }), + generateFiles: generateFiles({ writer, modelId }), + getSandboxURL: getSandboxURL({ writer }), + runCommand: runCommand({ writer }), } } diff --git a/apps/vibe-coding-platform/ai/tools/run-command.ts b/apps/vibe-coding-platform/ai/tools/run-command.ts index 7d0b3695ca..d1f08c47d2 100644 --- a/apps/vibe-coding-platform/ai/tools/run-command.ts +++ b/apps/vibe-coding-platform/ai/tools/run-command.ts @@ -192,9 +192,11 @@ const executeRunCommand = } } -export const runCommand = ( +export const runCommand = ({ + writer, +}: { writer: UIMessageStreamWriter> -) => +}) => tool({ description, inputSchema, From fadc62822613bd27141bdc241aeeaaef92270dd9 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 11:11:17 -0800 Subject: [PATCH 05/13] Remove unused imports --- apps/vibe-coding-platform/ai/tools/create-sandbox.ts | 2 +- apps/vibe-coding-platform/ai/tools/generate-files.ts | 4 ++-- apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts | 2 +- apps/vibe-coding-platform/ai/tools/index.ts | 2 +- apps/vibe-coding-platform/ai/tools/run-command.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts index 462a81ed71..3c54693638 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts @@ -1,4 +1,4 @@ -import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' +import type { UIMessage, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.ts b/apps/vibe-coding-platform/ai/tools/generate-files.ts index 1acde4c8f4..450227fc54 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.ts +++ b/apps/vibe-coding-platform/ai/tools/generate-files.ts @@ -1,4 +1,4 @@ -import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' +import type { ModelMessage, UIMessage, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getContents, type File } from './generate-files/get-contents' @@ -24,7 +24,7 @@ const generateFilesStep = ) => async ( { sandboxId, paths }: z.infer, - { toolCallId, messages }: { toolCallId: string; messages: any } + { toolCallId, messages }: { toolCallId: string; messages: ModelMessage[] } ) => { writer.write({ id: toolCallId, diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts index 991dcad67a..51374062f1 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts @@ -1,4 +1,4 @@ -import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' +import type { UIMessage, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { tool } from 'ai' diff --git a/apps/vibe-coding-platform/ai/tools/index.ts b/apps/vibe-coding-platform/ai/tools/index.ts index 5e4ab6992a..0a5b54b74c 100644 --- a/apps/vibe-coding-platform/ai/tools/index.ts +++ b/apps/vibe-coding-platform/ai/tools/index.ts @@ -3,7 +3,7 @@ import { createSandbox } from './create-sandbox' import { generateFiles } from './generate-files' import { getSandboxURL } from './get-sandbox-url' import { runCommand } from './run-command' -import { DataPart } from '../messages/data-parts' +import type { DataPart } from '../messages/data-parts' interface Params { modelId: string diff --git a/apps/vibe-coding-platform/ai/tools/run-command.ts b/apps/vibe-coding-platform/ai/tools/run-command.ts index d1f08c47d2..15cfeed6d3 100644 --- a/apps/vibe-coding-platform/ai/tools/run-command.ts +++ b/apps/vibe-coding-platform/ai/tools/run-command.ts @@ -1,4 +1,4 @@ -import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' +import type { UIMessage, UIMessageStreamWriter } from 'ai' import type { DataPart } from '../messages/data-parts' import { Command, Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' From cbcfdc605ab9745e7379f35f774708eaec2a2bca Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 16:13:50 -0800 Subject: [PATCH 06/13] Package upgrade --- apps/vibe-coding-platform/package.json | 2 + apps/vibe-coding-platform/pnpm-lock.yaml | 3708 ++++++++++++++++++++-- 2 files changed, 3511 insertions(+), 199 deletions(-) diff --git a/apps/vibe-coding-platform/package.json b/apps/vibe-coding-platform/package.json index a6c9423656..cbf32ee13f 100644 --- a/apps/vibe-coding-platform/package.json +++ b/apps/vibe-coding-platform/package.json @@ -23,6 +23,7 @@ "@radix-ui/react-select": "2.2.5", "@radix-ui/react-slot": "1.2.3", "@vercel/sandbox": "0.0.17", + "@workflow/ai": "4.0.1-beta.15", "ai": "5.0.59", "arctic": "3.7.0", "botid": "1.4.5", @@ -48,6 +49,7 @@ "swr": "2.3.4", "tailwind-merge": "3.3.1", "use-stick-to-bottom": "1.1.1", + "workflow": "4.0.1-beta.15", "zod": "3.25.76", "zustand": "5.0.6" }, diff --git a/apps/vibe-coding-platform/pnpm-lock.yaml b/apps/vibe-coding-platform/pnpm-lock.yaml index 1164383737..599c6be61b 100644 --- a/apps/vibe-coding-platform/pnpm-lock.yaml +++ b/apps/vibe-coding-platform/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: '@vercel/sandbox': specifier: 0.0.17 version: 0.0.17 + '@workflow/ai': + specifier: 4.0.1-beta.15 + version: 4.0.1-beta.15(ai@5.0.59(zod@3.25.76))(workflow@4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.2)) ai: specifier: 5.0.59 version: 5.0.59(zod@3.25.76) @@ -122,6 +125,9 @@ importers: use-stick-to-bottom: specifier: 1.1.1 version: 1.1.1(react@19.1.0) + workflow: + specifier: 4.0.1-beta.15 + version: 4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.2) zod: specifier: 3.25.76 version: 3.25.76 @@ -149,7 +155,7 @@ importers: version: 15.5.13 raw-loader: specifier: 4.0.2 - version: 4.0.2(webpack@5.101.0) + version: 4.0.2(webpack@5.101.0(@swc/core@1.11.24)) tailwindcss: specifier: ^4 version: 4.1.11 @@ -214,6 +220,137 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-sso@3.933.0': + resolution: {integrity: sha512-zwGLSiK48z3PzKpQiDMKP85+fpIrPMF1qQOQW9OW7BGj5AuBZIisT2O4VzIgYJeh+t47MLU7VgBQL7muc+MJDg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sts@3.933.0': + resolution: {integrity: sha512-H3vb8KFNPpBPl5tMDWt91PQyteUVPXyr7I3n5WGec4lU8fJsCqorVWHr7opqPAz2vhzLcXQoDu1ELcEXZrsL3Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.932.0': + resolution: {integrity: sha512-AS8gypYQCbNojwgjvZGkJocC2CoEICDx9ZJ15ILsv+MlcCVLtUJSRSx3VzJOUY2EEIaGLRrPNlIqyn/9/fySvA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.932.0': + resolution: {integrity: sha512-ozge/c7NdHUDyHqro6+P5oHt8wfKSUBN+olttiVfBe9Mw3wBMpPa3gQ0pZnG+gwBkKskBuip2bMR16tqYvUSEA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.932.0': + resolution: {integrity: sha512-b6N9Nnlg8JInQwzBkUq5spNaXssM3h3zLxGzpPrnw0nHSIWPJPTbZzA5Ca285fcDUFuKP+qf3qkuqlAjGOdWhg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.933.0': + resolution: {integrity: sha512-HygGyKuMG5AaGXsmM0d81miWDon55xwalRHB3UmDg3QBhtunbNIoIaWUbNTKuBZXcIN6emeeEZw/YgSMqLc0YA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.933.0': + resolution: {integrity: sha512-L2dE0Y7iMLammQewPKNeEh1z/fdJyYEU+/QsLBD9VEh+SXcN/FIyTi21Isw8wPZN6lMB9PDVtISzBnF8HuSFrw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.932.0': + resolution: {integrity: sha512-BodZYKvT4p/Dkm28Ql/FhDdS1+p51bcZeMMu2TRtU8PoMDHnVDhHz27zASEKSZwmhvquxHrZHB0IGuVqjZUtSQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.933.0': + resolution: {integrity: sha512-/R1DBR7xNcuZIhS2RirU+P2o8E8/fOk+iLAhbqeSTq+g09fP/F6W7ouFpS5eVE2NIfWG7YBFoVddOhvuqpn51g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.609.0': + resolution: {integrity: sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.609.0 + + '@aws-sdk/credential-provider-web-identity@3.933.0': + resolution: {integrity: sha512-c7Eccw2lhFx2/+qJn3g+uIDWRuWi2A6Sz3PVvckFUEzPsP0dPUo19hlvtarwP5GzrsXn0yEPRVhpewsIaSCGaQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.930.0': + resolution: {integrity: sha512-x30jmm3TLu7b/b+67nMyoV0NlbnCVT5DI57yDrhXAPCtdgM1KtdLWt45UcHpKOm1JsaIkmYRh2WYu7Anx4MG0g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.930.0': + resolution: {integrity: sha512-vh4JBWzMCBW8wREvAwoSqB2geKsZwSHTa0nSt0OMOLp2PdTYIZDi0ZiVMmpfnjcx9XbS6aSluLv9sKx4RrG46A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.933.0': + resolution: {integrity: sha512-qgrMlkVKzTCAdNw2A05DC2sPBo0KRQ7wk+lbYSRJnWVzcrceJhnmhoZVV5PFv7JtchK7sHVcfm9lcpiyd+XaCA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.932.0': + resolution: {integrity: sha512-9BGTbJyA/4PTdwQWE9hAFIJGpsYkyEW20WON3i15aDqo5oRZwZmqaVageOD57YYqG8JDJjvcwKyDdR4cc38dvg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.933.0': + resolution: {integrity: sha512-o1GX0+IPlFi/D8ei9y/jj3yucJWNfPnbB5appVBWevAyUdZA5KzQ2nK/hDxiu9olTZlFEFpf1m1Rn3FaGxHqsw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.930.0': + resolution: {integrity: sha512-KL2JZqH6aYeQssu1g1KuWsReupdfOoxD6f1as2VC+rdwYFUu4LfzMsFfXnBvvQWWqQ7rZHWOw1T+o5gJmg7Dzw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.933.0': + resolution: {integrity: sha512-Qzq7zj9yXUgAAJEbbmqRhm0jmUndl8nHG0AbxFEfCfQRVZWL96Qzx0mf8lYwT9hIMrXncLwy31HOthmbXwFRwQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.609.0': + resolution: {integrity: sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/types@3.930.0': + resolution: {integrity: sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.930.0': + resolution: {integrity: sha512-M2oEKBzzNAYr136RRc6uqw3aWlwCxqTP1Lawps9E1d2abRPvl1p1ztQmmXp1Ak4rv8eByIZ+yQyKQ3zPdRG5dw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.893.0': + resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.930.0': + resolution: {integrity: sha512-q6lCRm6UAe+e1LguM5E4EqM9brQlDem4XDcQ87NzEvlTW6GzmNCO0w1jS0XgCFXQHjDxjdlNFX+5sRbHijwklg==} + + '@aws-sdk/util-user-agent-node@3.932.0': + resolution: {integrity: sha512-/kC6cscHrZL74TrZtgiIL5jJNbVsw9duGGPurmaVgoCbP7NnxyaSWEurbNV3VPNPhNE3bV3g4Ci+odq+AlsYQg==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.930.0': + resolution: {integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==} + engines: {node: '>=18.0.0'} + + '@aws/lambda-invoke-store@0.2.0': + resolution: {integrity: sha512-D1jAmAZQYMoPiacfgNf7AWhg3DFN3Wq/vQv3WINt9znwjzHp2x+WzdJFxxj7xZL7V1U79As6G8f7PorMYWBKsQ==} + engines: {node: '>=18.0.0'} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/runtime@7.28.2': resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} engines: {node: '>=6.9.0'} @@ -221,6 +358,162 @@ packages: '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} @@ -365,6 +658,9 @@ packages: '@jridgewell/gen-mapping@0.3.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -378,6 +674,9 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@next/env@15.5.4': resolution: {integrity: sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==} @@ -429,6 +728,30 @@ packages: cpu: [x64] os: [win32] + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nuxt/kit@4.2.0': + resolution: {integrity: sha512-1yN3LL6RDN5GjkNLPUYCbNRkaYnat6hqejPyfIBBVzrWOrpiQeNMGxQM/IcVdaSuBJXAnu0sUvTKXpXkmPhljg==} + engines: {node: '>=18.12.0'} + + '@oclif/core@4.0.0': + resolution: {integrity: sha512-BMWGvJrzn5PnG60gTNFEvaBT0jvGNiJCKN4aJBYP6E7Bq/Y5XPnxPrkj7ZZs/Jsd1oVn6K/JRmF6gWpv72DOew==} + engines: {node: '>=18.0.0'} + + '@oclif/plugin-help@6.2.31': + resolution: {integrity: sha512-o4xR98DEFf+VqY+M9B3ZooTm2T/mlGvyBHwHcnsPJCEnvzHqEA9xUlCUK4jm7FBXHhkppziMgCC2snsueLoIpQ==} + engines: {node: '>=18.0.0'} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -797,98 +1120,360 @@ packages: '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} - '@tailwindcss/node@4.1.11': - resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + '@smithy/abort-controller@4.2.5': + resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-android-arm64@4.1.11': - resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] + '@smithy/config-resolver@4.4.3': + resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-darwin-arm64@4.1.11': - resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] + '@smithy/core@3.18.4': + resolution: {integrity: sha512-o5tMqPZILBvvROfC8vC+dSVnWJl9a0u9ax1i1+Bq8515eYjUJqqk5XjjEsDLoeL5dSqGSh6WGdVx1eJ1E/Nwhw==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-darwin-x64@4.1.11': - resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] + '@smithy/credential-provider-imds@4.2.5': + resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-freebsd-x64@4.1.11': - resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] + '@smithy/fetch-http-handler@5.3.6': + resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': - resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] + '@smithy/hash-node@4.2.5': + resolution: {integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': - resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] + '@smithy/invalid-dependency@4.2.5': + resolution: {integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': - resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': - resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] + '@smithy/is-array-buffer@4.2.0': + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-linux-x64-musl@4.1.11': - resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] + '@smithy/middleware-content-length@4.2.5': + resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-wasm32-wasi@4.1.11': - resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib + '@smithy/middleware-endpoint@4.3.11': + resolution: {integrity: sha512-eJXq9VJzEer1W7EQh3HY2PDJdEcEUnv6sKuNt4eVjyeNWcQFS4KmnY+CKkYOIR6tSqarn6bjjCqg1UB+8UJiPQ==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': - resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] + '@smithy/middleware-retry@4.4.11': + resolution: {integrity: sha512-EL5OQHvFOKneJVRgzRW4lU7yidSwp/vRJOe542bHgExN3KNThr1rlg0iE4k4SnA+ohC+qlUxoK+smKeAYPzfAQ==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': - resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] + '@smithy/middleware-serde@4.2.6': + resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==} + engines: {node: '>=18.0.0'} - '@tailwindcss/oxide@4.1.11': - resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} - engines: {node: '>= 10'} + '@smithy/middleware-stack@4.2.5': + resolution: {integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==} + engines: {node: '>=18.0.0'} - '@tailwindcss/postcss@4.1.11': + '@smithy/node-config-provider@4.3.5': + resolution: {integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.4.5': + resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@3.1.11': + resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@4.2.5': + resolution: {integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.3.5': + resolution: {integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.2.5': + resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.2.5': + resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.2.5': + resolution: {integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.4.0': + resolution: {integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.3.5': + resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.9.7': + resolution: {integrity: sha512-pskaE4kg0P9xNQWihfqlTMyxyFR3CH6Sr6keHYghgyqqDXzjl2QJg5lAzuVe/LzZiOzcbcVtxKYi1/fZPt/3DA==} + engines: {node: '>=18.0.0'} + + '@smithy/types@3.7.2': + resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==} + engines: {node: '>=16.0.0'} + + '@smithy/types@4.9.0': + resolution: {integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.2.5': + resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.3.0': + resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.2.0': + resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.2.1': + resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.2.0': + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.2.0': + resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.3.10': + resolution: {integrity: sha512-3iA3JVO1VLrP21FsZZpMCeF93aqP3uIOMvymAT3qHIJz2YlgDeRvNUspFwCNqd/j3qqILQJGtsVQnJZICh/9YA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.2.13': + resolution: {integrity: sha512-PTc6IpnpSGASuzZAgyUtaVfOFpU0jBD2mcGwrgDuHf7PlFgt5TIPxCYBDbFQs06jxgeV3kd/d/sok1pzV0nJRg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.2.5': + resolution: {integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.2.0': + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.2.5': + resolution: {integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.2.5': + resolution: {integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.5.6': + resolution: {integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.2.0': + resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.2.0': + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + engines: {node: '>=18.0.0'} + + '@smithy/uuid@1.1.0': + resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} + engines: {node: '>=18.0.0'} + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@swc/core-darwin-arm64@1.11.24': + resolution: {integrity: sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.11.24': + resolution: {integrity: sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.11.24': + resolution: {integrity: sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.11.24': + resolution: {integrity: sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.11.24': + resolution: {integrity: sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.11.24': + resolution: {integrity: sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.11.24': + resolution: {integrity: sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.11.24': + resolution: {integrity: sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.11.24': + resolution: {integrity: sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.11.24': + resolution: {integrity: sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.11.24': + resolution: {integrity: sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} + + '@tailwindcss/node@4.1.11': + resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + + '@tailwindcss/oxide-android-arm64@4.1.11': + resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.11': + resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.11': + resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.11': + resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.11': + resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.11': + resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.11': + resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.11': resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} '@types/debug@4.1.12': @@ -944,10 +1529,33 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@vercel/functions@3.3.2': + resolution: {integrity: sha512-9ldHsiw3wztPdOCEik83QC22VW52F2bBfDvKDdcjDKKFeXgHSy2EVezMbljg6GWTBfvfRlsoVNt6BEu9HQ1mKA==} + engines: {node: '>= 20'} + peerDependencies: + '@aws-sdk/credential-provider-web-identity': '*' + peerDependenciesMeta: + '@aws-sdk/credential-provider-web-identity': + optional: true + '@vercel/oidc@2.0.0': resolution: {integrity: sha512-U0hncpXof7gC9xtmSrjz6vrDqdwJXi8z/zSc9FyS80AoXKfCZtpkBz9gtL3x30Agmpxpwe35P1W2dP9Epa/RGA==} engines: {node: '>= 18'} + '@vercel/oidc@3.0.4': + resolution: {integrity: sha512-NUna+D5Kk0UMscKnnFVgHhV4SfuoiE9wFpF8E8RvxHYQv9NB2PRIkQp0eTvu2uVzExFB5eH2/lYPpxw/SrICzg==} + engines: {node: '>= 20'} + + '@vercel/queue@0.0.0-alpha.23': + resolution: {integrity: sha512-1JuRZ4U3nLUisu9sP++J9Y12/p1J1NDPcpDGBFJ+sjc7DfGZAqEzCIUypnC7ymbfkEFaVnSznmrBs8wkVeTMpQ==} + engines: {node: '>=20.0.0'} + hasBin: true + + '@vercel/queue@0.0.0-alpha.28': + resolution: {integrity: sha512-EPFrBQPJrGjt8lr9kTmio5G57CGILnf4+pKalQNt88cAinXxaWLrvpBTzwG0esx+yreaUoqkFzpgWxTjsgZtlg==} + engines: {node: '>=20.0.0'} + hasBin: true + '@vercel/sandbox@0.0.17': resolution: {integrity: sha512-oLfYqYKMjwNopjO2BKbVd0uA1dL43jk6yqaeIgquLJG/Jo01FZb5sd6XfGIfFa21XDxXGM61eomX7fSps/hvYg==} @@ -996,6 +1604,79 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@workflow/ai@4.0.1-beta.15': + resolution: {integrity: sha512-7knQ7mJjQsSCg4VfUbhCtfueBBFO2j6sTAb9YorrtJuGZqmq7jXVsn5GDqIP1/jJqWPyNRdsbJP28RjGP3yDig==} + peerDependencies: + ai: ^5 + workflow: 4.0.1-beta.15 + + '@workflow/builders@4.0.1-beta.11': + resolution: {integrity: sha512-QBrpsEiBIwGwIrUHr1xBz2RbxvheRaFvkCJX87vMpmmFc5eOexEmOAShonSTjcg5Y05NQ9/DkueCHpSy3Mq1hw==} + + '@workflow/cli@4.0.1-beta.15': + resolution: {integrity: sha512-PVXNdhLDek8ONNiE2m2lQL1KWg47/8AMq7sdeHPXiVso7Ppb+KxTX9LyUzcEoOl17Z3PksPaxCf7/k004s4xkA==} + hasBin: true + + '@workflow/core@4.0.1-beta.13': + resolution: {integrity: sha512-3aP20JL+8gIdwmTU/3DElJSf+1A/lp+u4J9ECR8o5ldUhGhUvJcWGtjipzRs9of6WyKp2YdD6H5fR5HwgQllAA==} + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@workflow/errors@4.0.1-beta.5': + resolution: {integrity: sha512-U8I/Y50GFRvPYBxwfxxc/NbGiw7f9jxKMOnDwn+R7fSjcP57JuGaaOpOzgXOpQudIddzTRLcSEoI3WiVhXU10A==} + + '@workflow/next@4.0.1-beta.15': + resolution: {integrity: sha512-US8aDbkXKsEvSo486Zp1CFzmgGD4tRrV5xzUK3RWVw+OdTTcwCZA1tvfDefh6BrewDCfN9rwtOwujH7152pnVw==} + peerDependencies: + next: '>13' + peerDependenciesMeta: + next: + optional: true + + '@workflow/nitro@4.0.1-beta.15': + resolution: {integrity: sha512-EnNV7ndU5AGWf9zlwz5XUaOhqqKKM2Nn/jqwZR2oJlTqQXKOGtWuZirpS9Q6H/h3+/ymK+KfP3/ffUBd7Y4Vrg==} + + '@workflow/nuxt@4.0.1-beta.4': + resolution: {integrity: sha512-kM2+QLkVoJMabeS/PwcTmHvZkjwsxcBRstrrQ4UfhbR+tjZmx0Wc1s1UmL73jdZHkEmhaReI0ahtxm1bBKQ8tg==} + + '@workflow/sveltekit@4.0.0-beta.9': + resolution: {integrity: sha512-KN+sX5VkA0uPCFTo7s0JkZnYRWvQ63A/L0avAYOFfQU2PtdJI8N1KrA6i1ZnEN7ryRFICcWo4H0pBNgcETH6Eg==} + + '@workflow/swc-plugin@4.0.1-beta.6': + resolution: {integrity: sha512-xPoTdMZcrtD/ur78KX0E0Q5pR1vjlAUik1cPCI0FVHgzz1xt5BYmFsDY/MVJ8+cE9Q1StrB9ZsfdlGwUlZdM5A==} + peerDependencies: + '@swc/core': 1.11.24 + + '@workflow/typescript-plugin@4.0.1-beta.4': + resolution: {integrity: sha512-AkZ3wHbPJq0ZhswR9ctdysJ1ZSW3lmYII+spnbgS72zxkwgl1MNwPtlFt1+lANLDLx6638IbRFwFvsqLtQLqrQ==} + peerDependencies: + typescript: '>=5.0.0' + + '@workflow/utils@4.0.1-beta.3': + resolution: {integrity: sha512-AOFCFp1VMZ6KkkU7NyuG6qtJtnAZC9ZoXhvh6+QJCn8lNiON5o5S+3M27MJIk/uhAlMHSLcOCFLFpR8gxKgC2A==} + + '@workflow/web@4.0.1-beta.11': + resolution: {integrity: sha512-sY8mrJPwNdCeazjWQq89Kl6/9i+xPzzW00X4Vzrf4lz9CMelqFDoQdYsS2Ww9M/9WilmUi0i9ODksL2dCNNlCw==} + + '@workflow/world-local@5.0.0-beta.9': + resolution: {integrity: sha512-mbKELeynXEVDwJ+7DYF40EbRJBA58ET8aaDi7QKAH7IAnPP7yNfhsd85DBlJyb6hLGfUJ6nND/54iynEsumgCQ==} + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@workflow/world-vercel@4.0.1-beta.9': + resolution: {integrity: sha512-bhSXq4whm4yHHifrUJsiOU7vxx+G/HcqH+nkWApFNYGoBpJtJlSZ2l3Gw3jZeUUMJO3qN1pAsQjVU1QIVCOMIw==} + + '@workflow/world@4.0.1-beta.6': + resolution: {integrity: sha512-35cXfnfsicJjO8Kw48U33hnF3PZFUXHAQEJMs/fBC63oonmdhIh4cE/o5uhf0UDxO3J1luMn48/GrYHpifWhew==} + peerDependencies: + zod: 4.1.11 + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -1043,26 +1724,69 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.2.0: + resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + ansi-regex@6.2.0: resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + ansis@3.17.0: + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} + engines: {node: '>=14'} + arctic@3.7.0: resolution: {integrity: sha512-ZMQ+f6VazDgUJOd+qNV+H7GohNSYal1mVjm5kEaZfE2Ifb7Ss70w+Q7xpJC87qZDkMZIXYf0pTIYZA0OPasSbw==} + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.6.0: resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==} @@ -1080,6 +1804,20 @@ packages: react: optional: true + bowser@2.12.1: + resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + browserslist@4.25.1: resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1088,12 +1826,40 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + builtin-modules@5.0.0: + resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} + engines: {node: '>=18.20'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + c12@3.3.2: + resolution: {integrity: sha512-QkikB2X5voO1okL3QsES0N690Sn/K9WokXqUsDQsWy5SnYb+psYQFGA10iy1bZHj3fjISKsI67Q90gruvWWM3A==} + peerDependencies: + magicast: '*' + peerDependenciesMeta: + magicast: + optional: true + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + caniuse-lite@1.0.30001731: resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -1115,6 +1881,10 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -1123,12 +1893,35 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + clean-stack@3.0.1: + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} + engines: {node: '>=10'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -1156,13 +1949,46 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -1172,13 +1998,43 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.4.0: + resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-libc@2.0.4: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} @@ -1186,16 +2042,45 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + devalue@5.5.0: + resolution: {integrity: sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} + engines: {node: '>=12'} + + easy-table@1.2.0: + resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + electron-to-chromium@1.5.198: resolution: {integrity: sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} + enhanced-resolve@5.18.2: + resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} + engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.3: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} @@ -1204,13 +2089,36 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + errx@0.1.0: + resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==} + es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -1219,6 +2127,11 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -1234,6 +2147,9 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -1242,6 +2158,16 @@ packages: resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} engines: {node: '>=18.0.0'} + execa@9.6.0: + resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + engines: {node: ^18.19.0 || >=20.5.0} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -1251,26 +2177,89 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-xml-parser@5.2.5: + resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} + hasBin: true + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + engines: {node: '>=14.14'} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1278,6 +2267,14 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} @@ -1317,6 +2314,26 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -1332,6 +2349,9 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} @@ -1341,16 +2361,79 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + is-hexadecimal@1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -1359,9 +2442,20 @@ packages: resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + jose@6.0.12: resolution: {integrity: sha512-T8xypXs8CpmiIi78k0E+Lk7T2zlK4zDyg+o1CZ4AkOHgDg98ogdP2BeZ61lTFKFyoEwJ9RgAgN+SdM3iPgNonQ==} + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -1379,9 +2473,19 @@ packages: engines: {node: '>=6'} hasBin: true + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonlines@0.1.1: resolution: {integrity: sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA==} + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + + knitwork@1.3.0: + resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==} + lightningcss-darwin-arm64@1.30.1: resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} @@ -1446,6 +2550,9 @@ packages: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -1454,6 +2561,14 @@ packages: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -1519,6 +2634,10 @@ packages: merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -1603,6 +2722,10 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -1611,6 +2734,18 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -1622,11 +2757,26 @@ packages: mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mixpart@0.0.4: + resolution: {integrity: sha512-RAoaOSXnMLrfUfmFbNynRYjeMru/bhgAYRy/GQVI8gmRq7vm9V9c2gGVYnYoQ008X6YTmRIu5b0397U7vb0bIA==} + engines: {node: '>=22.0.0'} + + mixpart@0.0.5-alpha.0: + resolution: {integrity: sha512-XS3bfxqdHsxqLoK0DnkGiM++KZGhXFj8KrzfNND/4d0DDBkbVdmlEajIAOQ+2+tHVw2zFI1ng8SnJSOfVZg0HA==} + engines: {node: '>=22.0.0'} + + mixpart@0.0.5-alpha.1: + resolution: {integrity: sha512-2ZfG/NO2SVE9HLk1/W+yOrIOA0d674ljZExLdievZQpYjbJYQjIdye8vNMR63yF7nN/NbO9q8mp16JUEYBCilg==} + engines: {node: '>=20.0.0'} + mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1635,6 +2785,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} + engines: {node: ^18 || >=20} + hasBin: true + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -1665,9 +2820,16 @@ packages: sass: optional: true + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nuqs@2.4.3: resolution: {integrity: sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q==} peerDependencies: @@ -1686,18 +2848,102 @@ packages: react-router-dom: optional: true + nypm@0.6.2: + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + + os-paths@4.4.0: + resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} + engines: {node: '>= 6.0'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + perfect-debounce@2.0.0: + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pid-port@2.0.0: + resolution: {integrity: sha512-EDmfRxLl6lkhPjDI+19l5pkII89xVsiCP3aGjS808f7M16DyCKSXEWthD/hjyDLn5I4gKqTVw7hSgdvdXRJDTw==} + engines: {node: '>=20'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -1706,6 +2952,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} engines: {node: '>=6'} @@ -1727,6 +2977,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -1736,6 +2989,9 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + react-dom@19.1.0: resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} peerDependencies: @@ -1798,6 +3054,10 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + refractor@3.6.0: resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} @@ -1816,14 +3076,37 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -1838,11 +3121,22 @@ packages: resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} engines: {node: '>= 10.13.0'} + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + seedrandom@3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -1850,9 +3144,25 @@ packages: resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -1876,16 +3186,39 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + streamx@2.22.1: resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strnum@2.1.1: + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + style-to-js@1.1.17: resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} @@ -1905,10 +3238,18 @@ packages: babel-plugin-macros: optional: true + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-hyperlinks@4.3.0: + resolution: {integrity: sha512-i6sWEzuwadSlcr2mOnb0ktlIl+K5FVxsPXmoPfknDd2gyw4ZBIAZ5coc0NQzYqDdEYXMHy8NaY9rWwa1Q1myiQ==} + engines: {node: '>=20'} + swr@2.3.4: resolution: {integrity: sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==} peerDependencies: @@ -1931,6 +3272,10 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} + terminal-link@5.0.0: + resolution: {integrity: sha512-qFAy10MTMwjzjU8U16YS4YoZD+NQLHzLssFMNqgravjbvIPNiqkGFR4yjhJfmY9R5OFU7+yHxc6y+uGHkKwLRA==} + engines: {node: '>=20'} + terser-webpack-plugin@5.3.14: resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} @@ -1959,6 +3304,22 @@ packages: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -1971,14 +3332,44 @@ packages: tw-animate-css@1.3.6: resolution: {integrity: sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + ulid@3.0.1: + resolution: {integrity: sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q==} + hasBin: true + + unctx@2.4.1: + resolution: {integrity: sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@6.19.0: + resolution: {integrity: sha512-9gGwbSLgYMjp4r6M5P9bhqhx1E+RyUIHqZE0r7BmrRoqroJUG6xlVu5TXH9DnwmCPLkcaVNrcYtxUE9d3InnyQ==} + engines: {node: '>=18.17'} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -1997,6 +3388,18 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin@2.3.10: + resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} + engines: {node: '>=18.12.0'} + + untyped@2.0.0: + resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==} + hasBin: true + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -2049,6 +3452,9 @@ packages: resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -2056,6 +3462,9 @@ packages: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + webpack@5.101.0: resolution: {integrity: sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==} engines: {node: '>=10.13.0'} @@ -2066,6 +3475,51 @@ packages: webpack-cli: optional: true + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workflow@4.0.1-beta.15: + resolution: {integrity: sha512-IaWe9+g2Ay+zilakSchBczYHjQvlI6SXozNbTJIwoAfNXav9p/k5AN7mW+7fAbKUUhr7CfZSYXrJ/Jhq3TXZew==} + hasBin: true + peerDependencies: + '@opentelemetry/api': '1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + + xdg-app-paths@5.1.0: + resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==} + engines: {node: '>=6'} + + xdg-portable@7.3.0: + resolution: {integrity: sha512-sqMMuL1rc0FmMBOzCpd0yuy9trqF2yTTVe+E9ogwCSWQCdDEtQUwrZPT6AxqtsFGRNxycgncbP/xmOOSPw5ZUw==} + engines: {node: '>= 6.0'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -2074,12 +3528,23 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + zod@3.24.4: resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.1.11: + resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} + zustand@5.0.6: resolution: {integrity: sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==} engines: {node: '>=12.20.0'} @@ -2121,46 +3586,498 @@ snapshots: '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@standard-schema/spec': 1.0.0 - eventsource-parser: 3.0.6 - zod: 3.25.76 + '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@standard-schema/spec': 1.0.0 + eventsource-parser: 3.0.6 + zod: 3.25.76 + + '@ai-sdk/provider@2.0.0': + dependencies: + json-schema: 0.4.0 + + '@ai-sdk/react@2.0.59(react@19.1.0)(zod@3.25.76)': + dependencies: + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + ai: 5.0.59(zod@3.25.76) + react: 19.1.0 + swr: 2.3.4(react@19.1.0) + throttleit: 2.1.0 + optionalDependencies: + zod: 3.25.76 + + '@ai-sdk/vercel@1.0.20(zod@3.25.76)': + dependencies: + '@ai-sdk/openai-compatible': 1.0.19(zod@3.25.76) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) + zod: 3.25.76 + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.930.0 + '@aws-sdk/util-locate-window': 3.893.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.930.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.930.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-sso@3.933.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.932.0 + '@aws-sdk/middleware-host-header': 3.930.0 + '@aws-sdk/middleware-logger': 3.930.0 + '@aws-sdk/middleware-recursion-detection': 3.933.0 + '@aws-sdk/middleware-user-agent': 3.932.0 + '@aws-sdk/region-config-resolver': 3.930.0 + '@aws-sdk/types': 3.930.0 + '@aws-sdk/util-endpoints': 3.930.0 + '@aws-sdk/util-user-agent-browser': 3.930.0 + '@aws-sdk/util-user-agent-node': 3.932.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.4 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.11 + '@smithy/middleware-retry': 4.4.11 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.7 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.10 + '@smithy/util-defaults-mode-node': 4.2.13 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.933.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.932.0 + '@aws-sdk/credential-provider-node': 3.933.0 + '@aws-sdk/middleware-host-header': 3.930.0 + '@aws-sdk/middleware-logger': 3.930.0 + '@aws-sdk/middleware-recursion-detection': 3.933.0 + '@aws-sdk/middleware-user-agent': 3.932.0 + '@aws-sdk/region-config-resolver': 3.930.0 + '@aws-sdk/types': 3.930.0 + '@aws-sdk/util-endpoints': 3.930.0 + '@aws-sdk/util-user-agent-browser': 3.930.0 + '@aws-sdk/util-user-agent-node': 3.932.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.4 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.11 + '@smithy/middleware-retry': 4.4.11 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.7 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.10 + '@smithy/util-defaults-mode-node': 4.2.13 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.932.0': + dependencies: + '@aws-sdk/types': 3.930.0 + '@aws-sdk/xml-builder': 3.930.0 + '@smithy/core': 3.18.4 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/smithy-client': 4.9.7 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.932.0': + dependencies: + '@aws-sdk/core': 3.932.0 + '@aws-sdk/types': 3.930.0 + '@smithy/property-provider': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.932.0': + dependencies: + '@aws-sdk/core': 3.932.0 + '@aws-sdk/types': 3.930.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/node-http-handler': 4.4.5 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.7 + '@smithy/types': 4.9.0 + '@smithy/util-stream': 4.5.6 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.933.0': + dependencies: + '@aws-sdk/core': 3.932.0 + '@aws-sdk/credential-provider-env': 3.932.0 + '@aws-sdk/credential-provider-http': 3.932.0 + '@aws-sdk/credential-provider-process': 3.932.0 + '@aws-sdk/credential-provider-sso': 3.933.0 + '@aws-sdk/credential-provider-web-identity': 3.933.0 + '@aws-sdk/nested-clients': 3.933.0 + '@aws-sdk/types': 3.930.0 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.933.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.932.0 + '@aws-sdk/credential-provider-http': 3.932.0 + '@aws-sdk/credential-provider-ini': 3.933.0 + '@aws-sdk/credential-provider-process': 3.932.0 + '@aws-sdk/credential-provider-sso': 3.933.0 + '@aws-sdk/credential-provider-web-identity': 3.933.0 + '@aws-sdk/types': 3.930.0 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.932.0': + dependencies: + '@aws-sdk/core': 3.932.0 + '@aws-sdk/types': 3.930.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.933.0': + dependencies: + '@aws-sdk/client-sso': 3.933.0 + '@aws-sdk/core': 3.932.0 + '@aws-sdk/token-providers': 3.933.0 + '@aws-sdk/types': 3.930.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.933.0)': + dependencies: + '@aws-sdk/client-sts': 3.933.0 + '@aws-sdk/types': 3.609.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.933.0': + dependencies: + '@aws-sdk/core': 3.932.0 + '@aws-sdk/nested-clients': 3.933.0 + '@aws-sdk/types': 3.930.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-host-header@3.930.0': + dependencies: + '@aws-sdk/types': 3.930.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.930.0': + dependencies: + '@aws-sdk/types': 3.930.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.933.0': + dependencies: + '@aws-sdk/types': 3.930.0 + '@aws/lambda-invoke-store': 0.2.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.932.0': + dependencies: + '@aws-sdk/core': 3.932.0 + '@aws-sdk/types': 3.930.0 + '@aws-sdk/util-endpoints': 3.930.0 + '@smithy/core': 3.18.4 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.933.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.932.0 + '@aws-sdk/middleware-host-header': 3.930.0 + '@aws-sdk/middleware-logger': 3.930.0 + '@aws-sdk/middleware-recursion-detection': 3.933.0 + '@aws-sdk/middleware-user-agent': 3.932.0 + '@aws-sdk/region-config-resolver': 3.930.0 + '@aws-sdk/types': 3.930.0 + '@aws-sdk/util-endpoints': 3.930.0 + '@aws-sdk/util-user-agent-browser': 3.930.0 + '@aws-sdk/util-user-agent-node': 3.932.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.4 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.11 + '@smithy/middleware-retry': 4.4.11 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.7 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.10 + '@smithy/util-defaults-mode-node': 4.2.13 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.930.0': + dependencies: + '@aws-sdk/types': 3.930.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.933.0': + dependencies: + '@aws-sdk/core': 3.932.0 + '@aws-sdk/nested-clients': 3.933.0 + '@aws-sdk/types': 3.930.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.609.0': + dependencies: + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/types@3.930.0': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.930.0': + dependencies: + '@aws-sdk/types': 3.930.0 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-endpoints': 3.2.5 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.893.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.930.0': + dependencies: + '@aws-sdk/types': 3.930.0 + '@smithy/types': 4.9.0 + bowser: 2.12.1 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.932.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.932.0 + '@aws-sdk/types': 3.930.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.930.0': + dependencies: + '@smithy/types': 4.9.0 + fast-xml-parser: 5.2.5 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.2.0': {} + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/runtime@7.28.2': {} + + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true - '@ai-sdk/provider@2.0.0': - dependencies: - json-schema: 0.4.0 + '@esbuild/openbsd-arm64@0.25.12': + optional: true - '@ai-sdk/react@2.0.59(react@19.1.0)(zod@3.25.76)': - dependencies: - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - ai: 5.0.59(zod@3.25.76) - react: 19.1.0 - swr: 2.3.4(react@19.1.0) - throttleit: 2.1.0 - optionalDependencies: - zod: 3.25.76 + '@esbuild/openbsd-x64@0.25.12': + optional: true - '@ai-sdk/vercel@1.0.20(zod@3.25.76)': - dependencies: - '@ai-sdk/openai-compatible': 1.0.19(zod@3.25.76) - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - zod: 3.25.76 + '@esbuild/openharmony-arm64@0.25.12': + optional: true - '@alloc/quick-lru@5.2.0': {} + '@esbuild/sunos-x64@0.25.12': + optional: true - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@esbuild/win32-arm64@0.25.12': + optional: true - '@babel/runtime@7.28.2': {} + '@esbuild/win32-ia32@0.25.12': + optional: true - '@emnapi/runtime@1.4.5': - dependencies: - tslib: 2.8.1 + '@esbuild/win32-x64@0.25.12': optional: true '@floating-ui/core@1.7.3': @@ -2275,6 +4192,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.10': @@ -2289,6 +4211,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.4 + '@next/env@15.5.4': {} '@next/swc-darwin-arm64@15.5.4': @@ -2315,6 +4242,71 @@ snapshots: '@next/swc-win32-x64-msvc@15.5.4': optional: true + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nuxt/kit@4.2.0': + dependencies: + c12: 3.3.2 + consola: 3.4.2 + defu: 6.1.4 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.0.8 + ignore: 7.0.5 + jiti: 2.6.1 + klona: 2.0.6 + mlly: 1.8.0 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.0 + rc9: 2.1.2 + scule: 1.3.0 + semver: 7.7.3 + tinyglobby: 0.2.15 + ufo: 1.6.1 + unctx: 2.4.1 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + + '@oclif/core@4.0.0(typescript@5.9.2)': + dependencies: + ansi-escapes: 4.3.2 + ansis: 3.17.0 + clean-stack: 3.0.1 + cli-spinners: 2.9.2 + cosmiconfig: 9.0.0(typescript@5.9.2) + debug: 4.4.1(supports-color@8.1.1) + ejs: 3.1.10 + get-package-type: 0.1.0 + globby: 11.1.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + minimatch: 9.0.5 + string-width: 4.2.3 + supports-color: 8.1.1 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + transitivePeerDependencies: + - typescript + + '@oclif/plugin-help@6.2.31(typescript@5.9.2)': + dependencies: + '@oclif/core': 4.0.0(typescript@5.9.2) + transitivePeerDependencies: + - typescript + '@opentelemetry/api@1.9.0': {} '@oslojs/asn1@1.0.0': @@ -2562,113 +4554,452 @@ snapshots: '@types/react': 19.1.9 '@types/react-dom': 19.1.7(@types/react@19.1.9) - '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-slot@1.2.3(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/rect@1.1.1': {} + + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@smithy/abort-controller@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/config-resolver@4.4.3': + dependencies: + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + tslib: 2.8.1 + + '@smithy/core@3.18.4': + dependencies: + '@smithy/middleware-serde': 4.2.6 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.2.5': + dependencies: + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.3.6': + dependencies: + '@smithy/protocol-http': 5.3.5 + '@smithy/querystring-builder': 4.2.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.2.5': + dependencies: + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.3.11': + dependencies: + '@smithy/core': 3.18.4 + '@smithy/middleware-serde': 4.2.6 + '@smithy/node-config-provider': 4.3.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-middleware': 4.2.5 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.11': + dependencies: + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/service-error-classification': 4.2.5 + '@smithy/smithy-client': 4.9.7 + '@smithy/types': 4.9.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + + '@smithy/middleware-serde@4.2.6': + dependencies: + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.3.5': + dependencies: + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.4.5': + dependencies: + '@smithy/abort-controller': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/querystring-builder': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/property-provider@3.1.11': + dependencies: + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@smithy/property-provider@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.3.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + '@smithy/util-uri-escape': 4.2.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.2.5': + dependencies: + '@smithy/types': 4.9.0 + + '@smithy/shared-ini-file-loader@4.4.0': + dependencies: + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.3.5': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-uri-escape': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.9.7': + dependencies: + '@smithy/core': 3.18.4 + '@smithy/middleware-endpoint': 4.3.11 + '@smithy/middleware-stack': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-stream': 4.5.6 + tslib: 2.8.1 + + '@smithy/types@3.7.2': + dependencies: + tslib: 2.8.1 + + '@smithy/types@4.9.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.2.5': + dependencies: + '@smithy/querystring-parser': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.3.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.2.1': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.2.0': + dependencies: + '@smithy/is-array-buffer': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.2.0': dependencies: - '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + tslib: 2.8.1 - '@radix-ui/react-slot@1.2.3(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-defaults-mode-browser@4.3.10': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/property-provider': 4.2.5 + '@smithy/smithy-client': 4.9.7 + '@smithy/types': 4.9.0 + tslib: 2.8.1 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-defaults-mode-node@4.2.13': dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/config-resolver': 4.4.3 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/smithy-client': 4.9.7 + '@smithy/types': 4.9.0 + tslib: 2.8.1 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-endpoints@3.2.5': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-hex-encoding@4.2.0': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + tslib: 2.8.1 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-middleware@4.2.5': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/types': 4.9.0 + tslib: 2.8.1 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-retry@4.2.5': dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/service-error-classification': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-stream@4.5.6': dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/node-http-handler': 4.4.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-uri-escape@4.2.0': dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + tslib: 2.8.1 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.9)(react@19.1.0)': + '@smithy/util-utf8@2.3.0': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.9 + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@smithy/util-utf8@4.2.0': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + '@smithy/util-buffer-from': 4.2.0 + tslib: 2.8.1 - '@radix-ui/rect@1.1.1': {} + '@smithy/uuid@1.1.0': + dependencies: + tslib: 2.8.1 '@standard-schema/spec@1.0.0': {} + '@swc/core-darwin-arm64@1.11.24': + optional: true + + '@swc/core-darwin-x64@1.11.24': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.11.24': + optional: true + + '@swc/core-linux-arm64-gnu@1.11.24': + optional: true + + '@swc/core-linux-arm64-musl@1.11.24': + optional: true + + '@swc/core-linux-x64-gnu@1.11.24': + optional: true + + '@swc/core-linux-x64-musl@1.11.24': + optional: true + + '@swc/core-win32-arm64-msvc@1.11.24': + optional: true + + '@swc/core-win32-ia32-msvc@1.11.24': + optional: true + + '@swc/core-win32-x64-msvc@1.11.24': + optional: true + + '@swc/core@1.11.24': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.25 + optionalDependencies: + '@swc/core-darwin-arm64': 1.11.24 + '@swc/core-darwin-x64': 1.11.24 + '@swc/core-linux-arm-gnueabihf': 1.11.24 + '@swc/core-linux-arm64-gnu': 1.11.24 + '@swc/core-linux-arm64-musl': 1.11.24 + '@swc/core-linux-x64-gnu': 1.11.24 + '@swc/core-linux-x64-musl': 1.11.24 + '@swc/core-win32-arm64-msvc': 1.11.24 + '@swc/core-win32-ia32-msvc': 1.11.24 + '@swc/core-win32-x64-msvc': 1.11.24 + + '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 + '@swc/types@0.1.25': + dependencies: + '@swc/counter': 0.1.3 + '@tailwindcss/node@4.1.11': dependencies: '@ampproject/remapping': 2.3.0 @@ -2799,8 +5130,25 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@vercel/functions@3.3.2(@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.933.0))': + dependencies: + '@vercel/oidc': 3.0.4 + optionalDependencies: + '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.933.0) + '@vercel/oidc@2.0.0': {} + '@vercel/oidc@3.0.4': {} + + '@vercel/queue@0.0.0-alpha.23': + dependencies: + mixpart: 0.0.5-alpha.0 + + '@vercel/queue@0.0.0-alpha.28': + dependencies: + '@vercel/oidc': 3.0.4 + mixpart: 0.0.5-alpha.1 + '@vercel/sandbox@0.0.17': dependencies: '@vercel/oidc': 2.0.0 @@ -2886,6 +5234,210 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@workflow/ai@4.0.1-beta.15(ai@5.0.59(zod@3.25.76))(workflow@4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.2))': + dependencies: + '@ai-sdk/provider': 2.0.0 + ai: 5.0.59(zod@3.25.76) + workflow: 4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.2) + zod: 4.1.11 + + '@workflow/builders@4.0.1-beta.11(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)': + dependencies: + '@swc/core': 1.11.24 + '@workflow/core': 4.0.1-beta.13(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.0.1-beta.5 + '@workflow/swc-plugin': 4.0.1-beta.6(@swc/core@1.11.24) + builtin-modules: 5.0.0 + chalk: 5.6.2 + comment-json: 4.2.5 + enhanced-resolve: 5.18.2 + esbuild: 0.25.12 + find-up: 7.0.0 + tinyglobby: 0.2.14 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@swc/helpers' + - supports-color + + '@workflow/cli@4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.2)': + dependencies: + '@oclif/core': 4.0.0(typescript@5.9.2) + '@oclif/plugin-help': 6.2.31(typescript@5.9.2) + '@swc/core': 1.11.24 + '@workflow/builders': 4.0.1-beta.11(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/core': 4.0.1-beta.13(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.0.1-beta.5 + '@workflow/swc-plugin': 4.0.1-beta.6(@swc/core@1.11.24) + '@workflow/web': 4.0.1-beta.11(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@workflow/world': 4.0.1-beta.6(zod@4.1.11) + '@workflow/world-local': 5.0.0-beta.9(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.0.1-beta.9 + boxen: 8.0.1 + builtin-modules: 5.0.0 + chalk: 5.6.2 + chokidar: 4.0.3 + comment-json: 4.2.5 + date-fns: 4.1.0 + easy-table: 1.2.0 + enhanced-resolve: 5.18.2 + esbuild: 0.25.12 + find-up: 7.0.0 + mixpart: 0.0.4 + open: 10.2.0 + ora: 8.2.0 + terminal-link: 5.0.0 + tinyglobby: 0.2.14 + xdg-app-paths: 5.1.0 + zod: 4.1.11 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@babel/core' + - '@opentelemetry/api' + - '@playwright/test' + - '@swc/helpers' + - babel-plugin-macros + - babel-plugin-react-compiler + - react + - react-dom + - sass + - supports-color + - typescript + + '@workflow/core@4.0.1-beta.13(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)': + dependencies: + '@aws-sdk/credential-provider-web-identity': 3.609.0(@aws-sdk/client-sts@3.933.0) + '@jridgewell/trace-mapping': 0.3.31 + '@standard-schema/spec': 1.0.0 + '@types/ms': 2.1.0 + '@vercel/functions': 3.3.2(@aws-sdk/credential-provider-web-identity@3.609.0(@aws-sdk/client-sts@3.933.0)) + '@workflow/errors': 4.0.1-beta.5 + '@workflow/utils': 4.0.1-beta.3 + '@workflow/world': 4.0.1-beta.6(zod@4.1.11) + '@workflow/world-local': 5.0.0-beta.9(@opentelemetry/api@1.9.0) + '@workflow/world-vercel': 4.0.1-beta.9 + debug: 4.4.3 + devalue: 5.5.0 + ms: 2.1.3 + nanoid: 5.1.6 + seedrandom: 3.0.5 + ulid: 3.0.1 + zod: 4.1.11 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - supports-color + + '@workflow/errors@4.0.1-beta.5': + dependencies: + '@workflow/utils': 4.0.1-beta.3 + ms: 2.1.3 + + '@workflow/next@4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': + dependencies: + '@swc/core': 1.11.24 + '@workflow/builders': 4.0.1-beta.11(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/core': 4.0.1-beta.13(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.0.1-beta.6(@swc/core@1.11.24) + semver: 7.7.3 + watchpack: 2.4.4 + optionalDependencies: + next: 15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@swc/helpers' + - supports-color + + '@workflow/nitro@4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)': + dependencies: + '@swc/core': 1.11.24 + '@workflow/builders': 4.0.1-beta.11(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/core': 4.0.1-beta.13(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.0.1-beta.6(@swc/core@1.11.24) + exsolve: 1.0.7 + pathe: 2.0.3 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@swc/helpers' + - supports-color + + '@workflow/nuxt@4.0.1-beta.4(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)': + dependencies: + '@nuxt/kit': 4.2.0 + '@workflow/nitro': 4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@swc/helpers' + - magicast + - supports-color + + '@workflow/sveltekit@4.0.0-beta.9(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)': + dependencies: + '@swc/core': 1.11.24 + '@workflow/builders': 4.0.1-beta.11(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/swc-plugin': 4.0.1-beta.6(@swc/core@1.11.24) + exsolve: 1.0.8 + fs-extra: 11.3.2 + pathe: 2.0.3 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@opentelemetry/api' + - '@swc/helpers' + - supports-color + + '@workflow/swc-plugin@4.0.1-beta.6(@swc/core@1.11.24)': + dependencies: + '@swc/core': 1.11.24 + + '@workflow/typescript-plugin@4.0.1-beta.4(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@workflow/utils@4.0.1-beta.3': + dependencies: + ms: 2.1.3 + pid-port: 2.0.0 + + '@workflow/web@4.0.1-beta.11(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + next: 15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + transitivePeerDependencies: + - '@babel/core' + - '@opentelemetry/api' + - '@playwright/test' + - babel-plugin-macros + - babel-plugin-react-compiler + - react + - react-dom + - sass + + '@workflow/world-local@5.0.0-beta.9(@opentelemetry/api@1.9.0)': + dependencies: + '@vercel/queue': 0.0.0-alpha.23 + '@workflow/utils': 4.0.1-beta.3 + '@workflow/world': 4.0.1-beta.6(zod@4.1.11) + ulid: 3.0.1 + undici: 6.19.0 + zod: 4.1.11 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + + '@workflow/world-vercel@4.0.1-beta.9': + dependencies: + '@vercel/oidc': 3.0.4 + '@vercel/queue': 0.0.0-alpha.28 + '@workflow/errors': 4.0.1-beta.5 + '@workflow/world': 4.0.1-beta.6(zod@4.1.11) + zod: 4.1.11 + + '@workflow/world@4.0.1-beta.6(zod@4.1.11)': + dependencies: + zod: 4.1.11 + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -2931,26 +5483,58 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.2.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + ansi-regex@6.2.0: {} + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + ansis@3.17.0: {} + arctic@3.7.0: dependencies: '@oslojs/crypto': 1.0.1 '@oslojs/encoding': 1.1.0 '@oslojs/jwt': 0.2.0 + argparse@2.0.1: {} + aria-hidden@1.2.6: dependencies: tslib: 2.8.1 + array-timsort@1.0.3: {} + + array-union@2.1.0: {} + async-retry@1.3.3: dependencies: retry: 0.13.1 + async@3.2.6: {} + b4a@1.6.7: {} bail@2.0.2: {} + balanced-match@1.0.2: {} + bare-events@2.6.0: optional: true @@ -2961,6 +5545,27 @@ snapshots: next: 15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 + bowser@2.12.1: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001731 @@ -2970,10 +5575,37 @@ snapshots: buffer-from@1.1.2: {} + builtin-modules@5.0.0: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + c12@3.3.2: + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 17.2.3 + exsolve: 1.0.8 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + + callsites@3.1.0: {} + + camelcase@8.0.0: {} + caniuse-lite@1.0.30001731: {} ccount@2.0.1: {} + chalk@5.6.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@1.1.4: {} @@ -2988,25 +5620,46 @@ snapshots: character-reference-invalid@2.0.1: {} + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + chownr@3.0.0: {} chrome-trace-event@1.0.4: {} + citty@0.1.6: + dependencies: + consola: 3.4.2 + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 + clean-stack@3.0.1: + dependencies: + escape-string-regexp: 4.0.0 + + cli-boxes@3.0.0: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + client-only@0.0.1: {} + clone@1.0.4: + optional: true + clsx@2.1.1: {} color-convert@2.0.1: dependencies: color-name: 1.1.4 - optional: true - color-name@1.1.4: - optional: true + color-name@1.1.4: {} color-string@1.9.1: dependencies: @@ -3026,11 +5679,50 @@ snapshots: commander@2.20.3: {} + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + consola@3.4.2: {} + cookie@1.0.2: {} + core-util-is@1.0.3: {} + + cosmiconfig@9.0.0(typescript@5.9.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.2 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + csstype@3.1.3: {} - debug@4.4.1: + date-fns@4.1.0: {} + + debug@4.4.1(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.4.3: dependencies: ms: 2.1.3 @@ -3038,20 +5730,65 @@ snapshots: dependencies: character-entities: 2.0.2 + default-browser-id@5.0.1: {} + + default-browser@5.4.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + optional: true + + define-lazy-prop@3.0.0: {} + + defu@6.1.4: {} + dequal@2.0.3: {} + destr@2.0.5: {} + detect-libc@2.0.4: {} detect-node-es@1.1.0: {} + devalue@5.5.0: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dotenv@17.2.3: {} + + easy-table@1.2.0: + dependencies: + ansi-regex: 5.0.1 + optionalDependencies: + wcwidth: 1.0.1 + + ejs@3.1.10: + dependencies: + jake: 10.9.4 + electron-to-chromium@1.5.198: {} + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + emojis-list@3.0.0: {} + enhanced-resolve@5.18.2: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.2 + enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 @@ -3059,10 +5796,51 @@ snapshots: entities@6.0.1: {} + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + errx@0.1.0: {} + es-module-lexer@1.7.0: {} + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + escalade@3.2.0: {} + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} eslint-scope@5.1.1: @@ -3070,6 +5848,8 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 + esprima@4.0.1: {} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -3080,34 +5860,136 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + events@3.3.0: {} eventsource-parser@3.0.6: {} + execa@9.6.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + + exsolve@1.0.7: {} + + exsolve@1.0.8: {} + extend@3.0.2: {} fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-uri@3.0.6: {} + fast-xml-parser@5.2.5: + dependencies: + strnum: 2.1.1 + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + fault@1.0.4: dependencies: format: 0.2.2 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + format@0.2.2: {} + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + get-east-asian-width@1.4.0: {} + get-nonce@1.0.1: {} + get-package-type@0.1.0: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.2 + pathe: 2.0.3 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + graceful-fs@4.2.11: {} has-flag@4.0.0: {} + has-flag@5.0.1: {} + + has-own-prop@2.0.0: {} + hast-util-from-parse5@8.0.3: dependencies: '@types/hast': 3.0.4 @@ -3199,6 +6081,19 @@ snapshots: html-void-elements@3.0.0: {} + human-signals@8.0.1: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + indent-string@4.0.0: {} + inline-style-parser@0.2.4: {} is-alphabetical@1.0.4: {} @@ -3215,6 +6110,8 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + is-arrayish@0.2.1: {} + is-arrayish@0.3.2: optional: true @@ -3222,12 +6119,54 @@ snapshots: is-decimal@2.0.1: {} + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + is-hexadecimal@1.0.4: {} is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@2.0.0: {} + + is-number@7.0.0: {} + is-plain-obj@4.1.0: {} + is-stream@4.0.1: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.4 + picocolors: 1.1.1 + jest-worker@27.5.1: dependencies: '@types/node': 20.19.9 @@ -3236,8 +6175,16 @@ snapshots: jiti@2.5.1: {} + jiti@2.6.1: {} + jose@6.0.12: {} + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} @@ -3248,8 +6195,18 @@ snapshots: json5@2.2.3: {} + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonlines@0.1.1: {} + klona@2.0.6: {} + + knitwork@1.3.0: {} + lightningcss-darwin-arm64@1.30.1: optional: true @@ -3295,6 +6252,8 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + lines-and-columns@1.2.4: {} + loader-runner@4.3.0: {} loader-utils@2.0.4: @@ -3303,6 +6262,15 @@ snapshots: emojis-list: 3.0.0 json5: 2.2.3 + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + longest-streak@3.1.0: {} lowlight@1.20.0: @@ -3475,6 +6443,8 @@ snapshots: merge-stream@2.0.0: {} + merge2@1.4.1: {} + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.2.0 @@ -3647,7 +6617,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.1 + debug: 4.4.1(supports-color@8.1.1) decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -3666,12 +6636,27 @@ snapshots: transitivePeerDependencies: - supports-color + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.52.0: {} mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mimic-function@5.0.1: {} + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + minipass@7.1.2: {} minizlib@3.0.2: @@ -3680,12 +6665,27 @@ snapshots: mitt@3.0.1: {} + mixpart@0.0.4: {} + + mixpart@0.0.5-alpha.0: {} + + mixpart@0.0.5-alpha.1: {} + mkdirp@3.0.1: {} + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + ms@2.1.3: {} nanoid@3.3.11: {} + nanoid@5.1.6: {} + neo-async@2.6.2: {} next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): @@ -3717,8 +6717,15 @@ snapshots: - '@babel/core' - babel-plugin-macros + node-fetch-native@1.6.7: {} + node-releases@2.0.19: {} + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + nuqs@2.4.3(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0): dependencies: mitt: 3.0.1 @@ -3726,6 +6733,53 @@ snapshots: optionalDependencies: next: 15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + nypm@0.6.2: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 1.0.2 + + ohash@2.0.11: {} + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.2.0: + dependencies: + default-browser: 5.4.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + ora@8.2.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + os-paths@4.4.0: {} + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.2 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + parse-entities@2.0.0: dependencies: character-entities: 1.2.4 @@ -3745,12 +6799,53 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-ms@4.0.0: {} + parse5@7.3.0: dependencies: entities: 6.0.1 + path-exists@5.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-type@4.0.0: {} + + pathe@2.0.3: {} + + perfect-debounce@2.0.0: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pid-port@2.0.0: + dependencies: + execa: 9.6.0 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + postcss@8.4.31: dependencies: nanoid: 3.3.11 @@ -3763,6 +6858,10 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + prismjs@1.27.0: {} prismjs@1.30.0: {} @@ -3777,15 +6876,22 @@ snapshots: punycode@2.3.1: {} + queue-microtask@1.2.3: {} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - raw-loader@4.0.2(webpack@5.101.0): + raw-loader@4.0.2(webpack@5.101.0(@swc/core@1.11.24)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.101.0 + webpack: 5.101.0(@swc/core@1.11.24) + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 react-dom@19.1.0(react@19.1.0): dependencies: @@ -3859,6 +6965,8 @@ snapshots: react@19.1.0: {} + readdirp@4.1.2: {} + refractor@3.6.0: dependencies: hastscript: 6.0.0 @@ -3905,10 +7013,27 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + repeat-string@1.6.1: {} + require-from-string@2.0.2: {} + resolve-from@4.0.0: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + retry@0.13.1: {} + reusify@1.1.0: {} + + run-applescript@7.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} scheduler@0.26.0: {} @@ -3926,9 +7051,15 @@ snapshots: ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) + scule@1.3.0: {} + + seedrandom@3.0.5: {} + semver@7.7.2: optional: true + semver@7.7.3: {} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -3963,11 +7094,21 @@ snapshots: '@img/sharp-win32-x64': 0.34.3 optional: true + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 optional: true + slash@3.0.0: {} + sonner@2.0.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 @@ -3986,6 +7127,8 @@ snapshots: space-separated-tokens@2.0.2: {} + stdin-discarder@0.2.2: {} + streamx@2.22.1: dependencies: fast-fifo: 1.3.2 @@ -3993,15 +7136,35 @@ snapshots: optionalDependencies: bare-events: 2.6.0 + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.0 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + strip-ansi@7.1.0: dependencies: ansi-regex: 6.2.0 + strip-final-newline@4.0.0: {} + + strnum@2.1.1: {} + style-to-js@1.1.17: dependencies: style-to-object: 1.0.9 @@ -4015,10 +7178,17 @@ snapshots: client-only: 0.0.1 react: 19.1.0 + supports-color@10.2.2: {} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 + supports-hyperlinks@4.3.0: + dependencies: + has-flag: 5.0.1 + supports-color: 10.2.2 + swr@2.3.4(react@19.1.0): dependencies: dequal: 2.0.3 @@ -4046,14 +7216,21 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - terser-webpack-plugin@5.3.14(webpack@5.101.0): + terminal-link@5.0.0: + dependencies: + ansi-escapes: 7.2.0 + supports-hyperlinks: 4.3.0 + + terser-webpack-plugin@5.3.14(@swc/core@1.11.24)(webpack@5.101.0(@swc/core@1.11.24)): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.101.0 + webpack: 5.101.0(@swc/core@1.11.24) + optionalDependencies: + '@swc/core': 1.11.24 terser@5.43.1: dependencies: @@ -4068,6 +7245,22 @@ snapshots: throttleit@2.1.0: {} + tinyexec@1.0.2: {} + + tinyglobby@0.2.14: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + trim-lines@3.0.1: {} trough@2.2.0: {} @@ -4076,10 +7269,31 @@ snapshots: tw-animate-css@1.3.6: {} + type-fest@0.21.3: {} + + type-fest@4.41.0: {} + typescript@5.9.2: {} + ufo@1.6.1: {} + + ulid@3.0.1: {} + + unctx@2.4.1: + dependencies: + acorn: 8.15.0 + estree-walker: 3.0.3 + magic-string: 0.30.17 + unplugin: 2.3.10 + undici-types@6.21.0: {} + undici@6.19.0: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -4113,6 +7327,23 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + universalify@2.0.1: {} + + unplugin@2.3.10: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.15.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + + untyped@2.0.0: + dependencies: + citty: 0.1.6 + defu: 6.1.4 + jiti: 2.6.1 + knitwork: 1.3.0 + scule: 1.3.0 + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: browserslist: 4.25.1 @@ -4166,11 +7397,18 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + optional: true + web-namespaces@2.0.1: {} webpack-sources@3.3.3: {} - webpack@5.101.0: + webpack-virtual-modules@0.6.2: {} + + webpack@5.101.0(@swc/core@1.11.24): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -4194,7 +7432,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.11.24)(webpack@5.101.0(@swc/core@1.11.24)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -4202,14 +7440,86 @@ snapshots: - esbuild - uglify-js + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wordwrap@1.0.0: {} + + workflow@4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.2): + dependencies: + '@workflow/cli': 4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.2) + '@workflow/core': 4.0.1-beta.13(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/errors': 4.0.1-beta.5 + '@workflow/next': 4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0)(next@15.5.4(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + '@workflow/nitro': 4.0.1-beta.15(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/nuxt': 4.0.1-beta.4(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/sveltekit': 4.0.0-beta.9(@aws-sdk/client-sts@3.933.0)(@opentelemetry/api@1.9.0) + '@workflow/typescript-plugin': 4.0.1-beta.4(typescript@5.9.2) + ms: 2.1.3 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@babel/core' + - '@playwright/test' + - '@swc/helpers' + - babel-plugin-macros + - babel-plugin-react-compiler + - magicast + - next + - react + - react-dom + - sass + - supports-color + - typescript + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + + xdg-app-paths@5.1.0: + dependencies: + xdg-portable: 7.3.0 + + xdg-portable@7.3.0: + dependencies: + os-paths: 4.4.0 + xtend@4.0.2: {} yallist@5.0.0: {} + yocto-queue@1.2.2: {} + + yoctocolors@2.1.2: {} + zod@3.24.4: {} zod@3.25.76: {} + zod@4.1.11: {} + zustand@5.0.6(@types/react@19.1.9)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)): optionalDependencies: '@types/react': 19.1.9 From 20bc2f01fadaead9e9239dcb75aff41a4bd4d7e2 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 16:22:32 -0800 Subject: [PATCH 07/13] Vastly simplify --- .../ai/tools/create-sandbox.description.ts | 56 --- .../ai/tools/create-sandbox.ts | 130 +++--- .../ai/tools/generate-files.description.ts | 64 --- .../ai/tools/generate-files.ts | 182 ++++---- .../tools/generate-files/get-write-files.ts | 4 +- .../ai/tools/get-sandbox-url.description.ts | 53 --- .../ai/tools/get-sandbox-url.ts | 82 ++-- apps/vibe-coding-platform/ai/tools/index.ts | 3 +- .../ai/tools/run-command.description.ts | 68 --- .../ai/tools/run-command.ts | 389 +++++++++--------- 10 files changed, 384 insertions(+), 647 deletions(-) delete mode 100644 apps/vibe-coding-platform/ai/tools/create-sandbox.description.ts delete mode 100644 apps/vibe-coding-platform/ai/tools/generate-files.description.ts delete mode 100644 apps/vibe-coding-platform/ai/tools/get-sandbox-url.description.ts delete mode 100644 apps/vibe-coding-platform/ai/tools/run-command.description.ts diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.description.ts b/apps/vibe-coding-platform/ai/tools/create-sandbox.description.ts deleted file mode 100644 index 0e45744897..0000000000 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.description.ts +++ /dev/null @@ -1,56 +0,0 @@ -export default `Use this tool to create a new Vercel Sandbox — an ephemeral, isolated Linux container that serves as your development environment for the current session. This sandbox provides a secure workspace where you can upload files, install dependencies, run commands, start development servers, and preview web apps. Each sandbox is uniquely identified and must be referenced for all subsequent operations (e.g., file generation, command execution, or URL access). - -## When to Use This Tool - -Use this tool **once per session** when: - -1. You begin working on a new user request that requires code execution or file creation -2. No sandbox currently exists for the session -3. The user asks to start a new project, scaffold an application, or test code in a live environment -4. The user requests a fresh or reset environment - -## Sandbox Capabilities - -After creation, the sandbox allows you to: - -- Upload and manage files via \`Generate Files\` -- Execute shell commands with \`Run Command\` and \`Wait Command\` -- Access running servers through public URLs using \`Get Sandbox URL\` - -Each sandbox mimics a real-world development environment and supports rapid iteration and testing without polluting the local system. The base system is Amazon Linux 2023 with the following additional packages: - -\`\`\` -bind-utils bzip2 findutils git gzip iputils libicu libjpeg libpng ncurses-libs openssl openssl-libs pnpm procps tar unzip which whois zstd -\`\`\` - -You can install additional packages using the \`dnf\` package manager. You can NEVER use port 8080 as it is reserved for internal applications. When requested, you need to use a different port. - -## Best Practices - -- Create the sandbox at the beginning of the session or when the user initiates a coding task -- Track and reuse the sandbox ID throughout the session -- Do not create a second sandbox unless explicitly instructed -- If the user requests an environment reset, you may create a new sandbox **after confirming their intent** - -## Examples of When to Use This Tool - - -User: Can we start fresh? I want to rebuild the project from scratch. -Assistant: Got it — I'll create a new sandbox so we can start clean. -*Calls Create Sandbox* - - -## When NOT to Use This Tool - -Skip using this tool when: - -1. A sandbox has already been created for the current session -2. You only need to upload files (use Generate Files) -3. You want to execute or wait for a command (use Run Command / Wait Command) -4. You want to preview the application (use Get Sandbox URL) -5. The user hasn't asked to reset the environment - -## Summary - -Use Create Sandbox to initialize a secure, temporary development environment — but **only once per session**. Treat the sandbox as the core workspace for all follow-up actions unless the user explicitly asks to discard and start anew. -` diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts index 619cf9b017..b808b8e4b3 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts @@ -3,82 +3,74 @@ import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' import { tool } from 'ai' -import description from './create-sandbox.prompt' +import description from './create-sandbox.md' import z from 'zod/v3' import { getWritable } from 'workflow' -const inputSchema = z.object({ - timeout: z - .number() - .min(600000) - .max(2700000) - .optional() - .describe( - 'Maximum time in milliseconds the Vercel Sandbox will remain active before automatically shutting down. Minimum 600000ms (10 minutes), maximum 2700000ms (45 minutes). Defaults to 600000ms (10 minutes). The sandbox will terminate all running processes when this timeout is reached.' - ), - ports: z - .array(z.number()) - .max(2) - .optional() - .describe( - 'Array of network ports to expose and make accessible from outside the Vercel Sandbox. These ports allow web servers, APIs, or other services running inside the Vercel Sandbox to be reached externally. Common ports include 3000 (Next.js), 8000 (Python servers), 5000 (Flask), etc.' - ), -}) - -async function createSandboxStep( - { timeout, ports }: z.infer, - { toolCallId }: { toolCallId: string } -) { - 'use step' - - const writable = getWritable>() - const writer = writable.getWriter() - - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { status: 'loading' }, - }) +export const createSandbox = () => + tool({ + description, + inputSchema: z.object({ + timeout: z + .number() + .min(600000) + .max(2700000) + .optional() + .describe( + 'Maximum time in milliseconds the Vercel Sandbox will remain active before automatically shutting down. Minimum 600000ms (10 minutes), maximum 2700000ms (45 minutes). Defaults to 600000ms (10 minutes). The sandbox will terminate all running processes when this timeout is reached.' + ), + ports: z + .array(z.number()) + .max(2) + .optional() + .describe( + 'Array of network ports to expose and make accessible from outside the Vercel Sandbox. These ports allow web servers, APIs, or other services running inside the Vercel Sandbox to be reached externally. Common ports include 3000 (Next.js), 8000 (Python servers), 5000 (Flask), etc.' + ), + }), + execute: async ({ timeout, ports }, { toolCallId }) => { + 'use step' - try { - const sandbox = await Sandbox.create({ - timeout: timeout ?? 600000, - ports, - }) + const writeable = getWritable>() + const writer = writeable.getWriter() + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { status: 'loading' }, + }) - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { sandboxId: sandbox.sandboxId, status: 'done' }, - }) + try { + const sandbox = await Sandbox.create({ + timeout: timeout ?? 600000, + ports, + }) - return ( - `Sandbox created with ID: ${sandbox.sandboxId}.` + - `\nYou can now upload files, run commands, and access services on the exposed ports.` - ) - } catch (error) { - const richError = getRichError({ - action: 'Creating Sandbox', - error, - }) + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { sandboxId: sandbox.sandboxId, status: 'done' }, + }) - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { - error: { message: richError.error.message }, - status: 'error', - }, - }) + return ( + `Sandbox created with ID: ${sandbox.sandboxId}.` + + `\nYou can now upload files, run commands, and access services on the exposed ports.` + ) + } catch (error) { + const richError = getRichError({ + action: 'Creating Sandbox', + error, + }) - console.log('Error creating Sandbox:', richError.error) - return richError.message - } -} + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { + error: { message: richError.error.message }, + status: 'error', + }, + }) -export const createSandbox = () => - tool({ - description, - inputSchema, - execute: createSandboxStep, + console.log('Error creating Sandbox:', richError.error) + return richError.message + } + }, }) diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.description.ts b/apps/vibe-coding-platform/ai/tools/generate-files.description.ts deleted file mode 100644 index 0dd83f04f3..0000000000 --- a/apps/vibe-coding-platform/ai/tools/generate-files.description.ts +++ /dev/null @@ -1,64 +0,0 @@ -export default `Use this tool to generate and upload code files into an existing Vercel Sandbox. It leverages an LLM to create file contents based on the current conversation context and user intent, then writes them directly into the sandbox file system. - -The generated files should be considered correct on first iteration and suitable for immediate use in the sandbox environment. This tool is essential for scaffolding applications, adding new features, writing configuration files, or fixing missing components. - -All file paths must be relative to the sandbox root (e.g., \`src/index.ts\`, \`package.json\`, \`components/Button.tsx\`). - -## When to Use This Tool - -Use Generate Files when: - -1. You need to create one or more new files as part of a feature, scaffold, or fix -2. The user requests code that implies file creation (e.g., new routes, APIs, components, services) -3. You need to bootstrap a new application structure inside a sandbox -4. You're completing a multi-step task that involves generating or updating source code -5. A prior command failed due to a missing file, and you need to supply it - -## File Generation Guidelines - -- Every file must be complete, valid, and runnable where applicable -- File contents must reflect the user's intent and the overall session context -- File paths must be well-structured and use consistent naming conventions -- Generated files should assume compatibility with other existing files in the sandbox - -## Best Practices - -- Avoid redundant file generation if the file already exists and is unchanged -- Use conventional file/folder structures for the tech stack in use -- If replacing an existing file, ensure the update fully satisfies the user's request - -## Examples of When to Use This Tool - - -User: Add a \`NavBar.tsx\` component and include it in \`App.tsx\` -Assistant: I'll generate the \`NavBar.tsx\` file and update \`App.tsx\` to include it. -*Uses Generate Files to create:* -- \`components/NavBar.tsx\` -- Modified \`App.tsx\` with import and usage of \`NavBar\` - - - -User: Let's scaffold a simple Express server with a \`/ping\` route. -Assistant: I'll generate the necessary files to start the Express app. -*Uses Generate Files to create:* -- \`package.json\` with Express as a dependency -- \`index.js\` with basic server and \`/ping\` route - - -## When NOT to Use This Tool - -Avoid using this tool when: - -1. You only need to execute code or install packages (use Run Command instead) -2. You're waiting for a command to finish (use Wait Command) -3. You want to preview a running server or UI (use Get Sandbox URL) -4. You haven't created a sandbox yet (use Create Sandbox first) - -## Output Behavior - -After generation, the tool will return a list of the files created, including their paths and contents. These can then be inspected, referenced, or used in subsequent commands. - -## Summary - -Use Generate Files to programmatically create or update files in your Vercel Sandbox. It enables fast iteration, contextual coding, and dynamic file management — all driven by user intent and conversation context. -` diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.ts b/apps/vibe-coding-platform/ai/tools/generate-files.ts index eae9bd5f5f..8aa010c189 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.ts +++ b/apps/vibe-coding-platform/ai/tools/generate-files.ts @@ -1,122 +1,112 @@ -import type { UIMessage, UIMessageChunk, UIMessageStreamWriter } from 'ai' +import type { UIMessageChunk } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getContents, type File } from './generate-files/get-contents' import { getRichError } from './get-rich-error' import { getWriteFiles } from './generate-files/get-write-files' import { tool } from 'ai' -import description from './generate-files.prompt' +import description from './generate-files.md' import z from 'zod/v3' import { getWritable } from 'workflow' -const inputSchema = z.object({ - sandboxId: z.string(), - paths: z.array(z.string()), -}) - interface Params { modelId: string } -async function generateFilesStep( - { sandboxId, paths }: z.infer, - { toolCallId, messages }: { toolCallId: string; messages: any }, - modelId: string -) { - 'use step' - - const writable = getWritable>() - const writer = writable.getWriter() as any as UIMessageStreamWriter< - UIMessage - > - - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { paths: [], status: 'generating' }, - }) - - let sandbox: Sandbox | null = null - - try { - sandbox = await Sandbox.get({ sandboxId }) - } catch (error) { - const richError = getRichError({ - action: 'get sandbox by id', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { error: richError.error, paths: [], status: 'error' }, - }) +export const generateFiles = ({ modelId }: Params) => + tool({ + description, + inputSchema: z.object({ + sandboxId: z.string(), + paths: z.array(z.string()), + }), + execute: async ({ sandboxId, paths }, { toolCallId, messages }) => { + 'use step' + + const writable = getWritable>() + const writer = writable.getWriter() + + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { paths: [], status: 'generating' }, + }) + + let sandbox: Sandbox | null = null + + try { + sandbox = await Sandbox.get({ sandboxId }) + } catch (error) { + const richError = getRichError({ + action: 'get sandbox by id', + args: { sandboxId }, + error, + }) - return richError.message - } + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { error: richError.error, paths: [], status: 'error' }, + }) - const writeFiles = getWriteFiles({ sandbox, toolCallId, writer }) - const iterator = getContents({ messages, modelId, paths }) - const uploaded: File[] = [] + return richError.message + } - try { - for await (const chunk of iterator) { - if (chunk.files.length > 0) { - const error = await writeFiles(chunk) - if (error) { - return error - } else { - uploaded.push(...chunk.files) + const writeFiles = getWriteFiles({ sandbox, toolCallId, writer }) + const iterator = getContents({ messages, modelId, paths }) + const uploaded: File[] = [] + + try { + for await (const chunk of iterator) { + if (chunk.files.length > 0) { + const error = await writeFiles(chunk) + if (error) { + return error + } else { + uploaded.push(...chunk.files) + } + } else { + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { + status: 'generating', + paths: chunk.paths, + }, + }) + } } - } else { + } catch (error) { + const richError = getRichError({ + action: 'generate file contents', + args: { modelId, paths }, + error, + }) + writer.write({ id: toolCallId, type: 'data-generating-files', data: { - status: 'generating', - paths: chunk.paths, + error: richError.error, + status: 'error', + paths, }, }) - } - } - } catch (error) { - const richError = getRichError({ - action: 'generate file contents', - args: { modelId, paths }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { - error: richError.error, - status: 'error', - paths, - }, - }) - - return richError.message - } - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { paths: uploaded.map((file) => file.path), status: 'done' }, - }) - - return `Successfully generated and uploaded ${ - uploaded.length - } files. Their paths and contents are as follows: - ${uploaded - .map((file) => `Path: ${file.path}\nContent: ${file.content}\n`) - .join('\n')}` -} + return richError.message + } -export const generateFiles = ({ modelId }: Params) => - tool({ - description, - inputSchema, - execute: (input, context) => generateFilesStep(input, context, modelId), + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { paths: uploaded.map((file) => file.path), status: 'done' }, + }) + + return `Successfully generated and uploaded ${ + uploaded.length + } files. Their paths and contents are as follows: + ${uploaded + .map((file) => `Path: ${file.path}\nContent: ${file.content}\n`) + .join('\n')}` + }, }) diff --git a/apps/vibe-coding-platform/ai/tools/generate-files/get-write-files.ts b/apps/vibe-coding-platform/ai/tools/generate-files/get-write-files.ts index ac447c9450..5fbdbbbb27 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files/get-write-files.ts +++ b/apps/vibe-coding-platform/ai/tools/generate-files/get-write-files.ts @@ -1,13 +1,13 @@ import type { DataPart } from '../../messages/data-parts' import type { File } from './get-contents' import type { Sandbox } from '@vercel/sandbox' -import type { UIMessageStreamWriter, UIMessage } from 'ai' +import type { UIMessageChunk } from 'ai' import { getRichError } from '../get-rich-error' interface Params { sandbox: Sandbox toolCallId: string - writer: UIMessageStreamWriter> + writer: WritableStreamDefaultWriter> } export function getWriteFiles({ sandbox, toolCallId, writer }: Params) { diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.description.ts b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.description.ts deleted file mode 100644 index fb33d3368a..0000000000 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.description.ts +++ /dev/null @@ -1,53 +0,0 @@ -export default `Use this tool to retrieve a publicly accessible URL for a specific port that was exposed during the creation of a Vercel Sandbox. This allows users (and the assistant) to preview web applications, access APIs, or interact with services running inside the sandbox via HTTP. - -⚠️ The requested port must have been explicitly declared when the sandbox was created. If the port was not exposed at sandbox creation time, this tool will NOT work for that port. - -## When to Use This Tool - -Use Get Sandbox URL when: - -1. A service or web server is running on a port that was exposed during sandbox creation -2. You need to share a live preview link with the user -3. You want to access a running server inside the sandbox via HTTP -4. You need to programmatically test or call an internal endpoint running in the sandbox - -## Critical Requirements - -- The port must have been **explicitly exposed** in the \`Create Sandbox\` step - - Example: \`ports: [3000]\` -- The command serving on that port must be actively running - - Use \`Run Command\` followed by \`Wait Command\` (if needed) to start the server - -## Best Practices - -- Only call this tool after the server process has successfully started -- Use typical ports based on framework defaults (e.g., 3000 for Next.js, 5173 for Vite, 8080 for Node APIs) -- If multiple services run on different ports, ensure each port was exposed up front during sandbox creation -- Don't attempt to expose or discover ports dynamically after creation — only predefined ports are valid - -## When NOT to Use This Tool - -Avoid using this tool when: - -1. The port was **not declared** during sandbox creation — it will not be accessible -2. No server is running on the specified port -3. You haven't started the service yet or haven't waited for it to boot up -4. You are referencing a transient script or CLI command (not a persistent server) - -## Example - - -User: Can I preview the app after it's built? -Assistant: -1. Create Sandbox: expose port 3000 -2. Generate Files: scaffold the app -3. Run Command: \`npm run dev\` -4. (Optional) Wait Command -5. Get Sandbox URL: port 3000 -→ Returns: a public URL the user can open in a browser - - -## Summary - -Use Get Sandbox URL to access live previews of services running inside the sandbox — but only for ports that were explicitly exposed during sandbox creation. If the port wasn't declared, it will not be accessible externally. -` diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts index 08f0e7807b..5437c24170 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts @@ -1,53 +1,47 @@ +import type { UIMessageStreamWriter, UIMessage, UIMessageChunk } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' -import { tool, UIMessageChunk } from 'ai' -import description from './get-sandbox-url.prompt' +import { tool } from 'ai' +import description from './get-sandbox-url.md' import z from 'zod/v3' import { getWritable } from 'workflow' -const inputSchema = z.object({ - sandboxId: z - .string() - .describe( - "The unique identifier of the Vercel Sandbox (e.g., 'sbx_abc123xyz'). This ID is returned when creating a Vercel Sandbox and is used to reference the specific sandbox instance." - ), - port: z - .number() - .describe( - 'The port number where a service is running inside the Vercel Sandbox (e.g., 3000 for Next.js dev server, 8000 for Python apps, 5000 for Flask). The port must have been exposed when the sandbox was created or when running commands.' - ), -}) - -async function getSandboxURLStep( - { sandboxId, port }: z.infer, - { toolCallId }: { toolCallId: string } -) { - 'use step' - - const writable = getWritable>() - const writer = writable.getWriter() - - writer.write({ - id: toolCallId, - type: 'data-get-sandbox-url', - data: { status: 'loading' }, - }) - - const sandbox = await Sandbox.get({ sandboxId }) - const url = sandbox.domain(port) - - writer.write({ - id: toolCallId, - type: 'data-get-sandbox-url', - data: { url, status: 'done' }, - }) - - return { url } -} - export const getSandboxURL = () => tool({ description, - inputSchema, - execute: getSandboxURLStep, + inputSchema: z.object({ + sandboxId: z + .string() + .describe( + "The unique identifier of the Vercel Sandbox (e.g., 'sbx_abc123xyz'). This ID is returned when creating a Vercel Sandbox and is used to reference the specific sandbox instance." + ), + port: z + .number() + .describe( + 'The port number where a service is running inside the Vercel Sandbox (e.g., 3000 for Next.js dev server, 8000 for Python apps, 5000 for Flask). The port must have been exposed when the sandbox was created or when running commands.' + ), + }), + execute: async ({ sandboxId, port }, { toolCallId }) => { + 'use step' + + const writeable = getWritable>() + const writer = writeable.getWriter() + + writer.write({ + id: toolCallId, + type: 'data-get-sandbox-url', + data: { status: 'loading' }, + }) + + const sandbox = await Sandbox.get({ sandboxId }) + const url = sandbox.domain(port) + + writer.write({ + id: toolCallId, + type: 'data-get-sandbox-url', + data: { url, status: 'done' }, + }) + + return { url } + }, }) diff --git a/apps/vibe-coding-platform/ai/tools/index.ts b/apps/vibe-coding-platform/ai/tools/index.ts index cda066e48a..0fcb82b924 100644 --- a/apps/vibe-coding-platform/ai/tools/index.ts +++ b/apps/vibe-coding-platform/ai/tools/index.ts @@ -1,9 +1,8 @@ -import type { InferUITools, UIMessage, UIMessageStreamWriter } from 'ai' +import type { InferUITools } from 'ai' import { createSandbox } from './create-sandbox' import { generateFiles } from './generate-files' import { getSandboxURL } from './get-sandbox-url' import { runCommand } from './run-command' -import type { DataPart } from '../messages/data-parts' interface Params { modelId: string diff --git a/apps/vibe-coding-platform/ai/tools/run-command.description.ts b/apps/vibe-coding-platform/ai/tools/run-command.description.ts deleted file mode 100644 index cfc071b3b5..0000000000 --- a/apps/vibe-coding-platform/ai/tools/run-command.description.ts +++ /dev/null @@ -1,68 +0,0 @@ -export default `Use this tool to run a command inside an existing Vercel Sandbox. You can choose whether the command should block until completion or run in the background by setting the \`wait\` parameter: - -- \`wait: true\` → Command runs and **must complete** before the response is returned. -- \`wait: false\` → Command starts in the background, and the response returns immediately with its \`commandId\`. - -⚠️ Commands are stateless — each one runs in a fresh shell session with **no memory** of previous commands. You CANNOT rely on \`cd\`, but other state like shell exports or background processes from prior commands should be available. - -## When to Use This Tool - -Use Run Command when: - -1. You need to install dependencies (e.g., \`pnpm install\`) -2. You want to run a build or test process (e.g., \`pnpm build\`, \`vite build\`) -3. You need to launch a development server or long-running process -4. You need to compile or execute code within the sandbox -5. You want to run a task in the background without blocking the session - -## Sequencing Rules - -- If two commands depend on each other, **set \`wait: true\` on the first** to ensure it finishes before starting the second - - ✅ Good: Run \`pnpm install\` with \`wait: true\` → then run \`pnpm dev\` - - ❌ Bad: Run both with \`wait: false\` and expect them to be sequential -- Do **not** issue multiple sequential commands in one call - - ❌ \`cd src && node index.js\` - - ✅ \`node src/index.js\` -- Do **not** assume directory state is preserved — use full relative paths - -## Command Format - -- Separate the base command from its arguments - - ✅ \`{ command: "pnpm", args: ["install", "--verbose"], wait: true }\` - - ❌ \`{ command: "pnpm install --verbose" }\` -- Avoid shell syntax like pipes, redirections, or \`&&\`. If unavoidable, ensure it works in a stateless, single-session execution - -## When to Set \`wait\` to True - -- The next step depends on the result of the command -- The command must finish before accessing its output -- Example: Installing dependencies before building, compiling before running tests - -## When to Set \`wait\` to False - -- The command is intended to stay running indefinitely (e.g., a dev server) -- The command has no impact on subsequent operations (e.g., printing logs) - -## Other Rules - -- When running \`pnpm dev\` in a Next.js or Vite project, HMR can handle updates so generally you don't need to kill the server process and start it again after changing files. - -## Examples - - -User: Install dependencies and then run the dev server -Assistant: -1. Run Command: \`{ command: "pnpm", args: ["install"], wait: true }\` -2. Run Command: \`{ command: "pnpm", args: ["run", "dev"], wait: false }\` - - - -User: Build the app with Vite -Assistant: -Run Command: \`{ command: "vite", args: ["build"], wait: true }\` - - -## Summary - -Use Run Command to start shell commands in the sandbox, controlling execution flow with the \`wait\` flag. Commands are stateless and isolated — use relative paths, and only run long-lived processes with \`wait: false\`. -` diff --git a/apps/vibe-coding-platform/ai/tools/run-command.ts b/apps/vibe-coding-platform/ai/tools/run-command.ts index e6c88edf6f..e5c6584039 100644 --- a/apps/vibe-coding-platform/ai/tools/run-command.ts +++ b/apps/vibe-coding-platform/ai/tools/run-command.ts @@ -1,203 +1,206 @@ +import type { UIMessageChunk } from 'ai' import type { DataPart } from '../messages/data-parts' import { Command, Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' -import { tool, UIMessageChunk } from 'ai' -import description from './run-command.prompt' +import { tool } from 'ai' +import description from './run-command.md' import z from 'zod/v3' import { getWritable } from 'workflow' -const inputSchema = z.object({ - sandboxId: z - .string() - .describe('The ID of the Vercel Sandbox to run the command in'), - command: z - .string() - .describe( - "The base command to run (e.g., 'npm', 'node', 'python', 'ls', 'cat'). Do NOT include arguments here. IMPORTANT: Each command runs independently in a fresh shell session - there is no persistent state between commands. You cannot use 'cd' to change directories for subsequent commands." - ), - args: z - .array(z.string()) - .optional() - .describe( - "Array of arguments for the command. Each argument should be a separate string (e.g., ['install', '--verbose'] for npm install --verbose, or ['src/index.js'] to run a file, or ['-la', './src'] to list files). IMPORTANT: Use relative paths (e.g., 'src/file.js') or absolute paths instead of trying to change directories with 'cd' first, since each command runs in a fresh shell session." - ), - sudo: z.boolean().optional().describe('Whether to run the command with sudo'), - wait: z - .boolean() - .describe( - 'Whether to wait for the command to finish before returning. If true, the command will block until it completes, and you will receive its output.' - ), -}) - -async function runCommandStep( - { sandboxId, command, sudo, wait, args = [] }: z.infer, - { toolCallId }: { toolCallId: string } -) { - 'use step' - - const writable = getWritable>() - const writer = writable.getWriter() - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { sandboxId, command, args, status: 'executing' }, - }) - - let sandbox: Sandbox | null = null - - try { - sandbox = await Sandbox.get({ sandboxId }) - } catch (error) { - const richError = getRichError({ - action: 'get sandbox by id', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - - let cmd: Command | null = null - - try { - cmd = await sandbox.runCommand({ - detached: true, - cmd: command, - args, - sudo, - }) - } catch (error) { - const richError = getRichError({ - action: 'run command in sandbox', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'executing', - }, - }) - - if (!wait) { - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'running', - }, - }) - - return `The command \`${command} ${args.join( - ' ' - )}\` has been started in the background in the sandbox with ID \`${sandboxId}\` with the commandId ${ - cmd.cmdId - }.` - } - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'waiting', - }, - }) - - const done = await cmd.wait() - try { - const [stdout, stderr] = await Promise.all([done.stdout(), done.stderr()]) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - exitCode: done.exitCode, - status: 'done', - }, - }) - - return ( - `The command \`${command} ${args.join( - ' ' - )}\` has finished with exit code ${done.exitCode}.` + - `Stdout of the command was: \n` + - `\`\`\`\n${stdout}\n\`\`\`\n` + - `Stderr of the command was: \n` + - `\`\`\`\n${stderr}\n\`\`\`` - ) - } catch (error) { - const richError = getRichError({ - action: 'wait for command to finish', - args: { sandboxId, commandId: cmd.cmdId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } -} - export const runCommand = () => tool({ description, - inputSchema, - execute: runCommandStep, + inputSchema: z.object({ + sandboxId: z + .string() + .describe('The ID of the Vercel Sandbox to run the command in'), + command: z + .string() + .describe( + "The base command to run (e.g., 'npm', 'node', 'python', 'ls', 'cat'). Do NOT include arguments here. IMPORTANT: Each command runs independently in a fresh shell session - there is no persistent state between commands. You cannot use 'cd' to change directories for subsequent commands." + ), + args: z + .array(z.string()) + .optional() + .describe( + "Array of arguments for the command. Each argument should be a separate string (e.g., ['install', '--verbose'] for npm install --verbose, or ['src/index.js'] to run a file, or ['-la', './src'] to list files). IMPORTANT: Use relative paths (e.g., 'src/file.js') or absolute paths instead of trying to change directories with 'cd' first, since each command runs in a fresh shell session." + ), + sudo: z + .boolean() + .optional() + .describe('Whether to run the command with sudo'), + wait: z + .boolean() + .describe( + 'Whether to wait for the command to finish before returning. If true, the command will block until it completes, and you will receive its output.' + ), + }), + execute: async ( + { sandboxId, command, sudo, wait, args = [] }, + { toolCallId } + ) => { + 'use step' + + const writable = getWritable>() + const writer = writable.getWriter() + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { sandboxId, command, args, status: 'executing' }, + }) + + let sandbox: Sandbox | null = null + + try { + sandbox = await Sandbox.get({ sandboxId }) + } catch (error) { + const richError = getRichError({ + action: 'get sandbox by id', + args: { sandboxId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } + + let cmd: Command | null = null + + try { + cmd = await sandbox.runCommand({ + detached: true, + cmd: command, + args, + sudo, + }) + } catch (error) { + const richError = getRichError({ + action: 'run command in sandbox', + args: { sandboxId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'executing', + }, + }) + + if (!wait) { + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'running', + }, + }) + + return `The command \`${command} ${args.join( + ' ' + )}\` has been started in the background in the sandbox with ID \`${sandboxId}\` with the commandId ${ + cmd.cmdId + }.` + } + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'waiting', + }, + }) + + const done = await cmd.wait() + try { + const [stdout, stderr] = await Promise.all([ + done.stdout(), + done.stderr(), + ]) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + exitCode: done.exitCode, + status: 'done', + }, + }) + + return ( + `The command \`${command} ${args.join( + ' ' + )}\` has finished with exit code ${done.exitCode}.` + + `Stdout of the command was: \n` + + `\`\`\`\n${stdout}\n\`\`\`\n` + + `Stderr of the command was: \n` + + `\`\`\`\n${stderr}\n\`\`\`` + ) + } catch (error) { + const richError = getRichError({ + action: 'wait for command to finish', + args: { sandboxId, commandId: cmd.cmdId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } + }, }) From 0563a1f69c17f46e766f852e3dd28fcb50cd81c6 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 16:36:17 -0800 Subject: [PATCH 08/13] Clean up --- .../app/api/chat/agent.ts | 64 ----------- .../app/api/chat/route.ts | 102 +++++++++++------- 2 files changed, 66 insertions(+), 100 deletions(-) delete mode 100644 apps/vibe-coding-platform/app/api/chat/agent.ts diff --git a/apps/vibe-coding-platform/app/api/chat/agent.ts b/apps/vibe-coding-platform/app/api/chat/agent.ts deleted file mode 100644 index 341306f33f..0000000000 --- a/apps/vibe-coding-platform/app/api/chat/agent.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { convertToModelMessages, type UIMessageChunk } from 'ai' -import { type ChatUIMessage } from '@/components/chat/types' -import { getModelOptions } from '@/ai/gateway' -import { tools } from '@/ai/tools' -import { DurableAgent } from '@workflow/ai/agent' -import { getWritable } from 'workflow' - -export async function codingWorkflow({ - prompt, - modelId, - messages, - reasoningEffort, -}: { - prompt: string - modelId: string - messages: ChatUIMessage[] - reasoningEffort?: 'minimal' | 'low' | 'medium' -}) { - 'use workflow' - - const writable = getWritable() - - const agent = new DurableAgent({ - // TODO: wire up all these options, not just the modelId - // ...getModelOptions(modelId, { reasoningEffort }), - - model: getModelOptions(modelId, { reasoningEffort }).model.modelId, - system: prompt, - tools: tools({ modelId }), - }) - - await agent.stream({ - messages: convertToModelMessages( - messages.map((message) => { - message.parts = message.parts.map((part) => { - if (part.type === 'data-report-errors') { - return { - type: 'text', - text: - `There are errors in the generated code. This is the summary of the errors we have:\n` + - `\`\`\`${part.data.summary}\`\`\`\n` + - (part.data.paths?.length - ? `The following files may contain errors:\n` + - `\`\`\`${part.data.paths?.join('\n')}\`\`\`\n` - : '') + - `Fix the errors reported.`, - } - } - return part - }) - return message - }) - ), - writable, - // TODO: wire up stopWhen in DurableAgent - // stopWhen: stepCountIs(20), - - // TODO: wire up onError in DurableAgent - // onError: (error) => { - // console.error('Error communicating with AI') - // console.error(JSON.stringify(error, null, 2)) - // }, - }) -} diff --git a/apps/vibe-coding-platform/app/api/chat/route.ts b/apps/vibe-coding-platform/app/api/chat/route.ts index 2d07f731d8..4692fd0d57 100644 --- a/apps/vibe-coding-platform/app/api/chat/route.ts +++ b/apps/vibe-coding-platform/app/api/chat/route.ts @@ -1,12 +1,20 @@ -import { type ChatUIMessage } from '@/components/chat/types' -import { createUIMessageStreamResponse } from 'ai' import { DEFAULT_MODEL } from '@/ai/constants' -import { NextResponse } from 'next/server' import { getAvailableModels, getModelOptions } from '@/ai/gateway' +import { tools } from '@/ai/tools' +import type { ChatUIMessage } from '@/components/chat/types' +import { DurableAgent } from '@workflow/ai/agent' +import { + convertToModelMessages, + createUIMessageStreamResponse, + stepCountIs, + type UIMessageChunk, +} from 'ai' import { checkBotId } from 'botid/server' -import prompt from './prompt.md' +import { NextResponse } from 'next/server' +import { getWritable } from 'workflow' import { start } from 'workflow/api' -import { codingWorkflow } from './agent' +import prompt from './prompt.md' +import { LanguageModelV2 } from '@ai-sdk/provider' interface BodyData { messages: ChatUIMessage[] @@ -22,7 +30,6 @@ export async function POST(req: Request) { const [models, { messages, modelId = DEFAULT_MODEL, reasoningEffort }] = await Promise.all([getAvailableModels(), req.json() as Promise]) - const model = models.find((model) => model.id === modelId) if (!model) { return NextResponse.json( @@ -33,7 +40,7 @@ export async function POST(req: Request) { const run = await start(codingWorkflow, [ { - modelId, + modelId: model.id, reasoningEffort, prompt, messages, @@ -49,35 +56,6 @@ export async function POST(req: Request) { // originalMessages: messages, // execute: ({ writer }) => { // const result = streamText({ - // ...getModelOptions(modelId, { reasoningEffort }), - // system: prompt, - // messages: convertToModelMessages( - // messages.map((message) => { - // message.parts = message.parts.map((part) => { - // if (part.type === 'data-report-errors') { - // return { - // type: 'text', - // text: - // `There are errors in the generated code. This is the summary of the errors we have:\n` + - // `\`\`\`${part.data.summary}\`\`\`\n` + - // (part.data.paths?.length - // ? `The following files may contain errors:\n` + - // `\`\`\`${part.data.paths?.join('\n')}\`\`\`\n` - // : '') + - // `Fix the errors reported.`, - // } - // } - // return part - // }) - // return message - // }), - // ), - // stopWhen: stepCountIs(20), - // tools: tools({ modelId, writer }), - // onError: (error) => { - // console.error('Error communicating with AI') - // console.error(JSON.stringify(error, null, 2)) - // }, // }) // result.consumeStream() // writer.merge( @@ -93,3 +71,55 @@ export async function POST(req: Request) { // }), // }) } + +export async function codingWorkflow({ + prompt, + modelId, + messages, + reasoningEffort, +}: { + prompt: string + modelId: string + messages: ChatUIMessage[] + reasoningEffort?: 'minimal' | 'low' | 'medium' +}) { + 'use workflow' + + const writable = getWritable() + + const agent = new DurableAgent({ + model: async () => { + 'use step' + + return getModelOptions(modelId, { reasoningEffort }).model + }, + system: prompt, + tools: tools({ modelId }), + }) + + await agent.stream({ + messages: convertToModelMessages( + messages.map((message) => { + message.parts = message.parts.map((part) => { + if (part.type === 'data-report-errors') { + return { + type: 'text', + text: + `There are errors in the generated code. This is the summary of the errors we have:\n` + + `\`\`\`${part.data.summary}\`\`\`\n` + + (part.data.paths?.length + ? `The following files may contain errors:\n` + + `\`\`\`${part.data.paths?.join('\n')}\`\`\`\n` + : '') + + `Fix the errors reported.`, + } + } + return part + }) + return message + }) + ), + writable, + stopWhen: stepCountIs(20), + }) +} From 0dc9f84ed4de92f280b7cff0a93ef7cacc44d834 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 16:41:46 -0800 Subject: [PATCH 09/13] Clean up --- .../app/api/chat/route.ts | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/apps/vibe-coding-platform/app/api/chat/route.ts b/apps/vibe-coding-platform/app/api/chat/route.ts index 4692fd0d57..9cabd51d56 100644 --- a/apps/vibe-coding-platform/app/api/chat/route.ts +++ b/apps/vibe-coding-platform/app/api/chat/route.ts @@ -14,7 +14,6 @@ import { NextResponse } from 'next/server' import { getWritable } from 'workflow' import { start } from 'workflow/api' import prompt from './prompt.md' -import { LanguageModelV2 } from '@ai-sdk/provider' interface BodyData { messages: ChatUIMessage[] @@ -49,27 +48,24 @@ export async function POST(req: Request) { return createUIMessageStreamResponse({ stream: run.readable, + // stream: createUIMessageStream({ + // originalMessages: messages, + // execute: ({ writer }) => { + // const result = streamText({ + // }) + // result.consumeStream() + // writer.merge( + // result.toUIMessageStream({ + // sendReasoning: true, + // sendStart: false, + // messageMetadata: () => ({ + // model: model.name, + // }), + // }), + // ) + // }, + // }), }) - - // return createUIMessageStreamResponse({ - // stream: createUIMessageStream({ - // originalMessages: messages, - // execute: ({ writer }) => { - // const result = streamText({ - // }) - // result.consumeStream() - // writer.merge( - // result.toUIMessageStream({ - // sendReasoning: true, - // sendStart: false, - // messageMetadata: () => ({ - // model: model.name, - // }), - // }), - // ) - // }, - // }), - // }) } export async function codingWorkflow({ From 7dc57c349066009afcf9a0fad9a854bdf2c9a5c9 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 16:43:04 -0800 Subject: [PATCH 10/13] Fix --- apps/vibe-coding-platform/ai/tools/create-sandbox.ts | 2 +- apps/vibe-coding-platform/ai/tools/generate-files.ts | 2 +- apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts | 4 ++-- apps/vibe-coding-platform/ai/tools/run-command.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts index b808b8e4b3..ff728aa3f8 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts @@ -3,7 +3,7 @@ import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' import { tool } from 'ai' -import description from './create-sandbox.md' +import description from './create-sandbox.prompt' import z from 'zod/v3' import { getWritable } from 'workflow' diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.ts b/apps/vibe-coding-platform/ai/tools/generate-files.ts index 8aa010c189..d2e6e524b5 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.ts +++ b/apps/vibe-coding-platform/ai/tools/generate-files.ts @@ -5,7 +5,7 @@ import { getContents, type File } from './generate-files/get-contents' import { getRichError } from './get-rich-error' import { getWriteFiles } from './generate-files/get-write-files' import { tool } from 'ai' -import description from './generate-files.md' +import description from './generate-files.prompt' import z from 'zod/v3' import { getWritable } from 'workflow' diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts index 5437c24170..391b9cc0ab 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts @@ -1,8 +1,8 @@ -import type { UIMessageStreamWriter, UIMessage, UIMessageChunk } from 'ai' +import type { UIMessageChunk } from 'ai' import type { DataPart } from '../messages/data-parts' import { Sandbox } from '@vercel/sandbox' import { tool } from 'ai' -import description from './get-sandbox-url.md' +import description from './get-sandbox-url.prompt' import z from 'zod/v3' import { getWritable } from 'workflow' diff --git a/apps/vibe-coding-platform/ai/tools/run-command.ts b/apps/vibe-coding-platform/ai/tools/run-command.ts index e5c6584039..8c20803670 100644 --- a/apps/vibe-coding-platform/ai/tools/run-command.ts +++ b/apps/vibe-coding-platform/ai/tools/run-command.ts @@ -3,7 +3,7 @@ import type { DataPart } from '../messages/data-parts' import { Command, Sandbox } from '@vercel/sandbox' import { getRichError } from './get-rich-error' import { tool } from 'ai' -import description from './run-command.md' +import description from './run-command.prompt' import z from 'zod/v3' import { getWritable } from 'workflow' From 83b1c857a7eb78d0d6fd7affeaef785f632ee99a Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 16:55:12 -0800 Subject: [PATCH 11/13] Comment out tools --- apps/vibe-coding-platform/ai/tools/index.ts | 16 ++++++++-------- .../app/api/chat/{prompt.md => chat.prompt.ts} | 15 ++++++++------- apps/vibe-coding-platform/app/api/chat/route.ts | 4 ++-- 3 files changed, 18 insertions(+), 17 deletions(-) rename apps/vibe-coding-platform/app/api/chat/{prompt.md => chat.prompt.ts} (89%) diff --git a/apps/vibe-coding-platform/ai/tools/index.ts b/apps/vibe-coding-platform/ai/tools/index.ts index 0fcb82b924..b44c59bbab 100644 --- a/apps/vibe-coding-platform/ai/tools/index.ts +++ b/apps/vibe-coding-platform/ai/tools/index.ts @@ -1,8 +1,8 @@ import type { InferUITools } from 'ai' -import { createSandbox } from './create-sandbox' -import { generateFiles } from './generate-files' -import { getSandboxURL } from './get-sandbox-url' -import { runCommand } from './run-command' +// import { createSandbox } from './create-sandbox' +// import { generateFiles } from './generate-files' +// import { getSandboxURL } from './get-sandbox-url' +// import { runCommand } from './run-command' interface Params { modelId: string @@ -10,10 +10,10 @@ interface Params { export function tools({ modelId }: Params) { return { - createSandbox: createSandbox(), - generateFiles: generateFiles({ modelId }), - getSandboxURL: getSandboxURL(), - runCommand: runCommand(), + // createSandbox: createSandbox(), + // generateFiles: generateFiles({ modelId }), + // getSandboxURL: getSandboxURL(), + // runCommand: runCommand(), } } diff --git a/apps/vibe-coding-platform/app/api/chat/prompt.md b/apps/vibe-coding-platform/app/api/chat/chat.prompt.ts similarity index 89% rename from apps/vibe-coding-platform/app/api/chat/prompt.md rename to apps/vibe-coding-platform/app/api/chat/chat.prompt.ts index 02f20b7bfc..beee142905 100644 --- a/apps/vibe-coding-platform/app/api/chat/prompt.md +++ b/apps/vibe-coding-platform/app/api/chat/chat.prompt.ts @@ -1,4 +1,4 @@ -You are the Vibe Coding Agent, a coding assistant integrated with the Vercel Sandbox platform. Your primary objective is to help users build and run full applications within a secure, ephemeral sandbox environment by orchestrating a suite of tools. These tools allow you to create sandboxes, generate and manage files, execute commands, and provide live previews. +export default `You are the Vibe Coding Agent, a coding assistant integrated with the Vercel Sandbox platform. Your primary objective is to help users build and run full applications within a secure, ephemeral sandbox environment by orchestrating a suite of tools. These tools allow you to create sandboxes, generate and manage files, execute commands, and provide live previews. All actions occur inside a single Vercel Sandbox, for which you are solely responsible. This includes initialization, environment setup, code creation, workflow execution, and preview management. @@ -51,14 +51,14 @@ You are equipped with the following tools: 3. **Run Command** - - Executes commands asynchronously in a stateless shell within the sandbox. Each execution provides a `commandId` for tracking purposes. - - Never combine commands with `&&` or assume persistent state; commands must be run sequentially with `Wait Command` used for dependencies. - - Use `pnpm` for package management whenever possible; avoid `npm`. + - Executes commands asynchronously in a stateless shell within the sandbox. Each execution provides a \`commandId\` for tracking purposes. + - Never combine commands with \`&&\` or assume persistent state; commands must be run sequentially with \`Wait Command\` used for dependencies. + - Use \`pnpm\` for package management whenever possible; avoid \`npm\`. 4. **Wait Command** - Blocks the workflow until a specified command has completed. - - Always confirm that commands finish successfully (exit code `0`) before starting dependent steps. + - Always confirm that commands finish successfully (exit code \`0\`) before starting dependent steps. 5. **Get Sandbox URL** - Returns a public URL for accessing an exposed port, but only if it was specified during sandbox creation. @@ -69,7 +69,7 @@ You are equipped with the following tools: - 🟠 **Single Sandbox Reuse:** Use only one sandbox per session unless explicitly reset by the user. - 🗂️ **Accurate File Generation:** Generate complete, valid files that follow technology-specific standards; avoid placeholders unless requested. NEVER generate lock files (pnpm-lock.yaml, package-lock.json, yarn.lock) - they are created automatically by package managers. - 🔗 **Command Sequencing:** Always await command completion when dependent actions are needed. -- 📁 **Use Only Relative Paths:** Changing directories (`cd`) is not permitted. Reference files and execute commands using paths relative to the sandbox root. +- 📁 **Use Only Relative Paths:** Changing directories (\`cd\`) is not permitted. Reference files and execute commands using paths relative to the sandbox root. - 🌐 **Correct Port Exposure:** Expose the required ports at sandbox creation to support live previews as needed. - 🧠 **Session State Tracking:** Independently track the current command progress, file structure, and overall sandbox status; tool operations are stateless, but your process logic must persist state. @@ -94,7 +94,7 @@ IMPORTANT - PERSISTENCE RULE: TYPESCRIPT BUILD ERRORS PREVENTION: Always generate TypeScript code that builds successfully: -- For Next.js router.push with query strings, use proper type casting: router.push(`${pathname}?${queryString}` as any) +- For Next.js router.push with query strings, use proper type casting: router.push(\`\${pathname}?\${queryString}\` as any) - Ensure all imports have correct types and exist - Use proper TypeScript syntax for React components and hooks - Test type compatibility for router operations, especially with dynamic routes and query parameters @@ -134,3 +134,4 @@ MINIMIZE REASONING: Avoid verbose reasoning blocks throughout the entire session When concluding, generate a brief, focused summary (2-3 lines) that recaps the session's key results, omitting the initial plan or checklist. Transform user prompts into deployable applications by proactively managing the sandbox lifecycle. Organize actions, utilize the right tools in the correct sequence, and ensure all results are functional and runnable within the isolated environment. +` diff --git a/apps/vibe-coding-platform/app/api/chat/route.ts b/apps/vibe-coding-platform/app/api/chat/route.ts index 9cabd51d56..b0c03cf987 100644 --- a/apps/vibe-coding-platform/app/api/chat/route.ts +++ b/apps/vibe-coding-platform/app/api/chat/route.ts @@ -13,7 +13,7 @@ import { checkBotId } from 'botid/server' import { NextResponse } from 'next/server' import { getWritable } from 'workflow' import { start } from 'workflow/api' -import prompt from './prompt.md' +import prompt from './chat.prompt' interface BodyData { messages: ChatUIMessage[] @@ -68,7 +68,7 @@ export async function POST(req: Request) { }) } -export async function codingWorkflow({ +async function codingWorkflow({ prompt, modelId, messages, From 5221f7dd065974e07cf41060451971e5a7127e20 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 16:55:41 -0800 Subject: [PATCH 12/13] WIP --- .../cms-sanity-graphql-fragments/README.md | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/starter/cms-sanity-graphql-fragments/README.md b/starter/cms-sanity-graphql-fragments/README.md index c4d05f151d..b81601df4d 100644 --- a/starter/cms-sanity-graphql-fragments/README.md +++ b/starter/cms-sanity-graphql-fragments/README.md @@ -9,7 +9,6 @@ deployUrl: https://vercel.com/new/git/external?repository-url=https://github.com demoUrl: https://cms-graphql-fragments.vercel.app/ ignoreE2E: true --- - # CMS GraphQL Fragments example This example shows a Next.js blog powered by Sanity CMS and GraphQL with Incremental Static Regeneration (ISR), featuring GraphQL fragment colocation and type-safe queries. @@ -23,7 +22,6 @@ https://cms-graphql-fragments.vercel.app/ You can choose from one of the following two methods to use this repository: ### One-Click Deploy - Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https://github.com/vercel/examples/tree/main/starter/starter/cms-sanity-graphql-fragments&project-name=cms-sanity-graphql-fragments&repository-name=cms-sanity-graphql-fragments) @@ -44,6 +42,7 @@ pnpm dev Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=edge-middleware-eap) ([Documentation](https://nextjs.org/docs/deployment)). + ## Features - **Server-side GraphQL queries** - No client-side GraphQL bundle using URQL @@ -100,7 +99,6 @@ npm run schema:generate 2. Create content using the available schemas: **Posts** (for blog content): - - Title (required) - Slug (required) - Excerpt (optional) @@ -108,7 +106,6 @@ npm run schema:generate - Published At (required) **Pages** (for static pages like About): - - Title (required) - Slug (required) - Excerpt (optional) @@ -117,12 +114,10 @@ npm run schema:generate - Published status (required) **Navigation Settings** (site navigation): - - Site Title (required) - Navigation Items (required) **Footer Settings** (site footer): - - Footer Title (required) - Description (optional) - Footer Links (optional) @@ -149,7 +144,6 @@ npm run dev This project uses a fragment colocation pattern to keep GraphQL fragments close to the components that use them: **For Server Components:** - ```typescript // In your server component file const MyComponentFragment = graphql(` @@ -157,11 +151,10 @@ const MyComponentFragment = graphql(` title slug } -`) +`); ``` **For Client Components:** - ```typescript // my-component-fragment.ts export const myComponentFragment = graphql(` @@ -169,15 +162,15 @@ export const myComponentFragment = graphql(` title slug } -`) +`); // my-component.tsx -;('use client') -import { type FragmentOf } from '@/lib/graphql' -import type { myComponentFragment } from './my-component-fragment' +"use client"; +import { type FragmentOf } from "@/lib/graphql"; +import type { myComponentFragment } from "./my-component-fragment"; interface Props { - data: FragmentOf + data: FragmentOf; } ``` From f2131fac646dd47b309810e9a14d68380cab4263 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Mon, 17 Nov 2025 17:05:41 -0800 Subject: [PATCH 13/13] Re-extract tools --- .../ai/tools/create-sandbox.ts | 127 +++--- .../ai/tools/generate-files.ts | 176 ++++---- .../ai/tools/get-sandbox-url.ts | 77 ++-- apps/vibe-coding-platform/ai/tools/index.ts | 16 +- .../ai/tools/run-command.ts | 384 +++++++++--------- 5 files changed, 400 insertions(+), 380 deletions(-) diff --git a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts index ff728aa3f8..ea4897e93e 100644 --- a/apps/vibe-coding-platform/ai/tools/create-sandbox.ts +++ b/apps/vibe-coding-platform/ai/tools/create-sandbox.ts @@ -7,70 +7,77 @@ import description from './create-sandbox.prompt' import z from 'zod/v3' import { getWritable } from 'workflow' -export const createSandbox = () => - tool({ - description, - inputSchema: z.object({ - timeout: z - .number() - .min(600000) - .max(2700000) - .optional() - .describe( - 'Maximum time in milliseconds the Vercel Sandbox will remain active before automatically shutting down. Minimum 600000ms (10 minutes), maximum 2700000ms (45 minutes). Defaults to 600000ms (10 minutes). The sandbox will terminate all running processes when this timeout is reached.' - ), - ports: z - .array(z.number()) - .max(2) - .optional() - .describe( - 'Array of network ports to expose and make accessible from outside the Vercel Sandbox. These ports allow web servers, APIs, or other services running inside the Vercel Sandbox to be reached externally. Common ports include 3000 (Next.js), 8000 (Python servers), 5000 (Flask), etc.' - ), - }), - execute: async ({ timeout, ports }, { toolCallId }) => { - 'use step' +const inputSchema = z.object({ + timeout: z + .number() + .min(600000) + .max(2700000) + .optional() + .describe( + 'Maximum time in milliseconds the Vercel Sandbox will remain active before automatically shutting down. Minimum 600000ms (10 minutes), maximum 2700000ms (45 minutes). Defaults to 600000ms (10 minutes). The sandbox will terminate all running processes when this timeout is reached.' + ), + ports: z + .array(z.number()) + .max(2) + .optional() + .describe( + 'Array of network ports to expose and make accessible from outside the Vercel Sandbox. These ports allow web servers, APIs, or other services running inside the Vercel Sandbox to be reached externally. Common ports include 3000 (Next.js), 8000 (Python servers), 5000 (Flask), etc.' + ), +}) - const writeable = getWritable>() - const writer = writeable.getWriter() - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { status: 'loading' }, - }) +async function executeCreateSandbox( + { timeout, ports }: z.infer, + { toolCallId }: { toolCallId: string } +) { + 'use step' + + const writeable = getWritable>() + const writer = writeable.getWriter() + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { status: 'loading' }, + }) - try { - const sandbox = await Sandbox.create({ - timeout: timeout ?? 600000, - ports, - }) + try { + const sandbox = await Sandbox.create({ + timeout: timeout ?? 600000, + ports, + }) - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { sandboxId: sandbox.sandboxId, status: 'done' }, - }) + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { sandboxId: sandbox.sandboxId, status: 'done' }, + }) - return ( - `Sandbox created with ID: ${sandbox.sandboxId}.` + - `\nYou can now upload files, run commands, and access services on the exposed ports.` - ) - } catch (error) { - const richError = getRichError({ - action: 'Creating Sandbox', - error, - }) + return ( + `Sandbox created with ID: ${sandbox.sandboxId}.` + + `\nYou can now upload files, run commands, and access services on the exposed ports.` + ) + } catch (error) { + const richError = getRichError({ + action: 'Creating Sandbox', + error, + }) - writer.write({ - id: toolCallId, - type: 'data-create-sandbox', - data: { - error: { message: richError.error.message }, - status: 'error', - }, - }) + writer.write({ + id: toolCallId, + type: 'data-create-sandbox', + data: { + error: { message: richError.error.message }, + status: 'error', + }, + }) - console.log('Error creating Sandbox:', richError.error) - return richError.message - } - }, + console.log('Error creating Sandbox:', richError.error) + return richError.message + } +} + +export const createSandbox = () => + tool({ + description, + inputSchema, + execute: executeCreateSandbox, }) diff --git a/apps/vibe-coding-platform/ai/tools/generate-files.ts b/apps/vibe-coding-platform/ai/tools/generate-files.ts index d2e6e524b5..699c600d89 100644 --- a/apps/vibe-coding-platform/ai/tools/generate-files.ts +++ b/apps/vibe-coding-platform/ai/tools/generate-files.ts @@ -13,100 +13,108 @@ interface Params { modelId: string } -export const generateFiles = ({ modelId }: Params) => - tool({ - description, - inputSchema: z.object({ - sandboxId: z.string(), - paths: z.array(z.string()), - }), - execute: async ({ sandboxId, paths }, { toolCallId, messages }) => { - 'use step' - - const writable = getWritable>() - const writer = writable.getWriter() - - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { paths: [], status: 'generating' }, - }) - - let sandbox: Sandbox | null = null - - try { - sandbox = await Sandbox.get({ sandboxId }) - } catch (error) { - const richError = getRichError({ - action: 'get sandbox by id', - args: { sandboxId }, - error, - }) +const inputSchema = z.object({ + sandboxId: z.string(), + paths: z.array(z.string()), +}) - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { error: richError.error, paths: [], status: 'error' }, - }) +async function executeGenerateFiles( + { sandboxId, paths }: z.infer, + { toolCallId, messages }: { toolCallId: string; messages: any }, + modelId: string +) { + 'use step' - return richError.message - } + const writable = getWritable>() + const writer = writable.getWriter() - const writeFiles = getWriteFiles({ sandbox, toolCallId, writer }) - const iterator = getContents({ messages, modelId, paths }) - const uploaded: File[] = [] - - try { - for await (const chunk of iterator) { - if (chunk.files.length > 0) { - const error = await writeFiles(chunk) - if (error) { - return error - } else { - uploaded.push(...chunk.files) - } - } else { - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { - status: 'generating', - paths: chunk.paths, - }, - }) - } - } - } catch (error) { - const richError = getRichError({ - action: 'generate file contents', - args: { modelId, paths }, - error, - }) + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { paths: [], status: 'generating' }, + }) + + let sandbox: Sandbox | null = null + + try { + sandbox = await Sandbox.get({ sandboxId }) + } catch (error) { + const richError = getRichError({ + action: 'get sandbox by id', + args: { sandboxId }, + error, + }) + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { error: richError.error, paths: [], status: 'error' }, + }) + + return richError.message + } + + const writeFiles = getWriteFiles({ sandbox, toolCallId, writer }) + const iterator = getContents({ messages, modelId, paths }) + const uploaded: File[] = [] + + try { + for await (const chunk of iterator) { + if (chunk.files.length > 0) { + const error = await writeFiles(chunk) + if (error) { + return error + } else { + uploaded.push(...chunk.files) + } + } else { writer.write({ id: toolCallId, type: 'data-generating-files', data: { - error: richError.error, - status: 'error', - paths, + status: 'generating', + paths: chunk.paths, }, }) - - return richError.message } + } + } catch (error) { + const richError = getRichError({ + action: 'generate file contents', + args: { modelId, paths }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { + error: richError.error, + status: 'error', + paths, + }, + }) + + return richError.message + } - writer.write({ - id: toolCallId, - type: 'data-generating-files', - data: { paths: uploaded.map((file) => file.path), status: 'done' }, - }) - - return `Successfully generated and uploaded ${ - uploaded.length - } files. Their paths and contents are as follows: - ${uploaded - .map((file) => `Path: ${file.path}\nContent: ${file.content}\n`) - .join('\n')}` - }, + writer.write({ + id: toolCallId, + type: 'data-generating-files', + data: { paths: uploaded.map((file) => file.path), status: 'done' }, + }) + + return `Successfully generated and uploaded ${ + uploaded.length + } files. Their paths and contents are as follows: + ${uploaded + .map((file) => `Path: ${file.path}\nContent: ${file.content}\n`) + .join('\n')}` +} + +export const generateFiles = ({ modelId }: Params) => + tool({ + description, + inputSchema, + execute: (args, context) => executeGenerateFiles(args, context, modelId), }) diff --git a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts index 391b9cc0ab..6fa7c49c11 100644 --- a/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts +++ b/apps/vibe-coding-platform/ai/tools/get-sandbox-url.ts @@ -6,42 +6,49 @@ import description from './get-sandbox-url.prompt' import z from 'zod/v3' import { getWritable } from 'workflow' +const inputSchema = z.object({ + sandboxId: z + .string() + .describe( + "The unique identifier of the Vercel Sandbox (e.g., 'sbx_abc123xyz'). This ID is returned when creating a Vercel Sandbox and is used to reference the specific sandbox instance." + ), + port: z + .number() + .describe( + 'The port number where a service is running inside the Vercel Sandbox (e.g., 3000 for Next.js dev server, 8000 for Python apps, 5000 for Flask). The port must have been exposed when the sandbox was created or when running commands.' + ), +}) + +async function executeGetSandboxURL( + { sandboxId, port }: z.infer, + { toolCallId }: { toolCallId: string } +) { + 'use step' + + const writeable = getWritable>() + const writer = writeable.getWriter() + + writer.write({ + id: toolCallId, + type: 'data-get-sandbox-url', + data: { status: 'loading' }, + }) + + const sandbox = await Sandbox.get({ sandboxId }) + const url = sandbox.domain(port) + + writer.write({ + id: toolCallId, + type: 'data-get-sandbox-url', + data: { url, status: 'done' }, + }) + + return { url } +} + export const getSandboxURL = () => tool({ description, - inputSchema: z.object({ - sandboxId: z - .string() - .describe( - "The unique identifier of the Vercel Sandbox (e.g., 'sbx_abc123xyz'). This ID is returned when creating a Vercel Sandbox and is used to reference the specific sandbox instance." - ), - port: z - .number() - .describe( - 'The port number where a service is running inside the Vercel Sandbox (e.g., 3000 for Next.js dev server, 8000 for Python apps, 5000 for Flask). The port must have been exposed when the sandbox was created or when running commands.' - ), - }), - execute: async ({ sandboxId, port }, { toolCallId }) => { - 'use step' - - const writeable = getWritable>() - const writer = writeable.getWriter() - - writer.write({ - id: toolCallId, - type: 'data-get-sandbox-url', - data: { status: 'loading' }, - }) - - const sandbox = await Sandbox.get({ sandboxId }) - const url = sandbox.domain(port) - - writer.write({ - id: toolCallId, - type: 'data-get-sandbox-url', - data: { url, status: 'done' }, - }) - - return { url } - }, + inputSchema, + execute: executeGetSandboxURL, }) diff --git a/apps/vibe-coding-platform/ai/tools/index.ts b/apps/vibe-coding-platform/ai/tools/index.ts index b44c59bbab..0fcb82b924 100644 --- a/apps/vibe-coding-platform/ai/tools/index.ts +++ b/apps/vibe-coding-platform/ai/tools/index.ts @@ -1,8 +1,8 @@ import type { InferUITools } from 'ai' -// import { createSandbox } from './create-sandbox' -// import { generateFiles } from './generate-files' -// import { getSandboxURL } from './get-sandbox-url' -// import { runCommand } from './run-command' +import { createSandbox } from './create-sandbox' +import { generateFiles } from './generate-files' +import { getSandboxURL } from './get-sandbox-url' +import { runCommand } from './run-command' interface Params { modelId: string @@ -10,10 +10,10 @@ interface Params { export function tools({ modelId }: Params) { return { - // createSandbox: createSandbox(), - // generateFiles: generateFiles({ modelId }), - // getSandboxURL: getSandboxURL(), - // runCommand: runCommand(), + createSandbox: createSandbox(), + generateFiles: generateFiles({ modelId }), + getSandboxURL: getSandboxURL(), + runCommand: runCommand(), } } diff --git a/apps/vibe-coding-platform/ai/tools/run-command.ts b/apps/vibe-coding-platform/ai/tools/run-command.ts index 8c20803670..7b8d61fd46 100644 --- a/apps/vibe-coding-platform/ai/tools/run-command.ts +++ b/apps/vibe-coding-platform/ai/tools/run-command.ts @@ -7,200 +7,198 @@ import description from './run-command.prompt' import z from 'zod/v3' import { getWritable } from 'workflow' +const inputSchema = z.object({ + sandboxId: z + .string() + .describe('The ID of the Vercel Sandbox to run the command in'), + command: z + .string() + .describe( + "The base command to run (e.g., 'npm', 'node', 'python', 'ls', 'cat'). Do NOT include arguments here. IMPORTANT: Each command runs independently in a fresh shell session - there is no persistent state between commands. You cannot use 'cd' to change directories for subsequent commands." + ), + args: z + .array(z.string()) + .optional() + .describe( + "Array of arguments for the command. Each argument should be a separate string (e.g., ['install', '--verbose'] for npm install --verbose, or ['src/index.js'] to run a file, or ['-la', './src'] to list files). IMPORTANT: Use relative paths (e.g., 'src/file.js') or absolute paths instead of trying to change directories with 'cd' first, since each command runs in a fresh shell session." + ), + sudo: z.boolean().optional().describe('Whether to run the command with sudo'), + wait: z + .boolean() + .describe( + 'Whether to wait for the command to finish before returning. If true, the command will block until it completes, and you will receive its output.' + ), +}) + +async function executeRunCommand( + { sandboxId, command, sudo, wait, args = [] }: z.infer, + { toolCallId }: { toolCallId: string } +) { + 'use step' + + const writable = getWritable>() + const writer = writable.getWriter() + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { sandboxId, command, args, status: 'executing' }, + }) + + let sandbox: Sandbox | null = null + + try { + sandbox = await Sandbox.get({ sandboxId }) + } catch (error) { + const richError = getRichError({ + action: 'get sandbox by id', + args: { sandboxId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } + + let cmd: Command | null = null + + try { + cmd = await sandbox.runCommand({ + detached: true, + cmd: command, + args, + sudo, + }) + } catch (error) { + const richError = getRichError({ + action: 'run command in sandbox', + args: { sandboxId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'executing', + }, + }) + + if (!wait) { + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'running', + }, + }) + + return `The command \`${command} ${args.join( + ' ' + )}\` has been started in the background in the sandbox with ID \`${sandboxId}\` with the commandId ${ + cmd.cmdId + }.` + } + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + status: 'waiting', + }, + }) + + const done = await cmd.wait() + try { + const [stdout, stderr] = await Promise.all([done.stdout(), done.stderr()]) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + exitCode: done.exitCode, + status: 'done', + }, + }) + + return ( + `The command \`${command} ${args.join( + ' ' + )}\` has finished with exit code ${done.exitCode}.` + + `Stdout of the command was: \n` + + `\`\`\`\n${stdout}\n\`\`\`\n` + + `Stderr of the command was: \n` + + `\`\`\`\n${stderr}\n\`\`\`` + ) + } catch (error) { + const richError = getRichError({ + action: 'wait for command to finish', + args: { sandboxId, commandId: cmd.cmdId }, + error, + }) + + writer.write({ + id: toolCallId, + type: 'data-run-command', + data: { + sandboxId, + commandId: cmd.cmdId, + command, + args, + error: richError.error, + status: 'error', + }, + }) + + return richError.message + } +} + export const runCommand = () => tool({ description, - inputSchema: z.object({ - sandboxId: z - .string() - .describe('The ID of the Vercel Sandbox to run the command in'), - command: z - .string() - .describe( - "The base command to run (e.g., 'npm', 'node', 'python', 'ls', 'cat'). Do NOT include arguments here. IMPORTANT: Each command runs independently in a fresh shell session - there is no persistent state between commands. You cannot use 'cd' to change directories for subsequent commands." - ), - args: z - .array(z.string()) - .optional() - .describe( - "Array of arguments for the command. Each argument should be a separate string (e.g., ['install', '--verbose'] for npm install --verbose, or ['src/index.js'] to run a file, or ['-la', './src'] to list files). IMPORTANT: Use relative paths (e.g., 'src/file.js') or absolute paths instead of trying to change directories with 'cd' first, since each command runs in a fresh shell session." - ), - sudo: z - .boolean() - .optional() - .describe('Whether to run the command with sudo'), - wait: z - .boolean() - .describe( - 'Whether to wait for the command to finish before returning. If true, the command will block until it completes, and you will receive its output.' - ), - }), - execute: async ( - { sandboxId, command, sudo, wait, args = [] }, - { toolCallId } - ) => { - 'use step' - - const writable = getWritable>() - const writer = writable.getWriter() - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { sandboxId, command, args, status: 'executing' }, - }) - - let sandbox: Sandbox | null = null - - try { - sandbox = await Sandbox.get({ sandboxId }) - } catch (error) { - const richError = getRichError({ - action: 'get sandbox by id', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - - let cmd: Command | null = null - - try { - cmd = await sandbox.runCommand({ - detached: true, - cmd: command, - args, - sudo, - }) - } catch (error) { - const richError = getRichError({ - action: 'run command in sandbox', - args: { sandboxId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'executing', - }, - }) - - if (!wait) { - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'running', - }, - }) - - return `The command \`${command} ${args.join( - ' ' - )}\` has been started in the background in the sandbox with ID \`${sandboxId}\` with the commandId ${ - cmd.cmdId - }.` - } - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - status: 'waiting', - }, - }) - - const done = await cmd.wait() - try { - const [stdout, stderr] = await Promise.all([ - done.stdout(), - done.stderr(), - ]) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - exitCode: done.exitCode, - status: 'done', - }, - }) - - return ( - `The command \`${command} ${args.join( - ' ' - )}\` has finished with exit code ${done.exitCode}.` + - `Stdout of the command was: \n` + - `\`\`\`\n${stdout}\n\`\`\`\n` + - `Stderr of the command was: \n` + - `\`\`\`\n${stderr}\n\`\`\`` - ) - } catch (error) { - const richError = getRichError({ - action: 'wait for command to finish', - args: { sandboxId, commandId: cmd.cmdId }, - error, - }) - - writer.write({ - id: toolCallId, - type: 'data-run-command', - data: { - sandboxId, - commandId: cmd.cmdId, - command, - args, - error: richError.error, - status: 'error', - }, - }) - - return richError.message - } - }, + inputSchema, + execute: executeRunCommand, })