diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ef4141cd85..92fe61be8d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,8 +31,8 @@ deployed using [CloudFlare Pages](https://pages.cloudflare.com/) and ### AI SDK Integration Bolt uses the [AI SDK](https://github.com/vercel/ai) to integrate with AI -models. At this time, Bolt supports using Anthropic's Claude Sonnet 3.5. -You can get an API key from the [Anthropic API Console](https://console.anthropic.com/) to use with Bolt. +models. Imoogle Build supports using Mistral and Groq as the default providers. +You can get API keys from the [Mistral AI Console](https://console.mistral.ai/) or [Groq Console](https://console.groq.com/) to use with Imoogle Build. Take a look at how [Bolt uses the AI SDK](https://github.com/stackblitz/bolt.new/tree/main/app/lib/.server/llm) ## Prerequisites @@ -56,12 +56,15 @@ git clone https://github.com/stackblitz/bolt.new.git pnpm install ``` -3. Create a `.env.local` file in the root directory and add your Anthropic API key: +3. Create a `.env.local` file in the root directory and add your API keys: ``` -ANTHROPIC_API_KEY=XXX +MISTRAL_API_KEY=your_mistral_api_key_here +GROQ_API_KEY=your_groq_api_key_here ``` +Note: You can use either Mistral or Groq (or both). Mistral is the primary provider with Groq as fallback. + Optionally, you can set the debug level: ``` diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000000..fabcdc8b9d --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,222 @@ +# Deploying Imoogle Build to Vercel + +This guide will help you deploy **Imoogle Build** to Vercel. + +## Prerequisites + +Before deploying, you'll need: + +1. **AI Provider API Keys** (at least one): + - [Mistral API Key](https://console.mistral.ai/) - Primary provider + - [Groq API Key](https://console.groq.com/) - Fallback provider + +2. **Vercel Account** + - Sign up at [vercel.com](https://vercel.com) + +## Quick Deploy + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/your-username/imoogle-build) + +## Manual Deployment + +### 1. Clone and Setup + +```bash +git clone +cd imoogle-build +pnpm install +``` + +### 2. Environment Variables + +Create a `.env.local` file for local development: + +```bash +# AI Provider API Keys (at least one is required) +MISTRAL_API_KEY=your_mistral_api_key_here +GROQ_API_KEY=your_groq_api_key_here + +# Optional: Debug level +DEBUG_LEVEL=info +VITE_LOG_LEVEL=info +``` + +### 3. Local Development + +```bash +# Start development server +pnpm dev + +# Build for production (test before deploying) +pnpm build + +# Preview production build locally +pnpm preview +``` + +### 4. Deploy to Vercel + +#### Option A: Using Vercel CLI + +```bash +# Install Vercel CLI +npm i -g vercel + +# Deploy +vercel + +# Set environment variables +vercel env add MISTRAL_API_KEY production +vercel env add GROQ_API_KEY production + +# Set for preview environment too +vercel env add MISTRAL_API_KEY preview +vercel env add GROQ_API_KEY preview +``` + +#### Option B: Using Vercel Dashboard + +1. **Connect Repository** + - Go to [Vercel Dashboard](https://vercel.com/dashboard) + - Click "New Project" + - Import your Git repository + +2. **Configure Build Settings** + - Framework Preset: **Remix** + - Build Command: `pnpm build` + - Output Directory: `build` + - Install Command: `pnpm install` + +3. **Set Environment Variables** + - Go to Project Settings → Environment Variables + - Add the following variables: + + | Name | Value | Environment | + |------|-------|-------------| + | `MISTRAL_API_KEY` | `your-actual-mistral-api-key` | Production, Preview | + | `GROQ_API_KEY` | `your-actual-groq-api-key` | Production, Preview | + + **Important**: + - Enter the actual API key values, not references + - Make sure to select both "Production" and "Preview" environments + - The variable names are case-sensitive + +4. **Deploy** + - Click "Deploy" + - Wait for deployment to complete + +## Configuration Details + +### Vercel Configuration + +The project includes a `vercel.json` file with the following configuration: + +```json +{ + "buildCommand": "pnpm build", + "devCommand": "pnpm dev", + "installCommand": "pnpm install", + "framework": "remix", + "outputDirectory": "build", + "functions": { + "app/routes/api.*.ts": { + "maxDuration": 30 + } + } +} +``` + +**Note**: Environment variables are set directly in the Vercel dashboard or CLI, not in the `vercel.json` file. + +### AI Provider Fallback Logic + +- **Primary**: Mistral AI (if `MISTRAL_API_KEY` is provided) +- **Fallback**: Groq (if `GROQ_API_KEY` is provided) +- **Error**: If neither API key is provided, the app will throw an error + +### Supported Models + +- **Mistral**: `mistral-large-latest` +- **Groq**: `llama3-8b-8192` + +## Troubleshooting + +### Environment Variable Issues + +1. **"Secret does not exist" Error** + - This happens when environment variables are not set correctly + - Go to Project Settings → Environment Variables in Vercel dashboard + - Add `MISTRAL_API_KEY` and/or `GROQ_API_KEY` with actual values + - Redeploy the project + +2. **Variables Not Loading** + - Ensure variables are set for the correct environment (Production/Preview) + - Variable names must be exactly: `MISTRAL_API_KEY` and `GROQ_API_KEY` + - Redeploy after adding new environment variables + +3. **Build Failures** + ```bash + # Clear cache and rebuild + pnpm clean + pnpm install + pnpm build + ``` + +### Common Issues + +1. **API Key Issues** + - Ensure environment variables are set correctly in Vercel dashboard + - Verify API keys are valid and have sufficient credits + - Check that you're using the correct API key format + +2. **Memory/Timeout Issues** + - API routes have a 30-second timeout limit + - Large responses are streamed to avoid memory issues + +### Step-by-Step Environment Variable Setup + +1. **In Vercel Dashboard:** + - Go to your project + - Click "Settings" tab + - Click "Environment Variables" in the sidebar + - Click "Add New" + - Enter `MISTRAL_API_KEY` as name + - Enter your actual Mistral API key as value + - Select "Production" and "Preview" environments + - Click "Save" + - Repeat for `GROQ_API_KEY` if you have one + +2. **Redeploy:** + - Go to "Deployments" tab + - Click "..." menu on latest deployment + - Click "Redeploy" + +## Performance Optimization + +1. **Code Splitting**: The app automatically splits code for better performance +2. **Streaming**: API responses are streamed to handle large responses +3. **Caching**: Static assets are automatically cached by Vercel + +## Monitoring + +- **Vercel Analytics**: Monitor performance and usage +- **Function Logs**: Check Vercel function logs for API errors +- **Build Logs**: Monitor build process for any issues + +## Security + +- **Environment Variables**: Never commit API keys to your repository +- **HTTPS**: Vercel automatically provides HTTPS +- **CORS**: Configured for same-origin requests + +## Support + +If you encounter issues: + +1. Check [Vercel Documentation](https://vercel.com/docs) +2. Review [Remix Deployment Guide](https://remix.run/docs/en/main/guides/deployment#vercel) +3. Check project issues on GitHub + +--- + +**Note**: This deployment guide assumes you've already completed the rebranding to "Imoogle Build" and have configured Mistral/Groq as your AI providers. \ No newline at end of file diff --git a/README.md b/README.md index d3745298ff..c88eb6fe8a 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,63 @@ -[![Bolt.new: AI-Powered Full-Stack Web Development in the Browser](./public/social_preview_index.jpg)](https://bolt.new) +[![Imoogle Build: AI-Powered Full-Stack Web Development in the Browser](./public/social_preview_index.jpg)](https://imoogle-build.com) -# Bolt.new: AI-Powered Full-Stack Web Development in the Browser +# Imoogle Build: AI-Powered Full-Stack Web Development in the Browser -Bolt.new is an AI-powered web development agent that allows you to prompt, run, edit, and deploy full-stack applications directly from your browser—no local setup required. If you're here to build your own AI-powered web dev agent using the Bolt open source codebase, [click here to get started!](./CONTRIBUTING.md) +Imoogle Build is an AI-powered web development agent that allows you to prompt, run, edit, and deploy full-stack applications directly from your browser—no local setup required. Built with Mistral and Groq AI models for enhanced performance and capabilities. -## What Makes Bolt.new Different +## What Makes Imoogle Build Different -Claude, v0, etc are incredible- but you can't install packages, run backends or edit code. That’s where Bolt.new stands out: +Traditional AI assistants are incredible, but you can't install packages, run backends or edit code. That's where Imoogle Build stands out: -- **Full-Stack in the Browser**: Bolt.new integrates cutting-edge AI models with an in-browser development environment powered by **StackBlitz’s WebContainers**. This allows you to: +- **Full-Stack in the Browser**: Imoogle Build integrates cutting-edge AI models (Mistral and Groq) with an in-browser development environment powered by **StackBlitz's WebContainers**. This allows you to: - Install and run npm tools and libraries (like Vite, Next.js, and more) - Run Node.js servers - Interact with third-party APIs - Deploy to production from chat - Share your work via a URL -- **AI with Environment Control**: Unlike traditional dev environments where the AI can only assist in code generation, Bolt.new gives AI models **complete control** over the entire environment including the filesystem, node server, package manager, terminal, and browser console. This empowers AI agents to handle the entire app lifecycle—from creation to deployment. +- **AI with Environment Control**: Unlike traditional dev environments where the AI can only assist in code generation, Imoogle Build gives AI models **complete control** over the entire environment including the filesystem, node server, package manager, terminal, and browser console. This empowers AI agents to handle the entire app lifecycle—from creation to deployment. -Whether you’re an experienced developer, a PM or designer, Bolt.new allows you to build production-grade full-stack applications with ease. +Whether you're an experienced developer, a PM or designer, Imoogle Build allows you to build production-grade full-stack applications with ease. -For developers interested in building their own AI-powered development tools with WebContainers, check out the open-source Bolt codebase in this repo! +## Supported AI Providers + +Imoogle Build uses the following AI providers by default: +- **Mistral AI**: Primary provider for enhanced reasoning and code generation +- **Groq**: Fallback provider for fast inference and reliability ## Tips and Tricks -Here are some tips to get the most out of Bolt.new: +Here are some tips to get the most out of Imoogle Build: -- **Be specific about your stack**: If you want to use specific frameworks or libraries (like Astro, Tailwind, ShadCN, or any other popular JavaScript framework), mention them in your initial prompt to ensure Bolt scaffolds the project accordingly. +- **Be specific about your stack**: If you want to use specific frameworks or libraries (like Astro, Tailwind, ShadCN, or any other popular JavaScript framework), mention them in your initial prompt to ensure Imoogle Build scaffolds the project accordingly. - **Use the enhance prompt icon**: Before sending your prompt, try clicking the 'enhance' icon to have the AI model help you refine your prompt, then edit the results before submitting. -- **Scaffold the basics first, then add features**: Make sure the basic structure of your application is in place before diving into more advanced functionality. This helps Bolt understand the foundation of your project and ensure everything is wired up right before building out more advanced functionality. +- **Scaffold the basics first, then add features**: Make sure the basic structure of your application is in place before diving into more advanced functionality. This helps Imoogle Build understand the foundation of your project and ensure everything is wired up right before building out more advanced functionality. -- **Batch simple instructions**: Save time by combining simple instructions into one message. For example, you can ask Bolt to change the color scheme, add mobile responsiveness, and restart the dev server, all in one go saving you time and reducing API credit consumption significantly. +- **Batch simple instructions**: Save time by combining simple instructions into one message. For example, you can ask Imoogle Build to change the color scheme, add mobile responsiveness, and restart the dev server, all in one go saving you time and reducing API credit consumption significantly. -## FAQs +## Setup + +To run Imoogle Build locally, you'll need API keys for either Mistral or Groq (or both): -**Where do I sign up for a paid plan?** -Bolt.new is free to get started. If you need more AI tokens or want private projects, you can purchase a paid subscription in your [Bolt.new](https://bolt.new) settings, in the lower-left hand corner of the application. +1. Get a Mistral API key from [Mistral AI Console](https://console.mistral.ai/) +2. Get a Groq API key from [Groq Console](https://console.groq.com/) -**What happens if I hit the free usage limit?** -Once your free daily token limit is reached, AI interactions are paused until the next day or until you upgrade your plan. +Create a `.env.local` file in the root directory and add your API keys: -**Is Bolt in beta?** -Yes, Bolt.new is in beta, and we are actively improving it based on feedback. +```bash +MISTRAL_API_KEY=your_mistral_api_key_here +GROQ_API_KEY=your_groq_api_key_here +``` + +## FAQs -**How can I report Bolt.new issues?** -Check out the [Issues section](https://github.com/stackblitz/bolt.new/issues) to report an issue or request a new feature. Please use the search feature to check if someone else has already submitted the same issue/request. +**What frameworks/libraries currently work on Imoogle Build?** +Imoogle Build supports most popular JavaScript frameworks and libraries. If it runs on StackBlitz, it will run on Imoogle Build as well. -**What frameworks/libraries currently work on Bolt?** -Bolt.new supports most popular JavaScript frameworks and libraries. If it runs on StackBlitz, it will run on Bolt.new as well. +**Which AI models does Imoogle Build use?** +Imoogle Build primarily uses Mistral's latest models with Groq as a fallback provider for enhanced performance and reliability. -**How can I add make sure my framework/project works well in bolt?** -We are excited to work with the JavaScript ecosystem to improve functionality in Bolt. Reach out to us via [hello@stackblitz.com](mailto:hello@stackblitz.com) to discuss how we can partner! +**How can I report issues?** +Check out the [Issues section](https://github.com/your-repo/imoogle-build/issues) to report an issue or request a new feature. Please use the search feature to check if someone else has already submitted the same issue/request. diff --git a/app/components/chat/Markdown.module.scss b/app/components/chat/Markdown.module.scss index 3da3861c6d..93c53aaa5b 100644 --- a/app/components/chat/Markdown.module.scss +++ b/app/components/chat/Markdown.module.scss @@ -9,7 +9,7 @@ $code-font-size: 13px; .MarkdownContent { line-height: 1.6; - color: var(--bolt-elements-textPrimary); + color: var(--imoogle-elements-textPrimary); > *:not(:last-child) { margin-block-end: 16px; @@ -25,19 +25,19 @@ $code-font-size: 13px; margin-block-end: 16px; font-weight: 600; line-height: 1.25; - color: var(--bolt-elements-textPrimary); + color: var(--imoogle-elements-textPrimary); } } h1 { font-size: 2em; - border-bottom: 1px solid var(--bolt-elements-borderColor); + border-bottom: 1px solid var(--imoogle-elements-borderColor); padding-bottom: 0.3em; } h2 { font-size: 1.5em; - border-bottom: 1px solid var(--bolt-elements-borderColor); + border-bottom: 1px solid var(--imoogle-elements-borderColor); padding-bottom: 0.3em; } @@ -68,7 +68,7 @@ $code-font-size: 13px; } a { - color: var(--bolt-elements-messages-linkColor); + color: var(--imoogle-elements-messages-linkColor); text-decoration: none; cursor: pointer; @@ -84,8 +84,8 @@ $code-font-size: 13px; @include not-inside-actions { border-radius: 6px; padding: 0.2em 0.4em; - background-color: var(--bolt-elements-messages-inlineCode-background); - color: var(--bolt-elements-messages-inlineCode-text); + background-color: var(--imoogle-elements-messages-inlineCode-background); + color: var(--imoogle-elements-messages-inlineCode-text); } } @@ -105,8 +105,8 @@ $code-font-size: 13px; blockquote { margin: 0; padding: 0 1em; - color: var(--bolt-elements-textTertiary); - border-left: 0.25em solid var(--bolt-elements-borderColor); + color: var(--imoogle-elements-textTertiary); + border-left: 0.25em solid var(--imoogle-elements-borderColor); } :is(ul, ol) { @@ -150,7 +150,7 @@ $code-font-size: 13px; height: 0.25em; padding: 0; margin: 24px 0; - background-color: var(--bolt-elements-borderColor); + background-color: var(--imoogle-elements-borderColor); border: 0; } diff --git a/app/components/chat/Markdown.tsx b/app/components/chat/Markdown.tsx index a91df43d30..4441559dd4 100644 --- a/app/components/chat/Markdown.tsx +++ b/app/components/chat/Markdown.tsx @@ -22,7 +22,7 @@ export const Markdown = memo(({ children, html = false, limitedMarkdown = false const components = useMemo(() => { return { div: ({ className, children, node, ...props }) => { - if (className?.includes('__boltArtifact__')) { + if (className?.includes('__imoogleArtifact__')) { const messageId = node?.properties.dataMessageId as string; if (!messageId) { diff --git a/app/components/editor/codemirror/cm-theme.ts b/app/components/editor/codemirror/cm-theme.ts index 6f3f3639ff..c789175345 100644 --- a/app/components/editor/codemirror/cm-theme.ts +++ b/app/components/editor/codemirror/cm-theme.ts @@ -171,10 +171,10 @@ function getEditorTheme(settings: EditorSettings) { '.cm-tooltip.cm-readonly-tooltip': { padding: '4px', whiteSpace: 'nowrap', - backgroundColor: 'var(--bolt-elements-bg-depth-2)', - borderColor: 'var(--bolt-elements-borderColorActive)', + backgroundColor: 'var(--imoogle-elements-bg-depth-2)', + borderColor: 'var(--imoogle-elements-borderColorActive)', '& .cm-tooltip-arrow:before': { - borderTopColor: 'var(--bolt-elements-borderColorActive)', + borderTopColor: 'var(--imoogle-elements-borderColorActive)', }, '& .cm-tooltip-arrow:after': { borderTopColor: 'transparent', diff --git a/app/components/workbench/terminal/theme.ts b/app/components/workbench/terminal/theme.ts index a9ef07d0e0..5a5c3595cc 100644 --- a/app/components/workbench/terminal/theme.ts +++ b/app/components/workbench/terminal/theme.ts @@ -5,31 +5,31 @@ const cssVar = (token: string) => style.getPropertyValue(token) || undefined; export function getTerminalTheme(overrides?: ITheme): ITheme { return { - cursor: cssVar('--bolt-elements-terminal-cursorColor'), - cursorAccent: cssVar('--bolt-elements-terminal-cursorColorAccent'), - foreground: cssVar('--bolt-elements-terminal-textColor'), - background: cssVar('--bolt-elements-terminal-backgroundColor'), - selectionBackground: cssVar('--bolt-elements-terminal-selection-backgroundColor'), - selectionForeground: cssVar('--bolt-elements-terminal-selection-textColor'), - selectionInactiveBackground: cssVar('--bolt-elements-terminal-selection-backgroundColorInactive'), + cursor: cssVar('--imoogle-elements-terminal-cursorColor'), + cursorAccent: cssVar('--imoogle-elements-terminal-cursorColorAccent'), + foreground: cssVar('--imoogle-elements-terminal-textColor'), + background: cssVar('--imoogle-elements-terminal-backgroundColor'), + selectionBackground: cssVar('--imoogle-elements-terminal-selection-backgroundColor'), + selectionForeground: cssVar('--imoogle-elements-terminal-selection-textColor'), + selectionInactiveBackground: cssVar('--imoogle-elements-terminal-selection-backgroundColorInactive'), // ansi escape code colors - black: cssVar('--bolt-elements-terminal-color-black'), - red: cssVar('--bolt-elements-terminal-color-red'), - green: cssVar('--bolt-elements-terminal-color-green'), - yellow: cssVar('--bolt-elements-terminal-color-yellow'), - blue: cssVar('--bolt-elements-terminal-color-blue'), - magenta: cssVar('--bolt-elements-terminal-color-magenta'), - cyan: cssVar('--bolt-elements-terminal-color-cyan'), - white: cssVar('--bolt-elements-terminal-color-white'), - brightBlack: cssVar('--bolt-elements-terminal-color-brightBlack'), - brightRed: cssVar('--bolt-elements-terminal-color-brightRed'), - brightGreen: cssVar('--bolt-elements-terminal-color-brightGreen'), - brightYellow: cssVar('--bolt-elements-terminal-color-brightYellow'), - brightBlue: cssVar('--bolt-elements-terminal-color-brightBlue'), - brightMagenta: cssVar('--bolt-elements-terminal-color-brightMagenta'), - brightCyan: cssVar('--bolt-elements-terminal-color-brightCyan'), - brightWhite: cssVar('--bolt-elements-terminal-color-brightWhite'), + black: cssVar('--imoogle-elements-terminal-color-black'), + red: cssVar('--imoogle-elements-terminal-color-red'), + green: cssVar('--imoogle-elements-terminal-color-green'), + yellow: cssVar('--imoogle-elements-terminal-color-yellow'), + blue: cssVar('--imoogle-elements-terminal-color-blue'), + magenta: cssVar('--imoogle-elements-terminal-color-magenta'), + cyan: cssVar('--imoogle-elements-terminal-color-cyan'), + white: cssVar('--imoogle-elements-terminal-color-white'), + brightBlack: cssVar('--imoogle-elements-terminal-color-brightBlack'), + brightRed: cssVar('--imoogle-elements-terminal-color-brightRed'), + brightGreen: cssVar('--imoogle-elements-terminal-color-brightGreen'), + brightYellow: cssVar('--imoogle-elements-terminal-color-brightYellow'), + brightBlue: cssVar('--imoogle-elements-terminal-color-brightBlue'), + brightMagenta: cssVar('--imoogle-elements-terminal-color-brightMagenta'), + brightCyan: cssVar('--imoogle-elements-terminal-color-brightCyan'), + brightWhite: cssVar('--imoogle-elements-terminal-color-brightWhite'), ...overrides, }; diff --git a/app/entry.server.tsx b/app/entry.server.tsx index 4baf07001d..7e27eb5468 100644 --- a/app/entry.server.tsx +++ b/app/entry.server.tsx @@ -1,76 +1,29 @@ -import type { AppLoadContext, EntryContext } from '@remix-run/cloudflare'; +import type { AppLoadContext, EntryContext } from '@remix-run/node'; import { RemixServer } from '@remix-run/react'; import { isbot } from 'isbot'; import { renderToReadableStream } from 'react-dom/server'; -import { renderHeadToString } from 'remix-island'; -import { Head } from './root'; -import { themeStore } from '~/lib/stores/theme'; export default async function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, remixContext: EntryContext, - _loadContext: AppLoadContext, + loadContext: AppLoadContext, ) { - const readable = await renderToReadableStream(, { + const body = await renderToReadableStream(, { signal: request.signal, onError(error: unknown) { + // Log streaming rendering errors from inside the shell console.error(error); responseStatusCode = 500; }, }); - const body = new ReadableStream({ - start(controller) { - const head = renderHeadToString({ request, remixContext, Head }); - - controller.enqueue( - new Uint8Array( - new TextEncoder().encode( - `${head}
`, - ), - ), - ); - - const reader = readable.getReader(); - - function read() { - reader - .read() - .then(({ done, value }) => { - if (done) { - controller.enqueue(new Uint8Array(new TextEncoder().encode(`
`))); - controller.close(); - - return; - } - - controller.enqueue(value); - read(); - }) - .catch((error) => { - controller.error(error); - readable.cancel(); - }); - } - read(); - }, - - cancel() { - readable.cancel(); - }, - }); - if (isbot(request.headers.get('user-agent') || '')) { - await readable.allReady; + await body.allReady; } responseHeaders.set('Content-Type', 'text/html'); - - responseHeaders.set('Cross-Origin-Embedder-Policy', 'require-corp'); - responseHeaders.set('Cross-Origin-Opener-Policy', 'same-origin'); - return new Response(body, { headers: responseHeaders, status: responseStatusCode, diff --git a/app/lib/.server/llm/api-key.ts b/app/lib/.server/llm/api-key.ts index 863f763673..37bb55aa59 100644 --- a/app/lib/.server/llm/api-key.ts +++ b/app/lib/.server/llm/api-key.ts @@ -1,9 +1,20 @@ import { env } from 'node:process'; -export function getAPIKey(cloudflareEnv: Env) { - /** - * The `cloudflareEnv` is only used when deployed or when previewing locally. - * In development the environment variables are available through `env`. - */ - return env.ANTHROPIC_API_KEY || cloudflareEnv.ANTHROPIC_API_KEY; +export function getMistralAPIKey(): string | undefined { + return env.MISTRAL_API_KEY; +} + +export function getGroqAPIKey(): string | undefined { + return env.GROQ_API_KEY; +} + +// Legacy function to maintain compatibility - returns the available API key +export function getAPIKey(): string { + const mistralKey = getMistralAPIKey(); + if (mistralKey) return mistralKey; + + const groqKey = getGroqAPIKey(); + if (groqKey) return groqKey; + + throw new Error('No API key found. Please set MISTRAL_API_KEY or GROQ_API_KEY environment variable.'); } diff --git a/app/lib/.server/llm/constants.ts b/app/lib/.server/llm/constants.ts index b24acdf272..5e5abb6a69 100644 --- a/app/lib/.server/llm/constants.ts +++ b/app/lib/.server/llm/constants.ts @@ -1,4 +1,4 @@ -// see https://docs.anthropic.com/en/docs/about-claude/models +// Model configuration for Mistral and Groq providers export const MAX_TOKENS = 8192; // limits the number of model responses that can be returned in a single request diff --git a/app/lib/.server/llm/model.ts b/app/lib/.server/llm/model.ts index f0d695c47f..b4bd2733ce 100644 --- a/app/lib/.server/llm/model.ts +++ b/app/lib/.server/llm/model.ts @@ -1,9 +1,31 @@ -import { createAnthropic } from '@ai-sdk/anthropic'; +import { createMistral } from '@ai-sdk/mistral'; +import { createGroq } from '@ai-sdk/groq'; -export function getAnthropicModel(apiKey: string) { - const anthropic = createAnthropic({ +export function getMistralModel(apiKey: string) { + const mistral = createMistral({ apiKey, }); - return anthropic('claude-3-5-sonnet-20240620'); + return mistral('mistral-large-latest'); +} + +export function getGroqModel(apiKey: string) { + const groq = createGroq({ + apiKey, + }); + + return groq('llama3-8b-8192'); +} + +// Default provider is Mistral, fallback to Groq +export function getDefaultModel(mistralApiKey?: string, groqApiKey?: string) { + if (mistralApiKey) { + return getMistralModel(mistralApiKey); + } + + if (groqApiKey) { + return getGroqModel(groqApiKey); + } + + throw new Error('No API key provided for Mistral or Groq. Please set MISTRAL_API_KEY or GROQ_API_KEY environment variable.'); } diff --git a/app/lib/.server/llm/prompts.ts b/app/lib/.server/llm/prompts.ts index f78b418731..b3a1c680e3 100644 --- a/app/lib/.server/llm/prompts.ts +++ b/app/lib/.server/llm/prompts.ts @@ -3,7 +3,7 @@ import { allowedHTMLElements } from '~/utils/markdown'; import { stripIndents } from '~/utils/stripIndent'; export const getSystemPrompt = (cwd: string = WORK_DIR) => ` -You are Bolt, an expert AI assistant and exceptional senior software developer with vast knowledge across multiple programming languages, frameworks, and best practices. +You are Imoogle Build, an expert AI assistant and exceptional senior software developer with vast knowledge across multiple programming languages, frameworks, and best practices. You are operating in an environment called WebContainer, an in-browser Node.js runtime that emulates a Linux system to some degree. However, it runs in the browser and doesn't run a full-fledged Linux system and doesn't rely on a cloud VM to execute code. All code is executed in the browser. It does come with a shell that emulates zsh. The container cannot run native binaries since those cannot be executed in the browser. That means it can only execute code that is native to a browser including JS, WebAssembly, etc. @@ -69,7 +69,7 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w } -console.log('Hello, World!'); - +console.log('Hello, Bolt!'); + +console.log('Hello, Imoogle Build!'); + function greet() { - return 'Greetings!'; @@ -85,7 +85,7 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w - Bolt creates a SINGLE, comprehensive artifact for each project. The artifact contains all necessary steps and components, including: + Imoogle Build creates a SINGLE, comprehensive artifact for each project. The artifact contains all necessary steps and components, including: - Shell commands to run including dependencies to install using a package manager (NPM) - Files to create and their contents @@ -105,15 +105,15 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w 3. The current working directory is \`${cwd}\`. - 4. Wrap the content in opening and closing \`\` tags. These tags contain more specific \`\` elements. + 4. Wrap the content in opening and closing \`\` tags. These tags contain more specific \`\` elements. - 5. Add a title for the artifact to the \`title\` attribute of the opening \`\`. + 5. Add a title for the artifact to the \`title\` attribute of the opening \`\`. - 6. Add a unique identifier to the \`id\` attribute of the of the opening \`\`. For updates, reuse the prior identifier. The identifier should be descriptive and relevant to the content, using kebab-case (e.g., "example-code-snippet"). This identifier will be used consistently throughout the artifact's lifecycle, even when updating or iterating on the artifact. + 6. Add a unique identifier to the \`id\` attribute of the of the opening \`\`. For updates, reuse the prior identifier. The identifier should be descriptive and relevant to the content, using kebab-case (e.g., "example-code-snippet"). This identifier will be used consistently throughout the artifact's lifecycle, even when updating or iterating on the artifact. - 7. Use \`\` tags to define specific actions to perform. + 7. Use \`\` tags to define specific actions to perform. - 8. For each \`\`, add a type to the \`type\` attribute of the opening \`\` tag to specify the type of the action. Assign one of the following values to the \`type\` attribute: + 8. For each \`\`, add a type to the \`type\` attribute of the opening \`\` tag to specify the type of the action. Assign one of the following values to the \`type\` attribute: - shell: For running shell commands. @@ -121,7 +121,7 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w - When running multiple shell commands, use \`&&\` to run them sequentially. - ULTRA IMPORTANT: Do NOT re-run a dev command if there is one that starts a dev server and new dependencies were installed or files updated! If a dev server has started already, assume that installing dependencies will be executed in a different process and will be picked up by the dev server. - - file: For writing new files or updating existing files. For each file add a \`filePath\` attribute to the opening \`\` tag to specify the file path. The content of the file artifact is the file contents. All file paths MUST BE relative to the current working directory. + - file: For writing new files or updating existing files. For each file add a \`filePath\` attribute to the opening \`\` tag to specify the file path. The content of the file artifact is the file contents. All file paths MUST BE relative to the current working directory. 9. The order of the actions is VERY IMPORTANT. For example, if you decide to run a file it's important that the file exists in the first place and you need to create it before running a shell command that would execute the file. @@ -169,19 +169,19 @@ Here are some examples of correct usage of artifacts: Certainly, I can help you create a JavaScript function to calculate the factorial of a number. - - + + function factorial(n) { ... } ... - + - + node index.js - - + + @@ -191,8 +191,8 @@ Here are some examples of correct usage of artifacts: Certainly! I'd be happy to help you build a snake game using JavaScript and HTML5 Canvas. This will be a basic implementation that you can later expand upon. Let's create the game step by step. - - + + { "name": "snake", "scripts": { @@ -200,20 +200,20 @@ Here are some examples of correct usage of artifacts: } ... } - + - + npm install --save-dev vite - + - + ... - + - + npm run dev - - + + Now you can play the Snake game by opening the provided local server URL in your browser. Use the arrow keys to control the snake. Eat the red food to grow and increase your score. The game ends if you hit the wall or your own tail. @@ -225,8 +225,8 @@ Here are some examples of correct usage of artifacts: Certainly! I'll create a bouncing ball with real gravity using React. We'll use the react-spring library for physics-based animations. - - + + { "name": "bouncing-ball", "private": true, @@ -249,28 +249,28 @@ Here are some examples of correct usage of artifacts: "vite": "^4.2.0" } } - + - + ... - + - + ... - + - + ... - + - + ... - + - + npm run dev - - + + You can now view the bouncing ball animation in the preview. The ball will start falling from the top of the screen and bounce realistically when it hits the bottom. diff --git a/app/lib/.server/llm/stream-text.ts b/app/lib/.server/llm/stream-text.ts index cf937fd00e..7868640b5d 100644 --- a/app/lib/.server/llm/stream-text.ts +++ b/app/lib/.server/llm/stream-text.ts @@ -1,6 +1,6 @@ -import { streamText as _streamText, convertToCoreMessages } from 'ai'; -import { getAPIKey } from '~/lib/.server/llm/api-key'; -import { getAnthropicModel } from '~/lib/.server/llm/model'; +import { streamText as _streamText, type CoreMessage } from 'ai'; +import { getMistralAPIKey, getGroqAPIKey } from '~/lib/.server/llm/api-key'; +import { getDefaultModel } from '~/lib/.server/llm/model'; import { MAX_TOKENS } from './constants'; import { getSystemPrompt } from './prompts'; @@ -9,6 +9,7 @@ interface ToolResult { toolName: Name; args: Args; result: Result; + state: 'result'; } interface Message { @@ -19,17 +20,24 @@ interface Message { export type Messages = Message[]; -export type StreamingOptions = Omit[0], 'model'>; +export type StreamingOptions = Omit[0], 'model' | 'messages'>; -export function streamText(messages: Messages, env: Env, options?: StreamingOptions) { +function convertToCoreMessages(messages: Messages): CoreMessage[] { + return messages.map(message => ({ + role: message.role, + content: message.content, + })); +} + +export function streamText(messages: Messages, options?: StreamingOptions) { + const mistralApiKey = getMistralAPIKey(); + const groqApiKey = getGroqAPIKey(); + return _streamText({ - model: getAnthropicModel(getAPIKey(env)), + model: getDefaultModel(mistralApiKey, groqApiKey), system: getSystemPrompt(), maxTokens: MAX_TOKENS, - headers: { - 'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15', - }, messages: convertToCoreMessages(messages), ...options, - }); + } as any); // Type assertion to handle version compatibility } diff --git a/app/lib/persistence/db.ts b/app/lib/persistence/db.ts index 7a952e3441..defe588ae5 100644 --- a/app/lib/persistence/db.ts +++ b/app/lib/persistence/db.ts @@ -7,7 +7,7 @@ const logger = createScopedLogger('ChatHistory'); // this is used at the top level and never rejects export async function openDatabase(): Promise { return new Promise((resolve) => { - const request = indexedDB.open('boltHistory', 1); + const request = indexedDB.open('imoogleHistory', 1); request.onupgradeneeded = (event: IDBVersionChangeEvent) => { const db = (event.target as IDBOpenDBRequest).result; diff --git a/app/lib/runtime/action-runner.ts b/app/lib/runtime/action-runner.ts index e2ea6a2264..979f1ef3e5 100644 --- a/app/lib/runtime/action-runner.ts +++ b/app/lib/runtime/action-runner.ts @@ -1,7 +1,7 @@ import { WebContainer } from '@webcontainer/api'; import { map, type MapStore } from 'nanostores'; import * as nodePath from 'node:path'; -import type { BoltAction } from '~/types/actions'; +import type { ImoogleAction } from '~/types/actions'; import { createScopedLogger } from '~/utils/logger'; import { unreachable } from '~/utils/unreachable'; import type { ActionCallbackData } from './message-parser'; @@ -10,14 +10,14 @@ const logger = createScopedLogger('ActionRunner'); export type ActionStatus = 'pending' | 'running' | 'complete' | 'aborted' | 'failed'; -export type BaseActionState = BoltAction & { +export type BaseActionState = ImoogleAction & { status: Exclude; abort: () => void; executed: boolean; abortSignal: AbortSignal; }; -export type FailedActionState = BoltAction & +export type FailedActionState = ImoogleAction & Omit & { status: Extract; error: string; diff --git a/app/lib/runtime/message-parser.ts b/app/lib/runtime/message-parser.ts index 317f81dffb..37db9a341b 100644 --- a/app/lib/runtime/message-parser.ts +++ b/app/lib/runtime/message-parser.ts @@ -1,16 +1,16 @@ -import type { ActionType, BoltAction, BoltActionData, FileAction, ShellAction } from '~/types/actions'; -import type { BoltArtifactData } from '~/types/artifact'; +import type { ActionType, ImoogleAction, ImoogleActionData, FileAction, ShellAction } from '~/types/actions'; +import type { ImoogleArtifactData } from '~/types/artifact'; import { createScopedLogger } from '~/utils/logger'; import { unreachable } from '~/utils/unreachable'; -const ARTIFACT_TAG_OPEN = ' void; @@ -46,8 +46,8 @@ interface MessageState { position: number; insideArtifact: boolean; insideAction: boolean; - currentArtifact?: BoltArtifactData; - currentAction: BoltActionData; + currentArtifact?: ImoogleArtifactData; + currentAction: ImoogleActionData; actionId: number; } @@ -110,7 +110,7 @@ export class StreamingMessageParser { */ actionId: String(state.actionId - 1), - action: currentAction as BoltAction, + action: currentAction as ImoogleAction, }); state.insideAction = false; @@ -136,7 +136,7 @@ export class StreamingMessageParser { artifactId: currentArtifact.id, messageId, actionId: String(state.actionId++), - action: state.currentAction as BoltAction, + action: state.currentAction as ImoogleAction, }); i = actionEndIndex + 1; @@ -191,7 +191,7 @@ export class StreamingMessageParser { const currentArtifact = { id: artifactId, title: artifactTitle, - } satisfies BoltArtifactData; + } satisfies ImoogleArtifactData; state.currentArtifact = currentArtifact; @@ -271,7 +271,7 @@ export class StreamingMessageParser { const createArtifactElement: ElementFactory = (props) => { const elementProps = [ - 'class="__boltArtifact__"', + 'class="__imoogleArtifact__"', ...Object.entries(props).map(([key, value]) => { return `data-${camelToDashCase(key)}=${JSON.stringify(value)}`; }), diff --git a/app/lib/stores/theme.ts b/app/lib/stores/theme.ts index 4f3e47bd4d..8f7391fb62 100644 --- a/app/lib/stores/theme.ts +++ b/app/lib/stores/theme.ts @@ -2,7 +2,7 @@ import { atom } from 'nanostores'; export type Theme = 'dark' | 'light'; -export const kTheme = 'bolt_theme'; +export const kTheme = 'imoogle_theme'; export function themeIsDark() { return themeStore.get() === 'dark'; diff --git a/app/root.tsx b/app/root.tsx index 31eb387e03..3c91b71629 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -1,5 +1,5 @@ import { useStore } from '@nanostores/react'; -import type { LinksFunction } from '@remix-run/cloudflare'; +import type { LinksFunction } from '@remix-run/node'; import { Links, Meta, Outlet, Scripts, ScrollRestoration } from '@remix-run/react'; import tailwindReset from '@unocss/reset/tailwind-compat.css?url'; import { themeStore } from './lib/stores/theme'; @@ -42,7 +42,7 @@ const inlineThemeCode = stripIndents` setTutorialKitTheme(); function setTutorialKitTheme() { - let theme = localStorage.getItem('bolt_theme'); + let theme = localStorage.getItem('imoogle_theme'); if (!theme) { theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; diff --git a/app/routes/_index.tsx b/app/routes/_index.tsx index 86d73409c9..c735222a2e 100644 --- a/app/routes/_index.tsx +++ b/app/routes/_index.tsx @@ -1,11 +1,11 @@ -import { json, type MetaFunction } from '@remix-run/cloudflare'; +import { json, type MetaFunction } from '@remix-run/node'; import { ClientOnly } from 'remix-utils/client-only'; import { BaseChat } from '~/components/chat/BaseChat'; import { Chat } from '~/components/chat/Chat.client'; import { Header } from '~/components/header/Header'; export const meta: MetaFunction = () => { - return [{ title: 'Bolt' }, { name: 'description', content: 'Talk with Bolt, an AI assistant from StackBlitz' }]; + return [{ title: 'Imoogle Build' }, { name: 'description', content: 'Talk with Imoogle Build, an AI-powered web development assistant' }]; }; export const loader = () => json({}); diff --git a/app/routes/api.chat.ts b/app/routes/api.chat.ts index b685ac853a..d8d4a71125 100644 --- a/app/routes/api.chat.ts +++ b/app/routes/api.chat.ts @@ -1,4 +1,4 @@ -import { type ActionFunctionArgs } from '@remix-run/cloudflare'; +import { type ActionFunctionArgs } from '@remix-run/node'; import { MAX_RESPONSE_SEGMENTS, MAX_TOKENS } from '~/lib/.server/llm/constants'; import { CONTINUE_PROMPT } from '~/lib/.server/llm/prompts'; import { streamText, type Messages, type StreamingOptions } from '~/lib/.server/llm/stream-text'; @@ -8,8 +8,8 @@ export async function action(args: ActionFunctionArgs) { return chatAction(args); } -async function chatAction({ context, request }: ActionFunctionArgs) { - const { messages } = await request.json<{ messages: Messages }>(); +async function chatAction({ request }: ActionFunctionArgs) { + const { messages } = (await request.json()) as { messages: Messages }; const stream = new SwitchableStream(); @@ -32,13 +32,13 @@ async function chatAction({ context, request }: ActionFunctionArgs) { messages.push({ role: 'assistant', content }); messages.push({ role: 'user', content: CONTINUE_PROMPT }); - const result = await streamText(messages, context.cloudflare.env, options); + const result = await streamText(messages, options); return stream.switchSource(result.toAIStream()); }, }; - const result = await streamText(messages, context.cloudflare.env, options); + const result = await streamText(messages, options); stream.switchSource(result.toAIStream()); @@ -49,7 +49,7 @@ async function chatAction({ context, request }: ActionFunctionArgs) { }, }); } catch (error) { - console.log(error); + console.error(error); throw new Response(null, { status: 500, diff --git a/app/routes/api.enhancer.ts b/app/routes/api.enhancer.ts index 5c8175ca30..039311aacf 100644 --- a/app/routes/api.enhancer.ts +++ b/app/routes/api.enhancer.ts @@ -1,4 +1,4 @@ -import { type ActionFunctionArgs } from '@remix-run/cloudflare'; +import { type ActionFunctionArgs } from '@remix-run/node'; import { StreamingTextResponse, parseStreamPart } from 'ai'; import { streamText } from '~/lib/.server/llm/stream-text'; import { stripIndents } from '~/utils/stripIndent'; @@ -10,15 +10,14 @@ export async function action(args: ActionFunctionArgs) { return enhancerAction(args); } -async function enhancerAction({ context, request }: ActionFunctionArgs) { - const { message } = await request.json<{ message: string }>(); +async function enhancerAction({ request }: ActionFunctionArgs) { + const { message } = (await request.json()) as { message: string }; try { - const result = await streamText( - [ - { - role: 'user', - content: stripIndents` + const result = await streamText([ + { + role: 'user', + content: stripIndents` I want you to improve the user prompt that is wrapped in \`\` tags. IMPORTANT: Only respond with the improved prompt and nothing else! @@ -27,10 +26,8 @@ async function enhancerAction({ context, request }: ActionFunctionArgs) { ${message} `, - }, - ], - context.cloudflare.env, - ); + }, + ]); const transformStream = new TransformStream({ transform(chunk, controller) { @@ -50,7 +47,7 @@ async function enhancerAction({ context, request }: ActionFunctionArgs) { return new StreamingTextResponse(transformedStream); } catch (error) { - console.log(error); + console.error(error); throw new Response(null, { status: 500, diff --git a/app/routes/chat.$id.tsx b/app/routes/chat.$id.tsx index 689ab7a2ed..6f8a231c14 100644 --- a/app/routes/chat.$id.tsx +++ b/app/routes/chat.$id.tsx @@ -1,4 +1,4 @@ -import { json, type LoaderFunctionArgs } from '@remix-run/cloudflare'; +import { json, type LoaderFunctionArgs } from '@remix-run/node'; import { default as IndexRoute } from './_index'; export async function loader(args: LoaderFunctionArgs) { diff --git a/app/styles/components/code.scss b/app/styles/components/code.scss index dd59aa283a..5233230a2e 100644 --- a/app/styles/components/code.scss +++ b/app/styles/components/code.scss @@ -1,9 +1,9 @@ .actions .shiki { - background-color: var(--bolt-elements-actions-code-background) !important; + background-color: var(--imoogle-elements-actions-code-background) !important; } .shiki { &:not(:has(.actions), .actions *) { - background-color: var(--bolt-elements-messages-code-background) !important; + background-color: var(--imoogle-elements-messages-code-background) !important; } } diff --git a/app/styles/components/editor.scss b/app/styles/components/editor.scss index 84c12368a2..b6e97d5842 100644 --- a/app/styles/components/editor.scss +++ b/app/styles/components/editor.scss @@ -1,135 +1,135 @@ :root { - --cm-backgroundColor: var(--bolt-elements-editor-backgroundColor, var(--bolt-elements-bg-depth-1)); - --cm-textColor: var(--bolt-elements-editor-textColor, var(--bolt-elements-textPrimary)); + --cm-backgroundColor: var(--imoogle-elements-editor-backgroundColor, var(--imoogle-elements-bg-depth-1)); + --cm-textColor: var(--imoogle-elements-editor-textColor, var(--imoogle-elements-textPrimary)); /* Gutter */ - --cm-gutter-backgroundColor: var(--bolt-elements-editor-gutter-backgroundColor, var(--cm-backgroundColor)); - --cm-gutter-textColor: var(--bolt-elements-editor-gutter-textColor, var(--bolt-elements-textSecondary)); - --cm-gutter-activeLineTextColor: var(--bolt-elements-editor-gutter-activeLineTextColor, var(--cm-gutter-textColor)); + --cm-gutter-backgroundColor: var(--imoogle-elements-editor-gutter-backgroundColor, var(--cm-backgroundColor)); + --cm-gutter-textColor: var(--imoogle-elements-editor-gutter-textColor, var(--imoogle-elements-textSecondary)); + --cm-gutter-activeLineTextColor: var(--imoogle-elements-editor-gutter-activeLineTextColor, var(--cm-gutter-textColor)); /* Fold Gutter */ - --cm-foldGutter-textColor: var(--bolt-elements-editor-foldGutter-textColor, var(--cm-gutter-textColor)); - --cm-foldGutter-textColorHover: var(--bolt-elements-editor-foldGutter-textColorHover, var(--cm-gutter-textColor)); + --cm-foldGutter-textColor: var(--imoogle-elements-editor-foldGutter-textColor, var(--cm-gutter-textColor)); + --cm-foldGutter-textColorHover: var(--imoogle-elements-editor-foldGutter-textColorHover, var(--cm-gutter-textColor)); /* Active Line */ - --cm-activeLineBackgroundColor: var(--bolt-elements-editor-activeLineBackgroundColor, rgb(224 231 235 / 30%)); + --cm-activeLineBackgroundColor: var(--imoogle-elements-editor-activeLineBackgroundColor, rgb(224 231 235 / 30%)); /* Cursor */ --cm-cursor-width: 2px; - --cm-cursor-backgroundColor: var(--bolt-elements-editor-cursorColor, var(--bolt-elements-textSecondary)); + --cm-cursor-backgroundColor: var(--imoogle-elements-editor-cursorColor, var(--imoogle-elements-textSecondary)); /* Matching Brackets */ - --cm-matching-bracket: var(--bolt-elements-editor-matchingBracketBackgroundColor, rgb(50 140 130 / 0.3)); + --cm-matching-bracket: var(--imoogle-elements-editor-matchingBracketBackgroundColor, rgb(50 140 130 / 0.3)); /* Selection */ - --cm-selection-backgroundColorFocused: var(--bolt-elements-editor-selection-backgroundColor, #42b4ff); - --cm-selection-backgroundOpacityFocused: var(--bolt-elements-editor-selection-backgroundOpacity, 0.3); - --cm-selection-backgroundColorBlured: var(--bolt-elements-editor-selection-inactiveBackgroundColor, #c9e9ff); - --cm-selection-backgroundOpacityBlured: var(--bolt-elements-editor-selection-inactiveBackgroundOpacity, 0.3); + --cm-selection-backgroundColorFocused: var(--imoogle-elements-editor-selection-backgroundColor, #42b4ff); + --cm-selection-backgroundOpacityFocused: var(--imoogle-elements-editor-selection-backgroundOpacity, 0.3); + --cm-selection-backgroundColorBlured: var(--imoogle-elements-editor-selection-inactiveBackgroundColor, #c9e9ff); + --cm-selection-backgroundOpacityBlured: var(--imoogle-elements-editor-selection-inactiveBackgroundOpacity, 0.3); /* Panels */ - --cm-panels-borderColor: var(--bolt-elements-editor-panels-borderColor, var(--bolt-elements-borderColor)); + --cm-panels-borderColor: var(--imoogle-elements-editor-panels-borderColor, var(--imoogle-elements-borderColor)); /* Search */ - --cm-search-backgroundColor: var(--bolt-elements-editor-search-backgroundColor, var(--cm-backgroundColor)); - --cm-search-textColor: var(--bolt-elements-editor-search-textColor, var(--bolt-elements-textSecondary)); - --cm-search-closeButton-backgroundColor: var(--bolt-elements-editor-search-closeButton-backgroundColor, transparent); + --cm-search-backgroundColor: var(--imoogle-elements-editor-search-backgroundColor, var(--cm-backgroundColor)); + --cm-search-textColor: var(--imoogle-elements-editor-search-textColor, var(--imoogle-elements-textSecondary)); + --cm-search-closeButton-backgroundColor: var(--imoogle-elements-editor-search-closeButton-backgroundColor, transparent); --cm-search-closeButton-backgroundColorHover: var( - --bolt-elements-editor-search-closeButton-backgroundColorHover, - var(--bolt-elements-item-backgroundActive) + --imoogle-elements-editor-search-closeButton-backgroundColorHover, + var(--imoogle-elements-item-backgroundActive) ); --cm-search-closeButton-textColor: var( - --bolt-elements-editor-search-closeButton-textColor, - var(--bolt-elements-item-contentDefault) + --imoogle-elements-editor-search-closeButton-textColor, + var(--imoogle-elements-item-contentDefault) ); --cm-search-closeButton-textColorHover: var( - --bolt-elements-editor-search-closeButton-textColorHover, - var(--bolt-elements-item-contentActive) + --imoogle-elements-editor-search-closeButton-textColorHover, + var(--imoogle-elements-item-contentActive) ); --cm-search-button-backgroundColor: var( - --bolt-elements-editor-search-button-backgroundColor, - var(--bolt-elements-item-backgroundDefault) + --imoogle-elements-editor-search-button-backgroundColor, + var(--imoogle-elements-item-backgroundDefault) ); --cm-search-button-backgroundColorHover: var( - --bolt-elements-editor-search-button-backgroundColorHover, - var(--bolt-elements-item-backgroundActive) + --imoogle-elements-editor-search-button-backgroundColorHover, + var(--imoogle-elements-item-backgroundActive) ); - --cm-search-button-textColor: var(--bolt-elements-editor-search-button-textColor, var(--bolt-elements-textSecondary)); + --cm-search-button-textColor: var(--imoogle-elements-editor-search-button-textColor, var(--imoogle-elements-textSecondary)); --cm-search-button-textColorHover: var( - --bolt-elements-editor-search-button-textColorHover, - var(--bolt-elements-textPrimary) + --imoogle-elements-editor-search-button-textColorHover, + var(--imoogle-elements-textPrimary) ); - --cm-search-button-borderColor: var(--bolt-elements-editor-search-button-borderColor, transparent); - --cm-search-button-borderColorHover: var(--bolt-elements-editor-search-button-borderColorHover, transparent); + --cm-search-button-borderColor: var(--imoogle-elements-editor-search-button-borderColor, transparent); + --cm-search-button-borderColorHover: var(--imoogle-elements-editor-search-button-borderColorHover, transparent); --cm-search-button-borderColorFocused: var( - --bolt-elements-editor-search-button-borderColorFocused, - var(--bolt-elements-borderColorActive) + --imoogle-elements-editor-search-button-borderColorFocused, + var(--imoogle-elements-borderColorActive) ); - --cm-search-input-backgroundColor: var(--bolt-elements-editor-search-input-backgroundColor, transparent); - --cm-search-input-textColor: var(--bolt-elements-editor-search-input-textColor, var(--bolt-elements-textPrimary)); - --cm-search-input-borderColor: var(--bolt-elements-editor-search-input-borderColor, var(--bolt-elements-borderColor)); + --cm-search-input-backgroundColor: var(--imoogle-elements-editor-search-input-backgroundColor, transparent); + --cm-search-input-textColor: var(--imoogle-elements-editor-search-input-textColor, var(--imoogle-elements-textPrimary)); + --cm-search-input-borderColor: var(--imoogle-elements-editor-search-input-borderColor, var(--imoogle-elements-borderColor)); --cm-search-input-borderColorFocused: var( - --bolt-elements-editor-search-input-borderColorFocused, - var(--bolt-elements-borderColorActive) + --imoogle-elements-editor-search-input-borderColorFocused, + var(--imoogle-elements-borderColorActive) ); /* Tooltip */ - --cm-tooltip-backgroundColor: var(--bolt-elements-editor-tooltip-backgroundColor, var(--cm-backgroundColor)); - --cm-tooltip-textColor: var(--bolt-elements-editor-tooltip-textColor, var(--bolt-elements-textPrimary)); + --cm-tooltip-backgroundColor: var(--imoogle-elements-editor-tooltip-backgroundColor, var(--cm-backgroundColor)); + --cm-tooltip-textColor: var(--imoogle-elements-editor-tooltip-textColor, var(--imoogle-elements-textPrimary)); --cm-tooltip-backgroundColorSelected: var( - --bolt-elements-editor-tooltip-backgroundColorSelected, + --imoogle-elements-editor-tooltip-backgroundColorSelected, theme('colors.alpha.accent.30') ); --cm-tooltip-textColorSelected: var( - --bolt-elements-editor-tooltip-textColorSelected, - var(--bolt-elements-textPrimary) + --imoogle-elements-editor-tooltip-textColorSelected, + var(--imoogle-elements-textPrimary) ); - --cm-tooltip-borderColor: var(--bolt-elements-editor-tooltip-borderColor, var(--bolt-elements-borderColor)); + --cm-tooltip-borderColor: var(--imoogle-elements-editor-tooltip-borderColor, var(--imoogle-elements-borderColor)); - --cm-searchMatch-backgroundColor: var(--bolt-elements-editor-searchMatch-backgroundColor, rgba(234, 92, 0, 0.33)); + --cm-searchMatch-backgroundColor: var(--imoogle-elements-editor-searchMatch-backgroundColor, rgba(234, 92, 0, 0.33)); } html[data-theme='light'] { - --bolt-elements-editor-gutter-textColor: #237893; - --bolt-elements-editor-gutter-activeLineTextColor: var(--bolt-elements-textPrimary); - --bolt-elements-editor-foldGutter-textColorHover: var(--bolt-elements-textPrimary); - --bolt-elements-editor-activeLineBackgroundColor: rgb(50 53 63 / 5%); - --bolt-elements-editor-tooltip-backgroundColorSelected: theme('colors.alpha.accent.20'); - --bolt-elements-editor-search-button-backgroundColor: theme('colors.gray.100'); - --bolt-elements-editor-search-button-backgroundColorHover: theme('colors.alpha.gray.10'); + --imoogle-elements-editor-gutter-textColor: #237893; + --imoogle-elements-editor-gutter-activeLineTextColor: var(--imoogle-elements-textPrimary); + --imoogle-elements-editor-foldGutter-textColorHover: var(--imoogle-elements-textPrimary); + --imoogle-elements-editor-activeLineBackgroundColor: rgb(50 53 63 / 5%); + --imoogle-elements-editor-tooltip-backgroundColorSelected: theme('colors.alpha.accent.20'); + --imoogle-elements-editor-search-button-backgroundColor: theme('colors.gray.100'); + --imoogle-elements-editor-search-button-backgroundColorHover: theme('colors.alpha.gray.10'); } html[data-theme='dark'] { - --cm-backgroundColor: var(--bolt-elements-bg-depth-2); - --bolt-elements-editor-gutter-textColor: var(--bolt-elements-textTertiary); - --bolt-elements-editor-gutter-activeLineTextColor: var(--bolt-elements-textSecondary); - --bolt-elements-editor-selection-inactiveBackgroundOpacity: 0.3; - --bolt-elements-editor-activeLineBackgroundColor: rgb(50 53 63 / 50%); - --bolt-elements-editor-foldGutter-textColorHover: var(--bolt-elements-textPrimary); - --bolt-elements-editor-matchingBracketBackgroundColor: rgba(66, 180, 255, 0.3); - --bolt-elements-editor-search-button-backgroundColor: theme('colors.gray.800'); - --bolt-elements-editor-search-button-backgroundColorHover: theme('colors.alpha.white.10'); + --cm-backgroundColor: var(--imoogle-elements-bg-depth-2); + --imoogle-elements-editor-gutter-textColor: var(--imoogle-elements-textTertiary); + --imoogle-elements-editor-gutter-activeLineTextColor: var(--imoogle-elements-textSecondary); + --imoogle-elements-editor-selection-inactiveBackgroundOpacity: 0.3; + --imoogle-elements-editor-activeLineBackgroundColor: rgb(50 53 63 / 50%); + --imoogle-elements-editor-foldGutter-textColorHover: var(--imoogle-elements-textPrimary); + --imoogle-elements-editor-matchingBracketBackgroundColor: rgba(66, 180, 255, 0.3); + --imoogle-elements-editor-search-button-backgroundColor: theme('colors.gray.800'); + --imoogle-elements-editor-search-button-backgroundColorHover: theme('colors.alpha.white.10'); } diff --git a/app/styles/components/toast.scss b/app/styles/components/toast.scss index 3ebc97e49b..7ea585817f 100644 --- a/app/styles/components/toast.scss +++ b/app/styles/components/toast.scss @@ -1,17 +1,17 @@ .Toastify__toast { --at-apply: shadow-md; - background-color: var(--bolt-elements-bg-depth-2); - color: var(--bolt-elements-textPrimary); - border: 1px solid var(--bolt-elements-borderColor); + background-color: var(--imoogle-elements-bg-depth-2); + color: var(--imoogle-elements-textPrimary); + border: 1px solid var(--imoogle-elements-borderColor); } .Toastify__close-button { - color: var(--bolt-elements-item-contentDefault); + color: var(--imoogle-elements-item-contentDefault); opacity: 1; transition: none; &:hover { - color: var(--bolt-elements-item-contentActive); + color: var(--imoogle-elements-item-contentActive); } } diff --git a/app/styles/variables.scss b/app/styles/variables.scss index 38967b1171..8b64242acc 100644 --- a/app/styles/variables.scss +++ b/app/styles/variables.scss @@ -1,213 +1,213 @@ /* Color Tokens Light Theme */ :root, :root[data-theme='light'] { - --bolt-elements-borderColor: theme('colors.alpha.gray.10'); - --bolt-elements-borderColorActive: theme('colors.accent.600'); - - --bolt-elements-bg-depth-1: theme('colors.white'); - --bolt-elements-bg-depth-2: theme('colors.gray.50'); - --bolt-elements-bg-depth-3: theme('colors.gray.200'); - --bolt-elements-bg-depth-4: theme('colors.alpha.gray.5'); - - --bolt-elements-textPrimary: theme('colors.gray.950'); - --bolt-elements-textSecondary: theme('colors.gray.600'); - --bolt-elements-textTertiary: theme('colors.gray.500'); - - --bolt-elements-code-background: theme('colors.gray.100'); - --bolt-elements-code-text: theme('colors.gray.950'); - - --bolt-elements-button-primary-background: theme('colors.alpha.accent.10'); - --bolt-elements-button-primary-backgroundHover: theme('colors.alpha.accent.20'); - --bolt-elements-button-primary-text: theme('colors.accent.500'); - - --bolt-elements-button-secondary-background: theme('colors.alpha.gray.5'); - --bolt-elements-button-secondary-backgroundHover: theme('colors.alpha.gray.10'); - --bolt-elements-button-secondary-text: theme('colors.gray.950'); - - --bolt-elements-button-danger-background: theme('colors.alpha.red.10'); - --bolt-elements-button-danger-backgroundHover: theme('colors.alpha.red.20'); - --bolt-elements-button-danger-text: theme('colors.red.500'); - - --bolt-elements-item-contentDefault: theme('colors.alpha.gray.50'); - --bolt-elements-item-contentActive: theme('colors.gray.950'); - --bolt-elements-item-contentAccent: theme('colors.accent.700'); - --bolt-elements-item-contentDanger: theme('colors.red.500'); - --bolt-elements-item-backgroundDefault: rgba(0, 0, 0, 0); - --bolt-elements-item-backgroundActive: theme('colors.alpha.gray.5'); - --bolt-elements-item-backgroundAccent: theme('colors.alpha.accent.10'); - --bolt-elements-item-backgroundDanger: theme('colors.alpha.red.10'); - - --bolt-elements-loader-background: theme('colors.alpha.gray.10'); - --bolt-elements-loader-progress: theme('colors.accent.500'); - - --bolt-elements-artifacts-background: theme('colors.white'); - --bolt-elements-artifacts-backgroundHover: theme('colors.alpha.gray.2'); - --bolt-elements-artifacts-borderColor: var(--bolt-elements-borderColor); - --bolt-elements-artifacts-inlineCode-background: theme('colors.gray.100'); - --bolt-elements-artifacts-inlineCode-text: var(--bolt-elements-textPrimary); - - --bolt-elements-actions-background: theme('colors.white'); - --bolt-elements-actions-code-background: theme('colors.gray.800'); - - --bolt-elements-messages-background: theme('colors.gray.100'); - --bolt-elements-messages-linkColor: theme('colors.accent.500'); - --bolt-elements-messages-code-background: theme('colors.gray.800'); - --bolt-elements-messages-inlineCode-background: theme('colors.gray.200'); - --bolt-elements-messages-inlineCode-text: theme('colors.gray.800'); - - --bolt-elements-icon-success: theme('colors.green.500'); - --bolt-elements-icon-error: theme('colors.red.500'); - --bolt-elements-icon-primary: theme('colors.gray.950'); - --bolt-elements-icon-secondary: theme('colors.gray.600'); - --bolt-elements-icon-tertiary: theme('colors.gray.500'); - - --bolt-elements-dividerColor: theme('colors.gray.100'); - - --bolt-elements-prompt-background: theme('colors.alpha.white.80'); - - --bolt-elements-sidebar-dropdownShadow: theme('colors.alpha.gray.10'); - --bolt-elements-sidebar-buttonBackgroundDefault: theme('colors.alpha.accent.10'); - --bolt-elements-sidebar-buttonBackgroundHover: theme('colors.alpha.accent.20'); - --bolt-elements-sidebar-buttonText: theme('colors.accent.700'); - - --bolt-elements-preview-addressBar-background: theme('colors.gray.100'); - --bolt-elements-preview-addressBar-backgroundHover: theme('colors.alpha.gray.5'); - --bolt-elements-preview-addressBar-backgroundActive: theme('colors.white'); - --bolt-elements-preview-addressBar-text: var(--bolt-elements-textSecondary); - --bolt-elements-preview-addressBar-textActive: var(--bolt-elements-textPrimary); - - --bolt-elements-terminals-background: theme('colors.white'); - --bolt-elements-terminals-buttonBackground: var(--bolt-elements-bg-depth-4); - - --bolt-elements-cta-background: theme('colors.gray.100'); - --bolt-elements-cta-text: theme('colors.gray.950'); + --imoogle-elements-borderColor: theme('colors.alpha.gray.10'); + --imoogle-elements-borderColorActive: theme('colors.accent.600'); + + --imoogle-elements-bg-depth-1: theme('colors.white'); + --imoogle-elements-bg-depth-2: theme('colors.gray.50'); + --imoogle-elements-bg-depth-3: theme('colors.gray.200'); + --imoogle-elements-bg-depth-4: theme('colors.alpha.gray.5'); + + --imoogle-elements-textPrimary: theme('colors.gray.950'); + --imoogle-elements-textSecondary: theme('colors.gray.600'); + --imoogle-elements-textTertiary: theme('colors.gray.500'); + + --imoogle-elements-code-background: theme('colors.gray.100'); + --imoogle-elements-code-text: theme('colors.gray.950'); + + --imoogle-elements-button-primary-background: theme('colors.alpha.accent.10'); + --imoogle-elements-button-primary-backgroundHover: theme('colors.alpha.accent.20'); + --imoogle-elements-button-primary-text: theme('colors.accent.500'); + + --imoogle-elements-button-secondary-background: theme('colors.alpha.gray.5'); + --imoogle-elements-button-secondary-backgroundHover: theme('colors.alpha.gray.10'); + --imoogle-elements-button-secondary-text: theme('colors.gray.950'); + + --imoogle-elements-button-danger-background: theme('colors.alpha.red.10'); + --imoogle-elements-button-danger-backgroundHover: theme('colors.alpha.red.20'); + --imoogle-elements-button-danger-text: theme('colors.red.500'); + + --imoogle-elements-item-contentDefault: theme('colors.alpha.gray.50'); + --imoogle-elements-item-contentActive: theme('colors.gray.950'); + --imoogle-elements-item-contentAccent: theme('colors.accent.700'); + --imoogle-elements-item-contentDanger: theme('colors.red.500'); + --imoogle-elements-item-backgroundDefault: rgba(0, 0, 0, 0); + --imoogle-elements-item-backgroundActive: theme('colors.alpha.gray.5'); + --imoogle-elements-item-backgroundAccent: theme('colors.alpha.accent.10'); + --imoogle-elements-item-backgroundDanger: theme('colors.alpha.red.10'); + + --imoogle-elements-loader-background: theme('colors.alpha.gray.10'); + --imoogle-elements-loader-progress: theme('colors.accent.500'); + + --imoogle-elements-artifacts-background: theme('colors.white'); + --imoogle-elements-artifacts-backgroundHover: theme('colors.alpha.gray.2'); + --imoogle-elements-artifacts-borderColor: var(--imoogle-elements-borderColor); + --imoogle-elements-artifacts-inlineCode-background: theme('colors.gray.100'); + --imoogle-elements-artifacts-inlineCode-text: var(--imoogle-elements-textPrimary); + + --imoogle-elements-actions-background: theme('colors.white'); + --imoogle-elements-actions-code-background: theme('colors.gray.800'); + + --imoogle-elements-messages-background: theme('colors.gray.100'); + --imoogle-elements-messages-linkColor: theme('colors.accent.500'); + --imoogle-elements-messages-code-background: theme('colors.gray.800'); + --imoogle-elements-messages-inlineCode-background: theme('colors.gray.200'); + --imoogle-elements-messages-inlineCode-text: theme('colors.gray.800'); + + --imoogle-elements-icon-success: theme('colors.green.500'); + --imoogle-elements-icon-error: theme('colors.red.500'); + --imoogle-elements-icon-primary: theme('colors.gray.950'); + --imoogle-elements-icon-secondary: theme('colors.gray.600'); + --imoogle-elements-icon-tertiary: theme('colors.gray.500'); + + --imoogle-elements-dividerColor: theme('colors.gray.100'); + + --imoogle-elements-prompt-background: theme('colors.alpha.white.80'); + + --imoogle-elements-sidebar-dropdownShadow: theme('colors.alpha.gray.10'); + --imoogle-elements-sidebar-buttonBackgroundDefault: theme('colors.alpha.accent.10'); + --imoogle-elements-sidebar-buttonBackgroundHover: theme('colors.alpha.accent.20'); + --imoogle-elements-sidebar-buttonText: theme('colors.accent.700'); + + --imoogle-elements-preview-addressBar-background: theme('colors.gray.100'); + --imoogle-elements-preview-addressBar-backgroundHover: theme('colors.alpha.gray.5'); + --imoogle-elements-preview-addressBar-backgroundActive: theme('colors.white'); + --imoogle-elements-preview-addressBar-text: var(--imoogle-elements-textSecondary); + --imoogle-elements-preview-addressBar-textActive: var(--imoogle-elements-textPrimary); + + --imoogle-elements-terminals-background: theme('colors.white'); + --imoogle-elements-terminals-buttonBackground: var(--imoogle-elements-bg-depth-4); + + --imoogle-elements-cta-background: theme('colors.gray.100'); + --imoogle-elements-cta-text: theme('colors.gray.950'); /* Terminal Colors */ - --bolt-terminal-background: var(--bolt-elements-terminals-background); - --bolt-terminal-foreground: #333333; - --bolt-terminal-selection-background: #00000040; - --bolt-terminal-black: #000000; - --bolt-terminal-red: #cd3131; - --bolt-terminal-green: #00bc00; - --bolt-terminal-yellow: #949800; - --bolt-terminal-blue: #0451a5; - --bolt-terminal-magenta: #bc05bc; - --bolt-terminal-cyan: #0598bc; - --bolt-terminal-white: #555555; - --bolt-terminal-brightBlack: #686868; - --bolt-terminal-brightRed: #cd3131; - --bolt-terminal-brightGreen: #00bc00; - --bolt-terminal-brightYellow: #949800; - --bolt-terminal-brightBlue: #0451a5; - --bolt-terminal-brightMagenta: #bc05bc; - --bolt-terminal-brightCyan: #0598bc; - --bolt-terminal-brightWhite: #a5a5a5; + --imoogle-terminal-background: var(--imoogle-elements-terminals-background); + --imoogle-terminal-foreground: #333333; + --imoogle-terminal-selection-background: #00000040; + --imoogle-terminal-black: #000000; + --imoogle-terminal-red: #cd3131; + --imoogle-terminal-green: #00bc00; + --imoogle-terminal-yellow: #949800; + --imoogle-terminal-blue: #0451a5; + --imoogle-terminal-magenta: #bc05bc; + --imoogle-terminal-cyan: #0598bc; + --imoogle-terminal-white: #555555; + --imoogle-terminal-brightBlack: #686868; + --imoogle-terminal-brightRed: #cd3131; + --imoogle-terminal-brightGreen: #00bc00; + --imoogle-terminal-brightYellow: #949800; + --imoogle-terminal-brightBlue: #0451a5; + --imoogle-terminal-brightMagenta: #bc05bc; + --imoogle-terminal-brightCyan: #0598bc; + --imoogle-terminal-brightWhite: #a5a5a5; } /* Color Tokens Dark Theme */ :root, :root[data-theme='dark'] { - --bolt-elements-borderColor: theme('colors.alpha.white.10'); - --bolt-elements-borderColorActive: theme('colors.accent.500'); - - --bolt-elements-bg-depth-1: theme('colors.gray.950'); - --bolt-elements-bg-depth-2: theme('colors.gray.900'); - --bolt-elements-bg-depth-3: theme('colors.gray.800'); - --bolt-elements-bg-depth-4: theme('colors.alpha.white.5'); - - --bolt-elements-textPrimary: theme('colors.white'); - --bolt-elements-textSecondary: theme('colors.gray.400'); - --bolt-elements-textTertiary: theme('colors.gray.500'); - - --bolt-elements-code-background: theme('colors.gray.800'); - --bolt-elements-code-text: theme('colors.white'); - - --bolt-elements-button-primary-background: theme('colors.alpha.accent.10'); - --bolt-elements-button-primary-backgroundHover: theme('colors.alpha.accent.20'); - --bolt-elements-button-primary-text: theme('colors.accent.500'); - - --bolt-elements-button-secondary-background: theme('colors.alpha.white.5'); - --bolt-elements-button-secondary-backgroundHover: theme('colors.alpha.white.10'); - --bolt-elements-button-secondary-text: theme('colors.white'); - - --bolt-elements-button-danger-background: theme('colors.alpha.red.10'); - --bolt-elements-button-danger-backgroundHover: theme('colors.alpha.red.20'); - --bolt-elements-button-danger-text: theme('colors.red.500'); - - --bolt-elements-item-contentDefault: theme('colors.alpha.white.50'); - --bolt-elements-item-contentActive: theme('colors.white'); - --bolt-elements-item-contentAccent: theme('colors.accent.500'); - --bolt-elements-item-contentDanger: theme('colors.red.500'); - --bolt-elements-item-backgroundDefault: rgba(255, 255, 255, 0); - --bolt-elements-item-backgroundActive: theme('colors.alpha.white.10'); - --bolt-elements-item-backgroundAccent: theme('colors.alpha.accent.10'); - --bolt-elements-item-backgroundDanger: theme('colors.alpha.red.10'); - - --bolt-elements-loader-background: theme('colors.alpha.gray.10'); - --bolt-elements-loader-progress: theme('colors.accent.500'); - - --bolt-elements-artifacts-background: theme('colors.gray.900'); - --bolt-elements-artifacts-backgroundHover: theme('colors.alpha.white.5'); - --bolt-elements-artifacts-borderColor: var(--bolt-elements-borderColor); - --bolt-elements-artifacts-inlineCode-background: theme('colors.gray.800'); - --bolt-elements-artifacts-inlineCode-text: theme('colors.white'); - - --bolt-elements-actions-background: theme('colors.gray.900'); - --bolt-elements-actions-code-background: theme('colors.gray.800'); - - --bolt-elements-messages-background: theme('colors.gray.800'); - --bolt-elements-messages-linkColor: theme('colors.accent.500'); - --bolt-elements-messages-code-background: theme('colors.gray.900'); - --bolt-elements-messages-inlineCode-background: theme('colors.gray.700'); - --bolt-elements-messages-inlineCode-text: var(--bolt-elements-textPrimary); - - --bolt-elements-icon-success: theme('colors.green.400'); - --bolt-elements-icon-error: theme('colors.red.400'); - --bolt-elements-icon-primary: theme('colors.gray.950'); - --bolt-elements-icon-secondary: theme('colors.gray.600'); - --bolt-elements-icon-tertiary: theme('colors.gray.500'); - - --bolt-elements-dividerColor: theme('colors.gray.100'); - - --bolt-elements-prompt-background: theme('colors.alpha.gray.80'); - - --bolt-elements-sidebar-dropdownShadow: theme('colors.alpha.gray.30'); - --bolt-elements-sidebar-buttonBackgroundDefault: theme('colors.alpha.accent.10'); - --bolt-elements-sidebar-buttonBackgroundHover: theme('colors.alpha.accent.20'); - --bolt-elements-sidebar-buttonText: theme('colors.accent.500'); - - --bolt-elements-preview-addressBar-background: var(--bolt-elements-bg-depth-1); - --bolt-elements-preview-addressBar-backgroundHover: theme('colors.alpha.white.5'); - --bolt-elements-preview-addressBar-backgroundActive: var(--bolt-elements-bg-depth-1); - --bolt-elements-preview-addressBar-text: var(--bolt-elements-textSecondary); - --bolt-elements-preview-addressBar-textActive: var(--bolt-elements-textPrimary); - - --bolt-elements-terminals-background: var(--bolt-elements-bg-depth-1); - --bolt-elements-terminals-buttonBackground: var(--bolt-elements-bg-depth-3); - - --bolt-elements-cta-background: theme('colors.alpha.white.10'); - --bolt-elements-cta-text: theme('colors.white'); + --imoogle-elements-borderColor: theme('colors.alpha.white.10'); + --imoogle-elements-borderColorActive: theme('colors.accent.500'); + + --imoogle-elements-bg-depth-1: theme('colors.gray.950'); + --imoogle-elements-bg-depth-2: theme('colors.gray.900'); + --imoogle-elements-bg-depth-3: theme('colors.gray.800'); + --imoogle-elements-bg-depth-4: theme('colors.alpha.white.5'); + + --imoogle-elements-textPrimary: theme('colors.white'); + --imoogle-elements-textSecondary: theme('colors.gray.400'); + --imoogle-elements-textTertiary: theme('colors.gray.500'); + + --imoogle-elements-code-background: theme('colors.gray.800'); + --imoogle-elements-code-text: theme('colors.white'); + + --imoogle-elements-button-primary-background: theme('colors.alpha.accent.10'); + --imoogle-elements-button-primary-backgroundHover: theme('colors.alpha.accent.20'); + --imoogle-elements-button-primary-text: theme('colors.accent.500'); + + --imoogle-elements-button-secondary-background: theme('colors.alpha.white.5'); + --imoogle-elements-button-secondary-backgroundHover: theme('colors.alpha.white.10'); + --imoogle-elements-button-secondary-text: theme('colors.white'); + + --imoogle-elements-button-danger-background: theme('colors.alpha.red.10'); + --imoogle-elements-button-danger-backgroundHover: theme('colors.alpha.red.20'); + --imoogle-elements-button-danger-text: theme('colors.red.500'); + + --imoogle-elements-item-contentDefault: theme('colors.alpha.white.50'); + --imoogle-elements-item-contentActive: theme('colors.white'); + --imoogle-elements-item-contentAccent: theme('colors.accent.500'); + --imoogle-elements-item-contentDanger: theme('colors.red.500'); + --imoogle-elements-item-backgroundDefault: rgba(255, 255, 255, 0); + --imoogle-elements-item-backgroundActive: theme('colors.alpha.white.10'); + --imoogle-elements-item-backgroundAccent: theme('colors.alpha.accent.10'); + --imoogle-elements-item-backgroundDanger: theme('colors.alpha.red.10'); + + --imoogle-elements-loader-background: theme('colors.alpha.gray.10'); + --imoogle-elements-loader-progress: theme('colors.accent.500'); + + --imoogle-elements-artifacts-background: theme('colors.gray.900'); + --imoogle-elements-artifacts-backgroundHover: theme('colors.alpha.white.5'); + --imoogle-elements-artifacts-borderColor: var(--imoogle-elements-borderColor); + --imoogle-elements-artifacts-inlineCode-background: theme('colors.gray.800'); + --imoogle-elements-artifacts-inlineCode-text: theme('colors.white'); + + --imoogle-elements-actions-background: theme('colors.gray.900'); + --imoogle-elements-actions-code-background: theme('colors.gray.800'); + + --imoogle-elements-messages-background: theme('colors.gray.800'); + --imoogle-elements-messages-linkColor: theme('colors.accent.500'); + --imoogle-elements-messages-code-background: theme('colors.gray.900'); + --imoogle-elements-messages-inlineCode-background: theme('colors.gray.700'); + --imoogle-elements-messages-inlineCode-text: var(--imoogle-elements-textPrimary); + + --imoogle-elements-icon-success: theme('colors.green.400'); + --imoogle-elements-icon-error: theme('colors.red.400'); + --imoogle-elements-icon-primary: theme('colors.gray.950'); + --imoogle-elements-icon-secondary: theme('colors.gray.600'); + --imoogle-elements-icon-tertiary: theme('colors.gray.500'); + + --imoogle-elements-dividerColor: theme('colors.gray.100'); + + --imoogle-elements-prompt-background: theme('colors.alpha.gray.80'); + + --imoogle-elements-sidebar-dropdownShadow: theme('colors.alpha.gray.30'); + --imoogle-elements-sidebar-buttonBackgroundDefault: theme('colors.alpha.accent.10'); + --imoogle-elements-sidebar-buttonBackgroundHover: theme('colors.alpha.accent.20'); + --imoogle-elements-sidebar-buttonText: theme('colors.accent.500'); + + --imoogle-elements-preview-addressBar-background: var(--imoogle-elements-bg-depth-1); + --imoogle-elements-preview-addressBar-backgroundHover: theme('colors.alpha.white.5'); + --imoogle-elements-preview-addressBar-backgroundActive: var(--imoogle-elements-bg-depth-1); + --imoogle-elements-preview-addressBar-text: var(--imoogle-elements-textSecondary); + --imoogle-elements-preview-addressBar-textActive: var(--imoogle-elements-textPrimary); + + --imoogle-elements-terminals-background: var(--imoogle-elements-bg-depth-1); + --imoogle-elements-terminals-buttonBackground: var(--imoogle-elements-bg-depth-3); + + --imoogle-elements-cta-background: theme('colors.alpha.white.10'); + --imoogle-elements-cta-text: theme('colors.white'); /* Terminal Colors */ - --bolt-terminal-background: var(--bolt-elements-terminals-background); - --bolt-terminal-foreground: #eff0eb; - --bolt-terminal-selection-background: #97979b33; - --bolt-terminal-black: #000000; - --bolt-terminal-red: #ff5c57; - --bolt-terminal-green: #5af78e; - --bolt-terminal-yellow: #f3f99d; - --bolt-terminal-blue: #57c7ff; - --bolt-terminal-magenta: #ff6ac1; - --bolt-terminal-cyan: #9aedfe; - --bolt-terminal-white: #f1f1f0; - --bolt-terminal-brightBlack: #686868; - --bolt-terminal-brightRed: #ff5c57; - --bolt-terminal-brightGreen: #5af78e; - --bolt-terminal-brightYellow: #f3f99d; - --bolt-terminal-brightBlue: #57c7ff; - --bolt-terminal-brightMagenta: #ff6ac1; - --bolt-terminal-brightCyan: #9aedfe; - --bolt-terminal-brightWhite: #f1f1f0; + --imoogle-terminal-background: var(--imoogle-elements-terminals-background); + --imoogle-terminal-foreground: #eff0eb; + --imoogle-terminal-selection-background: #97979b33; + --imoogle-terminal-black: #000000; + --imoogle-terminal-red: #ff5c57; + --imoogle-terminal-green: #5af78e; + --imoogle-terminal-yellow: #f3f99d; + --imoogle-terminal-blue: #57c7ff; + --imoogle-terminal-magenta: #ff6ac1; + --imoogle-terminal-cyan: #9aedfe; + --imoogle-terminal-white: #f1f1f0; + --imoogle-terminal-brightBlack: #686868; + --imoogle-terminal-brightRed: #ff5c57; + --imoogle-terminal-brightGreen: #5af78e; + --imoogle-terminal-brightYellow: #f3f99d; + --imoogle-terminal-brightBlue: #57c7ff; + --imoogle-terminal-brightMagenta: #ff6ac1; + --imoogle-terminal-brightCyan: #9aedfe; + --imoogle-terminal-brightWhite: #f1f1f0; } /* @@ -224,28 +224,28 @@ --workbench-left: calc(100% - var(--workbench-width)); /* Toasts */ - --toastify-color-progress-success: var(--bolt-elements-icon-success); - --toastify-color-progress-error: var(--bolt-elements-icon-error); + --toastify-color-progress-success: var(--imoogle-elements-icon-success); + --toastify-color-progress-error: var(--imoogle-elements-icon-error); /* Terminal */ - --bolt-elements-terminal-backgroundColor: var(--bolt-terminal-background); - --bolt-elements-terminal-textColor: var(--bolt-terminal-foreground); - --bolt-elements-terminal-cursorColor: var(--bolt-terminal-foreground); - --bolt-elements-terminal-selection-backgroundColor: var(--bolt-terminal-selection-background); - --bolt-elements-terminal-color-black: var(--bolt-terminal-black); - --bolt-elements-terminal-color-red: var(--bolt-terminal-red); - --bolt-elements-terminal-color-green: var(--bolt-terminal-green); - --bolt-elements-terminal-color-yellow: var(--bolt-terminal-yellow); - --bolt-elements-terminal-color-blue: var(--bolt-terminal-blue); - --bolt-elements-terminal-color-magenta: var(--bolt-terminal-magenta); - --bolt-elements-terminal-color-cyan: var(--bolt-terminal-cyan); - --bolt-elements-terminal-color-white: var(--bolt-terminal-white); - --bolt-elements-terminal-color-brightBlack: var(--bolt-terminal-brightBlack); - --bolt-elements-terminal-color-brightRed: var(--bolt-terminal-brightRed); - --bolt-elements-terminal-color-brightGreen: var(--bolt-terminal-brightGreen); - --bolt-elements-terminal-color-brightYellow: var(--bolt-terminal-brightYellow); - --bolt-elements-terminal-color-brightBlue: var(--bolt-terminal-brightBlue); - --bolt-elements-terminal-color-brightMagenta: var(--bolt-terminal-brightMagenta); - --bolt-elements-terminal-color-brightCyan: var(--bolt-terminal-brightCyan); - --bolt-elements-terminal-color-brightWhite: var(--bolt-terminal-brightWhite); + --imoogle-elements-terminal-backgroundColor: var(--imoogle-terminal-background); + --imoogle-elements-terminal-textColor: var(--imoogle-terminal-foreground); + --imoogle-elements-terminal-cursorColor: var(--imoogle-terminal-foreground); + --imoogle-elements-terminal-selection-backgroundColor: var(--imoogle-terminal-selection-background); + --imoogle-elements-terminal-color-black: var(--imoogle-terminal-black); + --imoogle-elements-terminal-color-red: var(--imoogle-terminal-red); + --imoogle-elements-terminal-color-green: var(--imoogle-terminal-green); + --imoogle-elements-terminal-color-yellow: var(--imoogle-terminal-yellow); + --imoogle-elements-terminal-color-blue: var(--imoogle-terminal-blue); + --imoogle-elements-terminal-color-magenta: var(--imoogle-terminal-magenta); + --imoogle-elements-terminal-color-cyan: var(--imoogle-terminal-cyan); + --imoogle-elements-terminal-color-white: var(--imoogle-terminal-white); + --imoogle-elements-terminal-color-brightBlack: var(--imoogle-terminal-brightBlack); + --imoogle-elements-terminal-color-brightRed: var(--imoogle-terminal-brightRed); + --imoogle-elements-terminal-color-brightGreen: var(--imoogle-terminal-brightGreen); + --imoogle-elements-terminal-color-brightYellow: var(--imoogle-terminal-brightYellow); + --imoogle-elements-terminal-color-brightBlue: var(--imoogle-terminal-brightBlue); + --imoogle-elements-terminal-color-brightMagenta: var(--imoogle-terminal-brightMagenta); + --imoogle-elements-terminal-color-brightCyan: var(--imoogle-terminal-brightCyan); + --imoogle-elements-terminal-color-brightWhite: var(--imoogle-terminal-brightWhite); } diff --git a/app/types/actions.ts b/app/types/actions.ts index b81127aa17..3a973d02e9 100644 --- a/app/types/actions.ts +++ b/app/types/actions.ts @@ -13,6 +13,10 @@ export interface ShellAction extends BaseAction { type: 'shell'; } -export type BoltAction = FileAction | ShellAction; +export type ImoogleAction = FileAction | ShellAction; -export type BoltActionData = BoltAction | BaseAction; +export type ImoogleActionData = ImoogleAction | BaseAction; + +// Legacy aliases for backward compatibility +export type BoltAction = ImoogleAction; +export type BoltActionData = ImoogleActionData; diff --git a/app/types/artifact.ts b/app/types/artifact.ts index e35697ae0c..6736172182 100644 --- a/app/types/artifact.ts +++ b/app/types/artifact.ts @@ -1,4 +1,10 @@ -export interface BoltArtifactData { +export interface ImoogleArtifactData { + id: string; + title: string; +} + +// Legacy alias for backward compatibility +export interface BoltArtifactData extends ImoogleArtifactData { id: string; title: string; } diff --git a/app/utils/constants.ts b/app/utils/constants.ts index 842ca5425a..d6b1c0cb32 100644 --- a/app/utils/constants.ts +++ b/app/utils/constants.ts @@ -1,3 +1,3 @@ export const WORK_DIR_NAME = 'project'; -export const WORK_DIR = `/home/${WORK_DIR_NAME}`; -export const MODIFICATIONS_TAG_NAME = 'bolt_file_modifications'; +export const WORK_DIR = '/home/project'; +export const MODIFICATIONS_TAG_NAME = 'imoogle_file_modifications'; diff --git a/app/utils/diff.ts b/app/utils/diff.ts index 66c0e155a7..c5c8e84d4f 100644 --- a/app/utils/diff.ts +++ b/app/utils/diff.ts @@ -81,12 +81,12 @@ export function diffFiles(fileName: string, oldFileContent: string, newFileConte * Example: * * ```html - * + * * * - console.log('Hello, World!'); - * + console.log('Hello, Bolt!'); + * + console.log('Hello, Imoogle Build!'); * - * + * * ``` */ export function fileModificationsToHTML(modifications: FileModifications) { diff --git a/app/utils/markdown.ts b/app/utils/markdown.ts index 4409b85df3..c633d86466 100644 --- a/app/utils/markdown.ts +++ b/app/utils/markdown.ts @@ -61,7 +61,7 @@ const rehypeSanitizeOptions: RehypeSanitizeOptions = { tagNames: allowedHTMLElements, attributes: { ...defaultSchema.attributes, - div: [...(defaultSchema.attributes?.div ?? []), 'data*', ['className', '__boltArtifact__']], + div: [...(defaultSchema.attributes?.div ?? []), 'data*', ['className', '__imoogleArtifact__']], }, strip: [], }; diff --git a/bindings.sh b/bindings.sh deleted file mode 100755 index c8a86ead59..0000000000 --- a/bindings.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -bindings="" - -while IFS= read -r line || [ -n "$line" ]; do - if [[ ! "$line" =~ ^# ]] && [[ -n "$line" ]]; then - name=$(echo "$line" | cut -d '=' -f 1) - value=$(echo "$line" | cut -d '=' -f 2-) - value=$(echo $value | sed 's/^"\(.*\)"$/\1/') - bindings+="--binding ${name}=${value} " - fi -done < .env.local - -bindings=$(echo $bindings | sed 's/[[:space:]]*$//') - -echo $bindings diff --git a/functions/[[path]].ts b/functions/[[path]].ts deleted file mode 100644 index 4f196604d2..0000000000 --- a/functions/[[path]].ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { ServerBuild } from '@remix-run/cloudflare'; -import { createPagesFunctionHandler } from '@remix-run/cloudflare-pages'; - -// @ts-ignore because the server build file is generated by `remix vite:build` -import * as serverBuild from '../build/server'; - -export const onRequest = createPagesFunctionHandler({ - build: serverBuild as unknown as ServerBuild, -}); diff --git a/load-context.ts b/load-context.ts deleted file mode 100644 index fee7ce2a19..0000000000 --- a/load-context.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { type PlatformProxy } from 'wrangler'; - -type Cloudflare = Omit, 'dispose'>; - -declare module '@remix-run/cloudflare' { - interface AppLoadContext { - cloudflare: Cloudflare; - } -} diff --git a/package.json b/package.json index 5583455603..5f6ea5a414 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,28 @@ { - "name": "bolt", - "description": "StackBlitz AI Agent", + "name": "imoogle-build", + "description": "Imoogle Build: AI-Powered Full-Stack Web Development", "private": true, "license": "MIT", "packageManager": "pnpm@9.4.0", "sideEffects": false, "type": "module", "scripts": { - "deploy": "npm run build && wrangler pages deploy", "build": "remix vite:build", "dev": "remix vite:dev", + "start": "remix-serve ./build/server/index.js", "test": "vitest --run", "test:watch": "vitest", "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint .", "lint:fix": "npm run lint -- --fix", - "start": "bindings=$(./bindings.sh) && wrangler pages dev ./build/client $bindings", "typecheck": "tsc", - "typegen": "wrangler types", "preview": "pnpm run build && pnpm run start" }, "engines": { "node": ">=18.18.0" }, "dependencies": { - "@ai-sdk/anthropic": "^0.0.39", + "@ai-sdk/groq": "^1.2.9", + "@ai-sdk/mistral": "^1.2.8", "@codemirror/autocomplete": "^6.17.0", "@codemirror/commands": "^6.6.0", "@codemirror/lang-cpp": "^6.0.2", @@ -45,16 +44,16 @@ "@nanostores/react": "^0.7.2", "@radix-ui/react-dialog": "^1.1.1", "@radix-ui/react-dropdown-menu": "^2.1.1", - "@remix-run/cloudflare": "^2.10.2", - "@remix-run/cloudflare-pages": "^2.10.2", - "@remix-run/react": "^2.10.2", + "@remix-run/node": "^2.16.8", + "@remix-run/react": "^2.16.8", + "@remix-run/serve": "^2.16.8", "@uiw/codemirror-theme-vscode": "^4.23.0", "@unocss/reset": "^0.61.0", "@webcontainer/api": "1.3.0-internal.10", "@xterm/addon-fit": "^0.10.0", "@xterm/addon-web-links": "^0.11.0", "@xterm/xterm": "^5.5.0", - "ai": "^3.3.4", + "ai": "^3.4.33", "date-fns": "^3.6.0", "diff": "^5.2.0", "framer-motion": "^11.2.12", @@ -78,7 +77,6 @@ }, "devDependencies": { "@blitz/eslint-plugin": "0.1.0", - "@cloudflare/workers-types": "^4.20240620.0", "@remix-run/dev": "^2.10.0", "@types/diff": "^5.2.1", "@types/react": "^18.2.20", @@ -95,8 +93,7 @@ "vite-plugin-optimize-css-modules": "^1.1.0", "vite-tsconfig-paths": "^4.3.2", "vitest": "^2.0.1", - "wrangler": "^3.63.2", - "zod": "^3.23.8" + "zod": "^3.25.76" }, "resolutions": { "@typescript-eslint/utils": "^8.0.0-alpha.30" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0896b714b7..09d2d51835 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,9 +11,12 @@ importers: .: dependencies: - '@ai-sdk/anthropic': - specifier: ^0.0.39 - version: 0.0.39(zod@3.23.8) + '@ai-sdk/groq': + specifier: ^1.2.9 + version: 1.2.9(zod@3.25.76) + '@ai-sdk/mistral': + specifier: ^1.2.8 + version: 1.2.8(zod@3.25.76) '@codemirror/autocomplete': specifier: ^6.17.0 version: 6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1) @@ -77,15 +80,15 @@ importers: '@radix-ui/react-dropdown-menu': specifier: ^2.1.1 version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@remix-run/cloudflare': - specifier: ^2.10.2 - version: 2.10.2(@cloudflare/workers-types@4.20240620.0)(typescript@5.5.2) - '@remix-run/cloudflare-pages': - specifier: ^2.10.2 - version: 2.10.2(@cloudflare/workers-types@4.20240620.0)(typescript@5.5.2) + '@remix-run/node': + specifier: ^2.16.8 + version: 2.16.8(typescript@5.5.2) '@remix-run/react': - specifier: ^2.10.2 - version: 2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) + specifier: ^2.16.8 + version: 2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) + '@remix-run/serve': + specifier: ^2.16.8 + version: 2.16.8(typescript@5.5.2) '@uiw/codemirror-theme-vscode': specifier: ^4.23.0 version: 4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4) @@ -105,8 +108,8 @@ importers: specifier: ^5.5.0 version: 5.5.0 ai: - specifier: ^3.3.4 - version: 3.3.4(react@18.3.1)(sswr@2.1.0(svelte@4.2.18))(svelte@4.2.18)(vue@3.4.30(typescript@5.5.2))(zod@3.23.8) + specifier: ^3.4.33 + version: 3.4.33(react@18.3.1)(sswr@2.2.0(svelte@4.2.18))(svelte@4.2.18)(vue@3.4.30(typescript@5.5.2))(zod@3.25.76) date-fns: specifier: ^3.6.0 version: 3.6.0 @@ -157,10 +160,10 @@ importers: version: 4.0.0 remix-island: specifier: ^0.2.0 - version: 0.2.0(@remix-run/react@2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/server-runtime@2.10.2(typescript@5.5.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.2.0(@remix-run/react@2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/server-runtime@2.16.8(typescript@5.5.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remix-utils: specifier: ^7.6.0 - version: 7.6.0(@remix-run/cloudflare@2.10.2(@cloudflare/workers-types@4.20240620.0)(typescript@5.5.2))(@remix-run/node@2.10.2(typescript@5.5.2))(@remix-run/react@2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/router@1.17.1)(react@18.3.1)(zod@3.23.8) + version: 7.6.0(@remix-run/cloudflare@2.10.2(typescript@5.5.2))(@remix-run/node@2.16.8(typescript@5.5.2))(@remix-run/react@2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/router@1.23.0)(react@18.3.1)(zod@3.25.76) shiki: specifier: ^1.9.1 version: 1.9.1 @@ -171,12 +174,9 @@ importers: '@blitz/eslint-plugin': specifier: 0.1.0 version: 0.1.0(@types/eslint@8.56.10)(prettier@3.3.2)(typescript@5.5.2) - '@cloudflare/workers-types': - specifier: ^4.20240620.0 - version: 4.20240620.0 '@remix-run/dev': specifier: ^2.10.0 - version: 2.10.0(@remix-run/react@2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/serve@2.10.0(typescript@5.5.2))(@types/node@20.14.9)(sass@1.77.6)(typescript@5.5.2)(vite@5.3.1(@types/node@20.14.9)(sass@1.77.6))(wrangler@3.63.2(@cloudflare/workers-types@4.20240620.0)) + version: 2.10.0(@remix-run/react@2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/serve@2.16.8(typescript@5.5.2))(@types/node@20.14.9)(sass@1.77.6)(typescript@5.5.2)(vite@5.3.1(@types/node@20.14.9)(sass@1.77.6))(wrangler@3.63.2) '@types/diff': specifier: ^5.2.1 version: 5.2.1 @@ -222,23 +222,26 @@ importers: vitest: specifier: ^2.0.1 version: 2.0.1(@types/node@20.14.9)(sass@1.77.6) - wrangler: - specifier: ^3.63.2 - version: 3.63.2(@cloudflare/workers-types@4.20240620.0) zod: - specifier: ^3.23.8 - version: 3.23.8 + specifier: ^3.25.76 + version: 3.25.76 packages: - '@ai-sdk/anthropic@0.0.39': - resolution: {integrity: sha512-Ouku41O9ebyRi0EUW7pB8+lk4sI74SfJKydzK7FjynhNmCSvi42+U4WPlEjP64NluXUzpkYLvBa6BAd36VY4/g==} + '@ai-sdk/groq@1.2.9': + resolution: {integrity: sha512-7MoDaxm8yWtiRbD1LipYZG0kBl+Xe0sv/EeyxnHnGPZappXdlgtdOgTZVjjXkT3nWP30jjZi9A45zoVrBMb3Xg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + + '@ai-sdk/mistral@1.2.8': + resolution: {integrity: sha512-lv857D9UJqCVxiq2Fcu7mSPTypEHBUqLl1K+lCaP6X/7QAkcaxI36QDONG+tOhGHJOXTsS114u8lrUTaEiGXbg==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/provider-utils@1.0.9': - resolution: {integrity: sha512-yfdanjUiCJbtGoRGXrcrmXn0pTyDfRIeY6ozDG96D66f2wupZaZvAgKptUa3zDYXtUCQQvcNJ+tipBBfQD/UYA==} + '@ai-sdk/provider-utils@1.0.22': + resolution: {integrity: sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -246,15 +249,25 @@ packages: zod: optional: true - '@ai-sdk/provider@0.0.17': - resolution: {integrity: sha512-f9j+P5yYRkqKFHxvWae5FI0j6nqROPCoPnMkpc2hc2vC7vKjqzrxBJucD8rpSaUjqiBnY/QuRJ0QeV717Uz5tg==} + '@ai-sdk/provider-utils@2.2.8': + resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.23.8 + + '@ai-sdk/provider@0.0.26': + resolution: {integrity: sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==} + engines: {node: '>=18'} + + '@ai-sdk/provider@1.1.3': + resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} engines: {node: '>=18'} - '@ai-sdk/react@0.0.40': - resolution: {integrity: sha512-irljzw5m9q2kz3g4Y59fbeHI7o29DFmPTPIKQNK+XrHcvYH1sDuj4rlOnQUQl6vpahnrU7fLO6FzVIYdwZv+0w==} + '@ai-sdk/react@0.0.70': + resolution: {integrity: sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ==} engines: {node: '>=18'} peerDependencies: - react: ^18 || ^19 + react: ^18 || ^19 || ^19.0.0-rc zod: ^3.0.0 peerDependenciesMeta: react: @@ -262,8 +275,8 @@ packages: zod: optional: true - '@ai-sdk/solid@0.0.31': - resolution: {integrity: sha512-VYsrTCuNqAe8DzgPCyCqJl6MNdItnjjGMioxi2Pimns/3qet1bOw2LA0yUe5tTAoSpYaCAjGZZB4x8WC762asA==} + '@ai-sdk/solid@0.0.54': + resolution: {integrity: sha512-96KWTVK+opdFeRubqrgaJXoNiDP89gNxFRWUp0PJOotZW816AbhUf4EnDjBjXTLjXL1n0h8tGSE9sZsRkj9wQQ==} engines: {node: '>=18'} peerDependencies: solid-js: ^1.7.7 @@ -271,17 +284,17 @@ packages: solid-js: optional: true - '@ai-sdk/svelte@0.0.33': - resolution: {integrity: sha512-/QksvqVEv9fcq39nJfu4QqqeXeFX19pqkGUlVXBNhMQ6QQXhYsUasfJodIWy1DBsKDDV6dROJM0fHku5v+hrdw==} + '@ai-sdk/svelte@0.0.57': + resolution: {integrity: sha512-SyF9ItIR9ALP9yDNAD+2/5Vl1IT6kchgyDH8xkmhysfJI6WrvJbtO1wdQ0nylvPLcsPoYu+cAlz1krU4lFHcYw==} engines: {node: '>=18'} peerDependencies: - svelte: ^3.0.0 || ^4.0.0 + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: svelte: optional: true - '@ai-sdk/ui-utils@0.0.28': - resolution: {integrity: sha512-yc+0EgC/Gz36ltoHsiBmuEv7iPjV85ihuj8W1vSqYe3+CblGYHG9h8MC5RdIl51GtrOtnH9aqnDjkX5Qy6Q9KQ==} + '@ai-sdk/ui-utils@0.0.50': + resolution: {integrity: sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -289,8 +302,8 @@ packages: zod: optional: true - '@ai-sdk/vue@0.0.32': - resolution: {integrity: sha512-wEiH6J6VbuGcliA44UkQJM/JuSP1IwuFiovzPQ/bS0Gb/nJKuDQ8K2ru1JvdU7pEQFqmpTm7z+2R0Sduz0eKpA==} + '@ai-sdk/vue@0.0.59': + resolution: {integrity: sha512-+ofYlnqdc8c4F6tM0IKF0+7NagZRAiqBJpGDJ+6EYhDW8FHLUP/JFBgu32SjxSxC6IKFZxEnl68ZoP/Z38EMlw==} engines: {node: '>=18'} peerDependencies: vue: ^3.3.4 @@ -394,10 +407,18 @@ packages: resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.24.7': resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} engines: {node: '>=6.9.0'} @@ -415,6 +436,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-decorators@7.24.7': resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} engines: {node: '>=6.9.0'} @@ -467,6 +493,10 @@ packages: resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.1': + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} + engines: {node: '>=6.9.0'} + '@blitz/eslint-plugin@0.1.0': resolution: {integrity: sha512-mGEAFWCI5AQ4nrePhjp2WzvRen+UWR+SF4MvH70icIBClR08Gm3dT9MRa2jszOpfY00NyIYfm7/1CFZ37GvW4g==} engines: {node: ^18.0.0 || ^20.0.0} @@ -508,9 +538,6 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20240620.0': - resolution: {integrity: sha512-CQD8YS6evRob7LChvIX3gE3zYo0KVgaLDOu1SwNP1BVIS2Sa0b+FC8S1e1hhrNN8/E4chYlVN+FDAgA4KRDUEQ==} - '@codemirror/autocomplete@6.17.0': resolution: {integrity: sha512-fdfj6e6ZxZf8yrkMHUSJJir7OJkHkZKaOZGzLWIYp2PZ3jd+d+UjG8zVPqJF6d3bKxkhvXTPan/UZ1t7Bqm0gA==} peerDependencies: @@ -1071,9 +1098,15 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -1436,16 +1469,6 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@remix-run/cloudflare-pages@2.10.2': - resolution: {integrity: sha512-HaOdGkSMhe4zg1M8KDNNKb7VgBIHGpi0/90aLdYmzvZy+yeR0NOdrQh4P6gAYGCGSzqttuPOEIr4laXtBKI7Yg==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@cloudflare/workers-types': ^4.0.0 - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - '@remix-run/cloudflare@2.10.2': resolution: {integrity: sha512-pYDezNSGKVmkpfuHSAN/x9I7518ohJNsZj/WN8S4Y7tZAD2n202EzAX0pJeg6HpqIcqIgr18WiqVwCbx9UvLAg==} engines: {node: '>=18.0.0'} @@ -1476,11 +1499,11 @@ packages: wrangler: optional: true - '@remix-run/express@2.10.0': - resolution: {integrity: sha512-xmHxumbglfbCVJa9a9dMDtOD408DYH27LAHuGfEAPPSf5sc9WMEFBItNxp3bJZ2W2NDeava+h+7BIeR5wNpgxw==} + '@remix-run/express@2.16.8': + resolution: {integrity: sha512-NNTosiAJ4jZCRDfWSjV+3Fyu7KoHPeEHruLZEPRNDuXO6Nm5EkRvIkMwdfwyJ+ajE5IPotu8MFtPyNtm3sw/gw==} engines: {node: '>=18.0.0'} peerDependencies: - express: ^4.19.2 + express: ^4.20.0 typescript: ^5.1.0 peerDependenciesMeta: typescript: @@ -1495,8 +1518,8 @@ packages: typescript: optional: true - '@remix-run/node@2.10.2': - resolution: {integrity: sha512-Ni4yMQCf6avK2fz91/luuS3wnHzqtbxsdc19es1gAWEnUKfeCwqq5v1R0kzNwrXyh5NYCRhxaegzVH3tGsdYFg==} + '@remix-run/node@2.16.8': + resolution: {integrity: sha512-foeYXU3mdaBJZnbtGbM8mNdHowz2+QnVGDRo7P3zgFkmsccMEflArGZNbkACGKd9xwDguTxxMJ6cuXBC4jIfgQ==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -1504,8 +1527,8 @@ packages: typescript: optional: true - '@remix-run/react@2.10.2': - resolution: {integrity: sha512-0Fx3AYNjfn6Z/0xmIlVC7exmof20M429PwuApWF1H8YXwdkI+cxLfivRzTa1z7vS55tshurqQum98jQQaUDjoA==} + '@remix-run/react@2.16.8': + resolution: {integrity: sha512-JmoBUnEu/nPLkU6NGNIG7rfLM97gPpr1LYRJeV680hChr0/2UpfQQwcRLtHz03w1Gz1i/xONAAVOvRHVcXkRlA==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0.0 @@ -1523,8 +1546,12 @@ packages: resolution: {integrity: sha512-mCOMec4BKd6BRGBZeSnGiIgwsbLGp3yhVqAD8H+PxiRNEHgDpZb8J1TnrSDlg97t0ySKMQJTHCWBCmBpSmkF6Q==} engines: {node: '>=14.0.0'} - '@remix-run/serve@2.10.0': - resolution: {integrity: sha512-JOF2x8HwXo4G5hOqKEUEG7Xm2ZYYL0kZJcWdJVIQxaRN/EmbmJCKGLcW21rZ6VZ/FqpEkSnwmiGFoDkPQ9q6lg==} + '@remix-run/router@1.23.0': + resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} + engines: {node: '>=14.0.0'} + + '@remix-run/serve@2.16.8': + resolution: {integrity: sha512-4exyeXCZoc/Vo8Zc+6Eyao3ONwOyNOK3Yeb0LLkWXd4aeFQ4v59i5fq/j/E+68UnpD/UZQl1Bj0k2hQnGQZhlQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -1546,6 +1573,15 @@ packages: typescript: optional: true + '@remix-run/server-runtime@2.16.8': + resolution: {integrity: sha512-ZwWOam4GAQTx10t+wK09YuYctd2Koz5Xy/klDgUN3lmTXmwbV0tZU0baiXEqZXrvyD+WDZ4b0ADDW9Df3+dpzA==} + engines: {node: '>=18.0.0'} + peerDependencies: + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + '@remix-run/web-blob@3.1.0': resolution: {integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==} @@ -1702,6 +1738,9 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} @@ -1723,8 +1762,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/node-forge@1.3.13': + resolution: {integrity: sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==} '@types/node@20.14.9': resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} @@ -1991,8 +2030,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} acorn@8.12.0: @@ -2000,18 +2039,23 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - ai@3.3.4: - resolution: {integrity: sha512-yb9ONWAnTq77J+O/fLtd+yvcTgasdN79k+U0IhBDJ6ssEc+HZeFldjqkSgr1jtKSc8rLZOu0GiVitwyAtwofNQ==} + ai@3.4.33: + resolution: {integrity: sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ==} engines: {node: '>=18'} peerDependencies: openai: ^4.42.0 - react: ^18 || ^19 + react: ^18 || ^19 || ^19.0.0-rc sswr: ^2.1.0 - svelte: ^3.0.0 || ^4.0.0 + svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 zod: ^3.0.0 peerDependenciesMeta: openai: @@ -2066,8 +2110,9 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -2097,8 +2142,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axobject-query@4.0.0: - resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -2137,6 +2183,10 @@ packages: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -2192,10 +2242,6 @@ packages: builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -2208,10 +2254,18 @@ packages: resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2287,9 +2341,6 @@ packages: 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'} @@ -2328,8 +2379,8 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} concat-map@0.0.1: @@ -2342,6 +2393,10 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} @@ -2366,14 +2421,22 @@ packages: resolution: {integrity: sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==} engines: {node: '>=6.6.0'} - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -2446,6 +2509,15 @@ packages: supports-color: optional: true + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -2535,6 +2607,10 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -2567,6 +2643,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -2581,6 +2661,10 @@ packages: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -2588,6 +2672,10 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + esbuild-plugins-node-modules-polyfill@1.6.4: resolution: {integrity: sha512-x3MCOvZrKDGAfqAYS/pZUUSwiN+XH7x84A+Prup0CZBJKuGfuGkTAC4g01D6JPs/GCM9wzZVfd8bmiy+cP/iXA==} engines: {node: '>=14.0.0'} @@ -2774,6 +2862,10 @@ packages: resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2815,6 +2907,10 @@ packages: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -2900,6 +2996,10 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} @@ -2908,6 +3008,10 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-source@2.0.12: resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} @@ -2957,6 +3061,10 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2990,6 +3098,10 @@ packages: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} @@ -3084,8 +3196,8 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} - immutable@4.3.6: - resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==} + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -3145,6 +3257,10 @@ packages: resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} engines: {node: '>= 0.4'} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -3201,6 +3317,9 @@ packages: is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -3375,6 +3494,9 @@ packages: magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} @@ -3382,6 +3504,10 @@ packages: markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -3476,6 +3602,9 @@ packages: merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -3670,6 +3799,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -3760,8 +3893,8 @@ packages: modern-ahocorasick@1.0.1: resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} - morgan@1.10.0: - resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + morgan@1.10.1: + resolution: {integrity: sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==} engines: {node: '>= 0.8.0'} mri@1.2.0: @@ -3789,8 +3922,8 @@ packages: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -3810,12 +3943,16 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -3868,6 +4005,10 @@ packages: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} engines: {node: '>= 0.4'} @@ -3891,8 +4032,8 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} once@1.4.0: @@ -3985,11 +4126,14 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4182,6 +4326,10 @@ packages: resolution: {integrity: sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==} engines: {node: '>=0.6'} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} @@ -4253,15 +4401,15 @@ packages: react: ^16.14.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 - react-router-dom@6.24.1: - resolution: {integrity: sha512-U19KtXqooqw967Vw0Qcn5cOvrX5Ejo9ORmOtJMzYWtCT4/WOfFLIZGGsVLxcd9UkBO0mSTZtXqhZBsWlHr7+Sg==} + react-router-dom@6.30.0: + resolution: {integrity: sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.24.1: - resolution: {integrity: sha512-PTXFXGK2pyXpHzVo3rR9H7ip4lSPZZc0bHG5CARmj65fTT6qG7sTngmb6lcYu1gf3y/8KxORoy9yn59pGpCnpg==} + react-router@6.30.0: + resolution: {integrity: sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -4389,6 +4537,15 @@ packages: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -4467,13 +4624,24 @@ packages: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4499,10 +4667,26 @@ packages: shiki@1.9.1: resolution: {integrity: sha512-8PDkgb5ja3nfujTjvC4VytL6wGOGCtFAClUb2r3QROevYXxcq+/shVJK5s6gy0HZnjaJgFxd6BpPqpRfqne5rA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -4525,6 +4709,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -4559,10 +4747,10 @@ packages: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - sswr@2.1.0: - resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==} + sswr@2.2.0: + resolution: {integrity: sha512-clTszLPZkmycALTHD1mXGU+mOtA/MIoLgS1KGTTzFNVm9rytQVykgRaP+z1zl572cz0bTqj4rFVoC2N+IGK4Sg==} peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.0 + svelte: ^4.0.0 || ^5.0.0 stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -4662,16 +4850,16 @@ packages: resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==} engines: {node: '>=16'} - swr@2.2.5: - resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} + swr@2.3.4: + resolution: {integrity: sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==} peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 swrev@4.0.0: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} - swrv@1.0.4: - resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} + swrv@1.1.0: + resolution: {integrity: sha512-pjllRDr2s0iTwiE5Isvip51dZGR7GjLH1gCSVyE8bQnbAx6xackXsFdojau+1O5u98yHF5V73HQGOFxKUXO9gQ==} peerDependencies: vue: '>=3.2.26 < 4' @@ -4701,6 +4889,10 @@ packages: resolution: {integrity: sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==} engines: {node: '>=4'} + throttleit@2.1.0: + resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} + engines: {node: '>=18'} + through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -4767,12 +4959,18 @@ packages: tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} turbo-stream@2.2.0: resolution: {integrity: sha512-FKFg7A0To1VU4CH9YmSMON5QphK0BXjSoiC7D9yMh+mEEbXLUP9qJ4hEt1qcjKtzncs1OpcnjZO8NgrlVbZH+g==} + turbo-stream@2.4.1: + resolution: {integrity: sha512-v8kOJXpG3WoTN/+at8vK7erSzo6nW6CIaeOvNOkHQVDajfz1ZVeSxCbc6tOH4hrGZW7VUCV0TOXd8CPzYnYkrw==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4799,8 +4997,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} unconfig@0.3.13: resolution: {integrity: sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==} @@ -4808,14 +5006,18 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} undici@6.19.4: resolution: {integrity: sha512-i3uaEUwNdkRq2qtTRRJb13moW5HWqviu7Vl7oYRYz++uPtGHJj+x7TGjcEuwS5Mt2P4nA0U9dhIX3DdB6JGY0g==} engines: {node: '>=18.17'} + undici@6.21.3: + resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} + engines: {node: '>=18.17'} + unenv-nightly@1.10.0-1717606461.a117952: resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==} @@ -4927,10 +5129,10 @@ packages: '@types/react': optional: true - use-sync-external-store@1.2.2: - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -5146,8 +5348,8 @@ packages: utf-8-validate: optional: true - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5162,8 +5364,8 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - xxhash-wasm@1.0.2: - resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -5180,80 +5382,100 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - youch@3.3.3: - resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} + youch@3.3.4: + resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} - zod-to-json-schema@3.22.5: - resolution: {integrity: sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==} + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} peerDependencies: - zod: ^3.22.4 + zod: ^3.24.1 - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@ai-sdk/anthropic@0.0.39(zod@3.23.8)': + '@ai-sdk/groq@1.2.9(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 1.1.3 + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/mistral@1.2.8(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 0.0.17 - '@ai-sdk/provider-utils': 1.0.9(zod@3.23.8) - zod: 3.23.8 + '@ai-sdk/provider': 1.1.3 + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) + zod: 3.25.76 - '@ai-sdk/provider-utils@1.0.9(zod@3.23.8)': + '@ai-sdk/provider-utils@1.0.22(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 0.0.17 + '@ai-sdk/provider': 0.0.26 eventsource-parser: 1.1.2 - nanoid: 3.3.6 + nanoid: 3.3.11 secure-json-parse: 2.7.0 optionalDependencies: - zod: 3.23.8 + zod: 3.25.76 - '@ai-sdk/provider@0.0.17': + '@ai-sdk/provider-utils@2.2.8(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 1.1.3 + nanoid: 3.3.11 + secure-json-parse: 2.7.0 + zod: 3.25.76 + + '@ai-sdk/provider@0.0.26': dependencies: json-schema: 0.4.0 - '@ai-sdk/react@0.0.40(react@18.3.1)(zod@3.23.8)': + '@ai-sdk/provider@1.1.3': dependencies: - '@ai-sdk/provider-utils': 1.0.9(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.28(zod@3.23.8) - swr: 2.2.5(react@18.3.1) + json-schema: 0.4.0 + + '@ai-sdk/react@0.0.70(react@18.3.1)(zod@3.25.76)': + dependencies: + '@ai-sdk/provider-utils': 1.0.22(zod@3.25.76) + '@ai-sdk/ui-utils': 0.0.50(zod@3.25.76) + swr: 2.3.4(react@18.3.1) + throttleit: 2.1.0 optionalDependencies: react: 18.3.1 - zod: 3.23.8 + zod: 3.25.76 - '@ai-sdk/solid@0.0.31(zod@3.23.8)': + '@ai-sdk/solid@0.0.54(zod@3.25.76)': dependencies: - '@ai-sdk/provider-utils': 1.0.9(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.28(zod@3.23.8) + '@ai-sdk/provider-utils': 1.0.22(zod@3.25.76) + '@ai-sdk/ui-utils': 0.0.50(zod@3.25.76) transitivePeerDependencies: - zod - '@ai-sdk/svelte@0.0.33(svelte@4.2.18)(zod@3.23.8)': + '@ai-sdk/svelte@0.0.57(svelte@4.2.18)(zod@3.25.76)': dependencies: - '@ai-sdk/provider-utils': 1.0.9(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.28(zod@3.23.8) - sswr: 2.1.0(svelte@4.2.18) + '@ai-sdk/provider-utils': 1.0.22(zod@3.25.76) + '@ai-sdk/ui-utils': 0.0.50(zod@3.25.76) + sswr: 2.2.0(svelte@4.2.18) optionalDependencies: svelte: 4.2.18 transitivePeerDependencies: - zod - '@ai-sdk/ui-utils@0.0.28(zod@3.23.8)': + '@ai-sdk/ui-utils@0.0.50(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 0.0.17 - '@ai-sdk/provider-utils': 1.0.9(zod@3.23.8) + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.25.76) + json-schema: 0.4.0 secure-json-parse: 2.7.0 + zod-to-json-schema: 3.24.6(zod@3.25.76) optionalDependencies: - zod: 3.23.8 + zod: 3.25.76 - '@ai-sdk/vue@0.0.32(vue@3.4.30(typescript@5.5.2))(zod@3.23.8)': + '@ai-sdk/vue@0.0.59(vue@3.4.30(typescript@5.5.2))(zod@3.25.76)': dependencies: - '@ai-sdk/provider-utils': 1.0.9(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.28(zod@3.23.8) - swrv: 1.0.4(vue@3.4.30(typescript@5.5.2)) + '@ai-sdk/provider-utils': 1.0.22(zod@3.25.76) + '@ai-sdk/ui-utils': 0.0.50(zod@3.25.76) + swrv: 1.1.0(vue@3.4.30(typescript@5.5.2)) optionalDependencies: vue: 3.4.30(typescript@5.5.2) transitivePeerDependencies: @@ -5405,8 +5627,12 @@ snapshots: '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-option@7.24.7': {} '@babel/helpers@7.24.7': @@ -5425,6 +5651,10 @@ snapshots: dependencies: '@babel/types': 7.24.7 + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.1 + '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -5501,6 +5731,11 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.28.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@blitz/eslint-plugin@0.1.0(@types/eslint@8.56.10)(prettier@3.3.2)(typescript@5.5.2)': dependencies: '@stylistic/eslint-plugin-ts': 2.3.0(eslint@9.5.0)(typescript@5.5.2) @@ -5523,10 +5758,12 @@ snapshots: '@cloudflare/kv-asset-handler@0.1.3': dependencies: mime: 2.6.0 + optional: true '@cloudflare/kv-asset-handler@0.3.4': dependencies: mime: 3.0.0 + optional: true '@cloudflare/workerd-darwin-64@1.20240701.0': optional: true @@ -5543,8 +5780,6 @@ snapshots: '@cloudflare/workerd-windows-64@1.20240701.0': optional: true - '@cloudflare/workers-types@4.20240620.0': {} - '@codemirror/autocomplete@6.17.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)(@lezer/common@1.2.1)': dependencies: '@codemirror/language': 6.10.2 @@ -5670,18 +5905,21 @@ snapshots: '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 + optional: true '@emotion/hash@0.9.1': {} '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': dependencies: esbuild: 0.17.19 + optional: true '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': dependencies: esbuild: 0.17.19 escape-string-regexp: 4.0.0 rollup-plugin-node-polyfills: 0.2.1 + optional: true '@esbuild/aix-ppc64@0.21.5': optional: true @@ -5917,7 +6155,8 @@ snapshots: '@eslint/object-schema@2.1.4': {} - '@fastify/busboy@2.1.1': {} + '@fastify/busboy@2.1.1': + optional: true '@floating-ui/core@1.6.7': dependencies: @@ -5987,15 +6226,23 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.4 + optional: true '@jspm/core@2.0.1': {} @@ -6391,22 +6638,15 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@remix-run/cloudflare-pages@2.10.2(@cloudflare/workers-types@4.20240620.0)(typescript@5.5.2)': - dependencies: - '@cloudflare/workers-types': 4.20240620.0 - '@remix-run/cloudflare': 2.10.2(@cloudflare/workers-types@4.20240620.0)(typescript@5.5.2) - optionalDependencies: - typescript: 5.5.2 - - '@remix-run/cloudflare@2.10.2(@cloudflare/workers-types@4.20240620.0)(typescript@5.5.2)': + '@remix-run/cloudflare@2.10.2(typescript@5.5.2)': dependencies: '@cloudflare/kv-asset-handler': 0.1.3 - '@cloudflare/workers-types': 4.20240620.0 '@remix-run/server-runtime': 2.10.2(typescript@5.5.2) optionalDependencies: typescript: 5.5.2 + optional: true - '@remix-run/dev@2.10.0(@remix-run/react@2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/serve@2.10.0(typescript@5.5.2))(@types/node@20.14.9)(sass@1.77.6)(typescript@5.5.2)(vite@5.3.1(@types/node@20.14.9)(sass@1.77.6))(wrangler@3.63.2(@cloudflare/workers-types@4.20240620.0))': + '@remix-run/dev@2.10.0(@remix-run/react@2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/serve@2.16.8(typescript@5.5.2))(@types/node@20.14.9)(sass@1.77.6)(typescript@5.5.2)(vite@5.3.1(@types/node@20.14.9)(sass@1.77.6))(wrangler@3.63.2)': dependencies: '@babel/core': 7.24.7 '@babel/generator': 7.24.7 @@ -6419,7 +6659,7 @@ snapshots: '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 '@remix-run/node': 2.10.0(typescript@5.5.2) - '@remix-run/react': 2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) + '@remix-run/react': 2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) '@remix-run/router': 1.17.0 '@remix-run/server-runtime': 2.10.0(typescript@5.5.2) '@types/mdx': 2.0.13 @@ -6463,10 +6703,10 @@ snapshots: tsconfig-paths: 4.2.0 ws: 7.5.10 optionalDependencies: - '@remix-run/serve': 2.10.0(typescript@5.5.2) + '@remix-run/serve': 2.16.8(typescript@5.5.2) typescript: 5.5.2 vite: 5.3.1(@types/node@20.14.9)(sass@1.77.6) - wrangler: 3.63.2(@cloudflare/workers-types@4.20240620.0) + wrangler: 3.63.2 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6482,13 +6722,12 @@ snapshots: - ts-node - utf-8-validate - '@remix-run/express@2.10.0(express@4.19.2)(typescript@5.5.2)': + '@remix-run/express@2.16.8(express@4.21.2)(typescript@5.5.2)': dependencies: - '@remix-run/node': 2.10.0(typescript@5.5.2) - express: 4.19.2 + '@remix-run/node': 2.16.8(typescript@5.5.2) + express: 4.21.2 optionalDependencies: typescript: 5.5.2 - optional: true '@remix-run/node@2.10.0(typescript@5.5.2)': dependencies: @@ -6502,49 +6741,50 @@ snapshots: optionalDependencies: typescript: 5.5.2 - '@remix-run/node@2.10.2(typescript@5.5.2)': + '@remix-run/node@2.16.8(typescript@5.5.2)': dependencies: - '@remix-run/server-runtime': 2.10.2(typescript@5.5.2) + '@remix-run/server-runtime': 2.16.8(typescript@5.5.2) '@remix-run/web-fetch': 4.4.2 '@web3-storage/multipart-parser': 1.0.0 - cookie-signature: 1.2.1 + cookie-signature: 1.2.2 source-map-support: 0.5.21 stream-slice: 0.1.2 - undici: 6.19.4 + undici: 6.21.3 optionalDependencies: typescript: 5.5.2 - optional: true - '@remix-run/react@2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2)': + '@remix-run/react@2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2)': dependencies: - '@remix-run/router': 1.17.1 - '@remix-run/server-runtime': 2.10.2(typescript@5.5.2) + '@remix-run/router': 1.23.0 + '@remix-run/server-runtime': 2.16.8(typescript@5.5.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.24.1(react@18.3.1) - react-router-dom: 6.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - turbo-stream: 2.2.0 + react-router: 6.30.0(react@18.3.1) + react-router-dom: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + turbo-stream: 2.4.1 optionalDependencies: typescript: 5.5.2 '@remix-run/router@1.17.0': {} - '@remix-run/router@1.17.1': {} + '@remix-run/router@1.17.1': + optional: true - '@remix-run/serve@2.10.0(typescript@5.5.2)': + '@remix-run/router@1.23.0': {} + + '@remix-run/serve@2.16.8(typescript@5.5.2)': dependencies: - '@remix-run/express': 2.10.0(express@4.19.2)(typescript@5.5.2) - '@remix-run/node': 2.10.0(typescript@5.5.2) + '@remix-run/express': 2.16.8(express@4.21.2)(typescript@5.5.2) + '@remix-run/node': 2.16.8(typescript@5.5.2) chokidar: 3.6.0 - compression: 1.7.4 - express: 4.19.2 + compression: 1.8.1 + express: 4.21.2 get-port: 5.1.1 - morgan: 1.10.0 + morgan: 1.10.1 source-map-support: 0.5.21 transitivePeerDependencies: - supports-color - typescript - optional: true '@remix-run/server-runtime@2.10.0(typescript@5.5.2)': dependencies: @@ -6564,11 +6804,24 @@ snapshots: '@types/cookie': 0.6.0 '@web3-storage/multipart-parser': 1.0.0 cookie: 0.6.0 - set-cookie-parser: 2.6.0 + set-cookie-parser: 2.7.1 source-map: 0.7.4 turbo-stream: 2.2.0 optionalDependencies: typescript: 5.5.2 + optional: true + + '@remix-run/server-runtime@2.16.8(typescript@5.5.2)': + dependencies: + '@remix-run/router': 1.23.0 + '@types/cookie': 0.6.0 + '@web3-storage/multipart-parser': 1.0.0 + cookie: 0.7.2 + set-cookie-parser: 2.6.0 + source-map: 0.7.4 + turbo-stream: 2.4.1 + optionalDependencies: + typescript: 5.5.2 '@remix-run/web-blob@3.1.0': dependencies: @@ -6709,6 +6962,8 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.8': {} + '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.10 @@ -6731,9 +6986,10 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node-forge@1.3.11': + '@types/node-forge@1.3.13': dependencies: '@types/node': 20.14.9 + optional: true '@types/node@20.14.9': dependencies: @@ -7084,11 +7340,11 @@ snapshots: '@vue/compiler-core@3.4.30': dependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.28.0 '@vue/shared': 3.4.30 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.4.30': dependencies: @@ -7097,15 +7353,15 @@ snapshots: '@vue/compiler-sfc@3.4.30': dependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.28.0 '@vue/compiler-core': 3.4.30 '@vue/compiler-dom': 3.4.30 '@vue/compiler-ssr': 3.4.30 '@vue/shared': 3.4.30 estree-walker: 2.0.2 - magic-string: 0.30.10 + magic-string: 0.30.17 postcss: 8.4.38 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-ssr@3.4.30': dependencies: @@ -7166,38 +7422,40 @@ snapshots: dependencies: acorn: 8.12.0 - acorn-walk@8.3.3: + acorn-walk@8.3.4: dependencies: - acorn: 8.12.0 + acorn: 8.15.0 + optional: true acorn@8.12.0: {} + acorn@8.15.0: {} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@3.3.4(react@18.3.1)(sswr@2.1.0(svelte@4.2.18))(svelte@4.2.18)(vue@3.4.30(typescript@5.5.2))(zod@3.23.8): + ai@3.4.33(react@18.3.1)(sswr@2.2.0(svelte@4.2.18))(svelte@4.2.18)(vue@3.4.30(typescript@5.5.2))(zod@3.25.76): dependencies: - '@ai-sdk/provider': 0.0.17 - '@ai-sdk/provider-utils': 1.0.9(zod@3.23.8) - '@ai-sdk/react': 0.0.40(react@18.3.1)(zod@3.23.8) - '@ai-sdk/solid': 0.0.31(zod@3.23.8) - '@ai-sdk/svelte': 0.0.33(svelte@4.2.18)(zod@3.23.8) - '@ai-sdk/ui-utils': 0.0.28(zod@3.23.8) - '@ai-sdk/vue': 0.0.32(vue@3.4.30(typescript@5.5.2))(zod@3.23.8) + '@ai-sdk/provider': 0.0.26 + '@ai-sdk/provider-utils': 1.0.22(zod@3.25.76) + '@ai-sdk/react': 0.0.70(react@18.3.1)(zod@3.25.76) + '@ai-sdk/solid': 0.0.54(zod@3.25.76) + '@ai-sdk/svelte': 0.0.57(svelte@4.2.18)(zod@3.25.76) + '@ai-sdk/ui-utils': 0.0.50(zod@3.25.76) + '@ai-sdk/vue': 0.0.59(vue@3.4.30(typescript@5.5.2))(zod@3.25.76) '@opentelemetry/api': 1.9.0 eventsource-parser: 1.1.2 json-schema: 0.4.0 jsondiffpatch: 0.6.0 - nanoid: 3.3.6 secure-json-parse: 2.7.0 - zod-to-json-schema: 3.22.5(zod@3.23.8) + zod-to-json-schema: 3.24.6(zod@3.25.76) optionalDependencies: react: 18.3.1 - sswr: 2.1.0(svelte@4.2.18) + sswr: 2.2.0(svelte@4.2.18) svelte: 4.2.18 - zod: 3.23.8 + zod: 3.25.76 transitivePeerDependencies: - solid-js - vue @@ -7238,9 +7496,7 @@ snapshots: dependencies: tslib: 2.6.3 - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 + aria-query@5.3.2: {} array-flatten@1.1.1: {} @@ -7249,6 +7505,7 @@ snapshots: as-table@1.0.55: dependencies: printable-characters: 1.0.42 + optional: true asn1.js@4.10.1: dependencies: @@ -7272,9 +7529,7 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axobject-query@4.0.0: - dependencies: - dequal: 2.0.3 + axobject-query@4.1.0: {} bail@2.0.2: {} @@ -7285,7 +7540,6 @@ snapshots: basic-auth@2.0.1: dependencies: safe-buffer: 5.1.2 - optional: true binary-extensions@2.3.0: {} @@ -7299,7 +7553,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - blake3-wasm@2.1.5: {} + blake3-wasm@2.1.5: + optional: true bn.js@4.12.0: {} @@ -7322,6 +7577,23 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -7407,9 +7679,6 @@ snapshots: builtin-status-codes@3.0.0: {} - bytes@3.0.0: - optional: true - bytes@3.1.2: {} cac@6.7.14: {} @@ -7429,6 +7698,11 @@ snapshots: tar: 6.2.1 unique-filename: 3.0.0 + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -7437,16 +7711,22 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} caniuse-lite@1.0.30001637: {} capnp-ts@0.7.0: dependencies: - debug: 4.3.5 - tslib: 2.6.3 + debug: 4.4.1 + tslib: 2.8.1 transitivePeerDependencies: - supports-color + optional: true ccount@2.0.1: {} @@ -7512,17 +7792,15 @@ snapshots: cli-spinners@2.9.2: {} - client-only@0.0.1: {} - clone@1.0.4: {} clsx@2.1.1: {} code-red@1.0.4: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - '@types/estree': 1.0.5 - acorn: 8.12.0 + '@jridgewell/sourcemap-codec': 1.5.4 + '@types/estree': 1.0.8 + acorn: 8.15.0 estree-walker: 3.0.3 periscopic: 3.1.0 @@ -7546,21 +7824,19 @@ snapshots: compressible@2.0.18: dependencies: - mime-db: 1.52.0 - optional: true + mime-db: 1.54.0 - compression@1.7.4: + compression@1.8.1: dependencies: - accepts: 1.3.8 - bytes: 3.0.0 + bytes: 3.1.2 compressible: 2.0.18 debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 vary: 1.1.2 transitivePeerDependencies: - supports-color - optional: true concat-map@0.0.1: {} @@ -7568,6 +7844,9 @@ snapshots: consola@3.2.3: {} + consola@3.4.2: + optional: true + console-browserify@1.2.0: {} constants-browserify@1.0.0: {} @@ -7584,10 +7863,14 @@ snapshots: cookie-signature@1.2.1: {} - cookie@0.5.0: {} + cookie-signature@1.2.2: {} cookie@0.6.0: {} + cookie@0.7.1: {} + + cookie@0.7.2: {} + core-util-is@1.0.3: {} create-ecdh@4.0.4: @@ -7647,7 +7930,8 @@ snapshots: csstype@3.1.3: {} - data-uri-to-buffer@2.0.2: {} + data-uri-to-buffer@2.0.2: + optional: true data-uri-to-buffer@3.0.1: {} @@ -7663,6 +7947,11 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.4.1: + dependencies: + ms: 2.1.3 + optional: true + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -7683,9 +7972,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-properties@1.2.1: dependencies: @@ -7734,6 +8023,12 @@ snapshots: dotenv@16.4.5: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexer@0.1.2: {} duplexify@3.7.1: @@ -7769,6 +8064,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -7779,12 +8076,18 @@ snapshots: es-define-property@1.0.0: dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 + + es-define-property@1.0.1: {} es-errors@1.3.0: {} es-module-lexer@1.5.4: {} + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + esbuild-plugins-node-modules-polyfill@1.6.4(esbuild@0.17.6): dependencies: '@jspm/core': 2.0.1 @@ -8009,7 +8312,8 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 2.0.10 - estree-walker@0.6.1: {} + estree-walker@0.6.1: + optional: true estree-walker@2.0.2: {} @@ -8099,6 +8403,42 @@ snapshots: transitivePeerDependencies: - supports-color + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + extend@3.0.2: {} fast-deep-equal@3.1.3: {} @@ -8150,6 +8490,18 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -8225,14 +8577,33 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} get-port@5.1.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-source@2.0.12: dependencies: data-uri-to-buffer: 2.0.2 source-map: 0.6.1 + optional: true get-stream@6.0.1: {} @@ -8246,7 +8617,8 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} + glob-to-regexp@0.4.1: + optional: true glob@10.4.2: dependencies: @@ -8276,7 +8648,9 @@ snapshots: gopd@1.0.1: dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 + + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -8301,15 +8675,17 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 has-proto@1.0.3: {} has-symbols@1.0.3: {} + has-symbols@1.1.0: {} + has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 hash-base@3.0.4: dependencies: @@ -8472,7 +8848,7 @@ snapshots: ignore@5.3.1: {} - immutable@4.3.6: + immutable@4.3.7: optional: true import-fresh@3.3.0: @@ -8524,6 +8900,11 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + optional: true + is-decimal@2.0.1: {} is-deflate@1.0.0: {} @@ -8563,6 +8944,10 @@ snapshots: dependencies: '@types/estree': 1.0.5 + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -8702,15 +9087,22 @@ snapshots: magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 + optional: true magic-string@0.30.10: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + markdown-extensions@1.1.1: {} markdown-table@3.0.3: {} + math-intrinsics@1.1.0: {} + md5.js@1.3.5: dependencies: hash-base: 3.1.0 @@ -8987,6 +9379,8 @@ snapshots: merge-descriptors@1.0.1: {} + merge-descriptors@1.0.3: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -9409,15 +9803,19 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 mime@1.6.0: {} - mime@2.6.0: {} + mime@2.6.0: + optional: true - mime@3.0.0: {} + mime@3.0.0: + optional: true mimic-fn@2.1.0: {} @@ -9426,21 +9824,22 @@ snapshots: miniflare@3.20240701.0: dependencies: '@cspotcode/source-map-support': 0.8.1 - acorn: 8.12.0 - acorn-walk: 8.3.3 + acorn: 8.15.0 + acorn-walk: 8.3.4 capnp-ts: 0.7.0 exit-hook: 2.2.1 glob-to-regexp: 0.4.1 stoppable: 1.1.0 - undici: 5.28.4 + undici: 5.29.0 workerd: 1.20240701.0 - ws: 8.18.0 - youch: 3.3.3 - zod: 3.23.8 + ws: 8.18.3 + youch: 3.3.4 + zod: 3.25.76 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + optional: true minimalistic-assert@1.0.1: {} @@ -9490,20 +9889,19 @@ snapshots: acorn: 8.12.0 pathe: 1.1.2 pkg-types: 1.1.1 - ufo: 1.5.3 + ufo: 1.6.1 modern-ahocorasick@1.0.1: {} - morgan@1.10.0: + morgan@1.10.1: dependencies: basic-auth: 2.0.1 debug: 2.6.9 depd: 2.0.0 on-finished: 2.3.0 - on-headers: 1.0.2 + on-headers: 1.1.0 transitivePeerDependencies: - supports-color - optional: true mri@1.2.0: {} @@ -9517,9 +9915,10 @@ snapshots: ms@2.1.3: {} - mustache@4.2.0: {} + mustache@4.2.0: + optional: true - nanoid@3.3.6: {} + nanoid@3.3.11: {} nanoid@3.3.7: {} @@ -9529,9 +9928,11 @@ snapshots: negotiator@0.6.3: {} + negotiator@0.6.4: {} + node-domexception@1.0.0: {} - node-fetch-native@1.6.4: {} + node-fetch-native@1.6.6: {} node-fetch@3.3.2: dependencies: @@ -9539,7 +9940,8 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-forge@1.3.1: {} + node-forge@1.3.1: + optional: true node-releases@2.0.14: {} @@ -9612,6 +10014,8 @@ snapshots: object-inspect@1.13.2: {} + object-inspect@1.13.4: {} + object-is@1.1.6: dependencies: call-bind: 1.0.7 @@ -9629,20 +10033,18 @@ snapshots: ofetch@1.3.4: dependencies: destr: 2.0.3 - node-fetch-native: 1.6.4 - ufo: 1.5.3 + node-fetch-native: 1.6.6 + ufo: 1.6.1 on-finished@2.3.0: dependencies: ee-first: 1.1.1 - optional: true on-finished@2.4.1: dependencies: ee-first: 1.1.1 - on-headers@1.0.2: - optional: true + on-headers@1.1.0: {} once@1.4.0: dependencies: @@ -9746,9 +10148,12 @@ snapshots: lru-cache: 10.2.2 minipass: 7.1.2 + path-to-regexp@0.1.12: {} + path-to-regexp@0.1.7: {} - path-to-regexp@6.2.2: {} + path-to-regexp@6.3.0: + optional: true path-type@4.0.0: {} @@ -9873,7 +10278,8 @@ snapshots: dependencies: parse-ms: 2.1.0 - printable-characters@1.0.42: {} + printable-characters@1.0.42: + optional: true proc-log@3.0.0: {} @@ -9930,7 +10336,11 @@ snapshots: qs@6.12.3: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 querystring-es3@0.2.1: {} @@ -10010,16 +10420,16 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom@6.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.17.1 + '@remix-run/router': 1.23.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.24.1(react@18.3.1) + react-router: 6.30.0(react@18.3.1) - react-router@6.24.1(react@18.3.1): + react-router@6.30.0(react@18.3.1): dependencies: - '@remix-run/router': 1.17.1 + '@remix-run/router': 1.23.0 react: 18.3.1 react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): @@ -10144,23 +10554,23 @@ snapshots: mdast-util-to-markdown: 2.1.0 unified: 11.0.5 - remix-island@0.2.0(@remix-run/react@2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/server-runtime@2.10.2(typescript@5.5.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + remix-island@0.2.0(@remix-run/react@2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/server-runtime@2.16.8(typescript@5.5.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/react': 2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) - '@remix-run/server-runtime': 2.10.2(typescript@5.5.2) + '@remix-run/react': 2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) + '@remix-run/server-runtime': 2.16.8(typescript@5.5.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - remix-utils@7.6.0(@remix-run/cloudflare@2.10.2(@cloudflare/workers-types@4.20240620.0)(typescript@5.5.2))(@remix-run/node@2.10.2(typescript@5.5.2))(@remix-run/react@2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/router@1.17.1)(react@18.3.1)(zod@3.23.8): + remix-utils@7.6.0(@remix-run/cloudflare@2.10.2(typescript@5.5.2))(@remix-run/node@2.16.8(typescript@5.5.2))(@remix-run/react@2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/router@1.23.0)(react@18.3.1)(zod@3.25.76): dependencies: type-fest: 4.21.0 optionalDependencies: - '@remix-run/cloudflare': 2.10.2(@cloudflare/workers-types@4.20240620.0)(typescript@5.5.2) - '@remix-run/node': 2.10.2(typescript@5.5.2) - '@remix-run/react': 2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) - '@remix-run/router': 1.17.1 + '@remix-run/cloudflare': 2.10.2(typescript@5.5.2) + '@remix-run/node': 2.16.8(typescript@5.5.2) + '@remix-run/react': 2.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) + '@remix-run/router': 1.23.0 react: 18.3.1 - zod: 3.23.8 + zod: 3.25.76 require-like@0.1.2: {} @@ -10168,6 +10578,16 @@ snapshots: resolve.exports@2.0.2: {} + resolve.exports@2.0.3: + optional: true + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + optional: true + resolve@1.22.8: dependencies: is-core-module: 2.14.0 @@ -10193,14 +10613,17 @@ snapshots: estree-walker: 0.6.1 magic-string: 0.25.9 rollup-pluginutils: 2.8.2 + optional: true rollup-plugin-node-polyfills@0.2.1: dependencies: rollup-plugin-inject: 3.0.2 + optional: true rollup-pluginutils@2.8.2: dependencies: estree-walker: 0.6.1 + optional: true rollup@4.18.0: dependencies: @@ -10241,8 +10664,8 @@ snapshots: sass@1.77.6: dependencies: chokidar: 3.6.0 - immutable: 4.3.6 - source-map-js: 1.2.0 + immutable: 4.3.7 + source-map-js: 1.2.1 optional: true scheduler@0.23.2: @@ -10253,8 +10676,9 @@ snapshots: selfsigned@2.4.1: dependencies: - '@types/node-forge': 1.3.11 + '@types/node-forge': 1.3.13 node-forge: 1.3.1 + optional: true semver@6.3.1: {} @@ -10278,6 +10702,24 @@ snapshots: transitivePeerDependencies: - supports-color + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + serve-static@1.15.0: dependencies: encodeurl: 1.0.2 @@ -10287,14 +10729,26 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + set-cookie-parser@2.6.0: {} + set-cookie-parser@2.7.1: + optional: true + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 gopd: 1.0.1 has-property-descriptors: 1.0.2 @@ -10317,6 +10771,26 @@ snapshots: dependencies: '@shikijs/core': 1.9.1 + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -10324,6 +10798,14 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -10340,6 +10822,8 @@ snapshots: source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -10349,7 +10833,8 @@ snapshots: source-map@0.7.4: {} - sourcemap-codec@1.4.8: {} + sourcemap-codec@1.4.8: + optional: true space-separated-tokens@2.0.2: {} @@ -10371,7 +10856,7 @@ snapshots: dependencies: minipass: 7.1.2 - sswr@2.1.0(svelte@4.2.18): + sswr@2.2.0(svelte@4.2.18): dependencies: svelte: 4.2.18 swrev: 4.0.0 @@ -10382,12 +10867,14 @@ snapshots: dependencies: as-table: 1.0.55 get-source: 2.0.12 + optional: true statuses@2.0.1: {} std-env@3.7.0: {} - stoppable@1.1.0: {} + stoppable@1.1.0: + optional: true stream-browserify@3.0.0: dependencies: @@ -10471,29 +10958,29 @@ snapshots: svelte@4.2.18: dependencies: '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - '@types/estree': 1.0.5 - acorn: 8.12.0 - aria-query: 5.3.0 - axobject-query: 4.0.0 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 code-red: 1.0.4 css-tree: 2.3.1 estree-walker: 3.0.3 - is-reference: 3.0.2 + is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.10 + magic-string: 0.30.17 periscopic: 3.1.0 - swr@2.2.5(react@18.3.1): + swr@2.3.4(react@18.3.1): dependencies: - client-only: 0.0.1 + dequal: 2.0.3 react: 18.3.1 - use-sync-external-store: 1.2.2(react@18.3.1) + use-sync-external-store: 1.5.0(react@18.3.1) swrev@4.0.0: {} - swrv@1.0.4(vue@3.4.30(typescript@5.5.2)): + swrv@1.1.0(vue@3.4.30(typescript@5.5.2)): dependencies: vue: 3.4.30(typescript@5.5.2) @@ -10536,6 +11023,8 @@ snapshots: dependencies: editions: 6.21.0 + throttleit@2.1.0: {} + through2@2.0.5: dependencies: readable-stream: 2.3.8 @@ -10583,10 +11072,15 @@ snapshots: tslib@2.6.3: {} + tslib@2.8.1: + optional: true + tty-browserify@0.0.1: {} turbo-stream@2.2.0: {} + turbo-stream@2.4.1: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -10611,7 +11105,7 @@ snapshots: typescript@5.5.2: {} - ufo@1.5.3: {} + ufo@1.6.1: {} unconfig@0.3.13: dependencies: @@ -10621,20 +11115,24 @@ snapshots: undici-types@5.26.5: {} - undici@5.28.4: + undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 + optional: true undici@6.19.4: {} + undici@6.21.3: {} + unenv-nightly@1.10.0-1717606461.a117952: dependencies: - consola: 3.2.3 + consola: 3.4.2 defu: 6.1.4 mime: 3.0.0 - node-fetch-native: 1.6.4 + node-fetch-native: 1.6.6 pathe: 1.1.2 - ufo: 1.5.3 + ufo: 1.6.1 + optional: true unified@10.1.2: dependencies: @@ -10789,7 +11287,7 @@ snapshots: optionalDependencies: '@types/react': 18.3.3 - use-sync-external-store@1.2.2(react@18.3.1): + use-sync-external-store@1.5.0(react@18.3.1): dependencies: react: 18.3.1 @@ -11007,8 +11505,9 @@ snapshots: '@cloudflare/workerd-linux-64': 1.20240701.0 '@cloudflare/workerd-linux-arm64': 1.20240701.0 '@cloudflare/workerd-windows-64': 1.20240701.0 + optional: true - wrangler@3.63.2(@cloudflare/workers-types@4.20240620.0): + wrangler@3.63.2: dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) @@ -11018,21 +11517,21 @@ snapshots: date-fns: 3.6.0 esbuild: 0.17.19 miniflare: 3.20240701.0 - nanoid: 3.3.7 - path-to-regexp: 6.2.2 - resolve: 1.22.8 - resolve.exports: 2.0.2 + nanoid: 3.3.11 + path-to-regexp: 6.3.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 selfsigned: 2.4.1 source-map: 0.6.1 unenv: unenv-nightly@1.10.0-1717606461.a117952 - xxhash-wasm: 1.0.2 + xxhash-wasm: 1.1.0 optionalDependencies: - '@cloudflare/workers-types': 4.20240620.0 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + optional: true wrap-ansi@7.0.0: dependencies: @@ -11050,11 +11549,13 @@ snapshots: ws@7.5.10: {} - ws@8.18.0: {} + ws@8.18.3: + optional: true xtend@4.0.2: {} - xxhash-wasm@1.0.2: {} + xxhash-wasm@1.1.0: + optional: true yallist@3.1.1: {} @@ -11064,16 +11565,17 @@ snapshots: yocto-queue@0.1.0: {} - youch@3.3.3: + youch@3.3.4: dependencies: - cookie: 0.5.0 + cookie: 0.7.2 mustache: 4.2.0 stacktracey: 2.1.8 + optional: true - zod-to-json-schema@3.22.5(zod@3.23.8): + zod-to-json-schema@3.24.6(zod@3.25.76): dependencies: - zod: 3.23.8 + zod: 3.25.76 - zod@3.23.8: {} + zod@3.25.76: {} zwitch@2.0.4: {} diff --git a/tsconfig.json b/tsconfig.json index fd161f9958..feb5439c05 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,33 +1,25 @@ { + "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"], "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "types": ["@remix-run/cloudflare", "vite/client", "@cloudflare/workers-types/2023-07-01"], + "types": ["@remix-run/node", "vite/client"], + "lib": ["DOM", "DOM.Iterable", "ES2022"], "isolatedModules": true, "esModuleInterop": true, "jsx": "react-jsx", "module": "ESNext", - "moduleResolution": "Bundler", + "moduleResolution": "bundler", "resolveJsonModule": true, - "target": "ESNext", + "target": "ES2022", "strict": true, "allowJs": true, "skipLibCheck": true, - "verbatimModuleSyntax": true, "forceConsistentCasingInFileNames": true, "baseUrl": ".", "paths": { "~/*": ["./app/*"] }, - // vite takes care of building everything, not tsc + // Vite takes care of building everything, not tsc. "noEmit": true - }, - "include": [ - "**/*.ts", - "**/*.tsx", - "**/.server/**/*.ts", - "**/.server/**/*.tsx", - "**/.client/**/*.ts", - "**/.client/**/*.tsx" - ] + } } diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000000..7120b98113 --- /dev/null +++ b/vercel.json @@ -0,0 +1,12 @@ +{ + "buildCommand": "pnpm build", + "devCommand": "pnpm dev", + "installCommand": "pnpm install", + "framework": "remix", + "outputDirectory": "build", + "functions": { + "app/routes/api.*.ts": { + "maxDuration": 30 + } + } +} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 58e76cde5d..dbc6d09186 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,4 +1,4 @@ -import { cloudflareDevProxyVitePlugin as remixCloudflareDevProxy, vitePlugin as remixVitePlugin } from '@remix-run/dev'; +import { vitePlugin as remixVitePlugin } from '@remix-run/dev'; import UnoCSS from 'unocss/vite'; import { defineConfig, type ViteDevServer } from 'vite'; import { nodePolyfills } from 'vite-plugin-node-polyfills'; @@ -14,7 +14,6 @@ export default defineConfig((config) => { nodePolyfills({ include: ['path', 'buffer'], }), - config.mode !== 'test' && remixCloudflareDevProxy(), remixVitePlugin({ future: { v3_fetcherPersist: true, diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts index 606a4e521c..154c514b1a 100644 --- a/worker-configuration.d.ts +++ b/worker-configuration.d.ts @@ -1,3 +1,10 @@ -interface Env { - ANTHROPIC_API_KEY: string; +interface ProcessEnv { + MISTRAL_API_KEY?: string; + GROQ_API_KEY?: string; +} + +declare global { + namespace NodeJS { + interface ProcessEnv extends ProcessEnv {} + } } diff --git a/wrangler.toml b/wrangler.toml deleted file mode 100644 index 09f2e3a88a..0000000000 --- a/wrangler.toml +++ /dev/null @@ -1,5 +0,0 @@ -#:schema node_modules/wrangler/config-schema.json -name = "bolt" -compatibility_flags = ["nodejs_compat"] -compatibility_date = "2024-07-01" -pages_build_output_dir = "./build/client"