diff --git a/.claude/commands/checkpoint.md b/.claude/commands/checkpoint.md
index baecb50..b6c06e8 100644
--- a/.claude/commands/checkpoint.md
+++ b/.claude/commands/checkpoint.md
@@ -1,2 +1,32 @@
-Please commit all changes and provide a suitable comment for the commit.
-Run git init if git has not been instantiated for the project as yet.
+Please create a comprehensive checkpoint commit with the following steps:
+
+1. **Initialize Git if needed**: Run `git init` if git has not been instantiated for the project yet.
+
+2. **Analyze all changes**:
+ - Run `git status` to see all tracked and untracked files
+ - Run `git diff` to see detailed changes in tracked files
+ - Run `git log -5 --oneline` to understand the commit message style of this repository
+
+3. **Stage everything**:
+ - Add ALL tracked changes (modified and deleted files)
+ - Add ALL untracked files (new files)
+ - Use `git add -A` or `git add .` to stage everything
+
+4. **Create a detailed commit message**:
+ - **First line**: Write a clear, concise summary (50-72 chars) describing the primary change
+ - Use imperative mood (e.g., "Add feature" not "Added feature")
+ - Examples: "feat: add user authentication", "fix: resolve database connection issue", "refactor: improve API route structure"
+ - **Body**: Provide a detailed description including:
+ - What changes were made (list of key modifications)
+ - Why these changes were made (purpose/motivation)
+ - Any important technical details or decisions
+ - Breaking changes or migration notes if applicable
+ - **Footer**: Include co-author attribution as shown in the Git Safety Protocol
+
+5. **Execute the commit**: Create the commit with the properly formatted message following this repository's conventions.
+
+IMPORTANT:
+- Do NOT skip any files - include everything
+- Make the commit message descriptive enough that someone reviewing the git log can understand what was accomplished
+- Follow the project's existing commit message conventions (check git log first)
+- Include the Claude Code co-author attribution in the commit message
diff --git a/CLAUDE.md b/CLAUDE.md
index 7e01793..d2360bc 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -1,3 +1,225 @@
-- Always run the LINT and TYPESCHECK scripts after completing your changes. This is to check for any issues.
-- NEVER start the dev server yourself. If you need something from the terminal, ask the user to provide it to you.
-- Avoid using custom colors unless very specifically instructed to do so. Stick to standard tailwind and shadcn colors, styles and tokens.
+# Agentic Coding Boilerplate - AI Assistant Guidelines
+
+## Project Overview
+
+This is a Next.js 15 boilerplate for building AI-powered applications with authentication, database, and modern UI components.
+
+### Tech Stack
+
+- **Framework**: Next.js 15 with App Router, React 19, TypeScript
+- **AI Integration**: Vercel AI SDK 5 + OpenRouter (access to 100+ AI models)
+- **Authentication**: BetterAuth with Google OAuth
+- **Database**: PostgreSQL with Drizzle ORM
+- **UI**: shadcn/ui components with Tailwind CSS 4
+- **Styling**: Tailwind CSS with dark mode support (next-themes)
+
+## AI Integration with OpenRouter
+
+### Key Points
+
+- This project uses **OpenRouter** as the AI provider, NOT direct OpenAI
+- OpenRouter provides access to 100+ AI models through a single unified API
+- Default model: `openai/gpt-5-mini` (configurable via `OPENROUTER_MODEL` env var)
+- Users browse models at: https://openrouter.ai/models
+- Users get API keys from: https://openrouter.ai/settings/keys
+
+### AI Implementation Files
+
+- `src/app/api/chat/route.ts` - Chat API endpoint using OpenRouter
+- Package: `@openrouter/ai-sdk-provider` (not `@ai-sdk/openai`)
+- Import: `import { openrouter } from "@openrouter/ai-sdk-provider"`
+
+## Project Structure
+
+```
+src/
+├── app/ # Next.js App Router
+│ ├── api/
+│ │ ├── auth/[...all]/ # Better Auth catch-all route
+│ │ ├── chat/route.ts # AI chat endpoint (OpenRouter)
+│ │ └── diagnostics/ # System diagnostics
+│ ├── chat/page.tsx # AI chat interface (protected)
+│ ├── dashboard/page.tsx # User dashboard (protected)
+│ ├── profile/page.tsx # User profile (protected)
+│ ├── page.tsx # Home/landing page
+│ └── layout.tsx # Root layout
+├── components/
+│ ├── auth/ # Authentication components
+│ │ ├── sign-in-button.tsx
+│ │ ├── sign-out-button.tsx
+│ │ └── user-profile.tsx
+│ ├── ui/ # shadcn/ui components
+│ │ ├── button.tsx
+│ │ ├── card.tsx
+│ │ ├── dialog.tsx
+│ │ ├── dropdown-menu.tsx
+│ │ ├── avatar.tsx
+│ │ ├── badge.tsx
+│ │ ├── separator.tsx
+│ │ ├── mode-toggle.tsx # Dark/light mode toggle
+│ │ └── github-stars.tsx
+│ ├── site-header.tsx # Main navigation header
+│ ├── site-footer.tsx # Footer component
+│ ├── theme-provider.tsx # Dark mode provider
+│ ├── setup-checklist.tsx # Setup guide component
+│ └── starter-prompt-modal.tsx # Starter prompts modal
+└── lib/
+ ├── auth.ts # Better Auth server config
+ ├── auth-client.ts # Better Auth client hooks
+ ├── db.ts # Database connection
+ ├── schema.ts # Drizzle schema (users, sessions, etc.)
+ └── utils.ts # Utility functions (cn, etc.)
+```
+
+## Environment Variables
+
+Required environment variables (see `env.example`):
+
+```env
+# Database
+POSTGRES_URL=postgresql://user:password@localhost:5432/db_name
+
+# Better Auth
+BETTER_AUTH_SECRET=32-char-random-string
+
+# Google OAuth
+GOOGLE_CLIENT_ID=your-google-client-id
+GOOGLE_CLIENT_SECRET=your-google-client-secret
+
+# AI via OpenRouter
+OPENROUTER_API_KEY=sk-or-v1-your-key
+OPENROUTER_MODEL=openai/gpt-5-mini # or any model from openrouter.ai/models
+
+# App
+NEXT_PUBLIC_APP_URL=http://localhost:3000
+```
+
+## Available Scripts
+
+```bash
+npm run dev # Start dev server (DON'T run this yourself - ask user)
+npm run build # Build for production (runs db:migrate first)
+npm run start # Start production server
+npm run lint # Run ESLint (ALWAYS run after changes)
+npm run typecheck # TypeScript type checking (ALWAYS run after changes)
+npm run db:generate # Generate database migrations
+npm run db:migrate # Run database migrations
+npm run db:push # Push schema changes to database
+npm run db:studio # Open Drizzle Studio (database GUI)
+npm run db:dev # Push schema for development
+npm run db:reset # Reset database (drop all tables)
+```
+
+## Documentation Files
+
+The project includes technical documentation in `docs/`:
+
+- `docs/technical/ai/streaming.md` - AI streaming implementation guide
+- `docs/technical/ai/structured-data.md` - Structured data extraction
+- `docs/technical/react-markdown.md` - Markdown rendering guide
+- `docs/technical/betterauth/polar.md` - Polar payment integration
+- `docs/business/starter-prompt.md` - Business context for AI prompts
+
+## Guidelines for AI Assistants
+
+### CRITICAL RULES
+
+1. **ALWAYS run lint and typecheck** after completing changes:
+
+ ```bash
+ npm run lint && npm run typecheck
+ ```
+
+2. **NEVER start the dev server yourself**
+
+ - If you need dev server output, ask the user to provide it
+ - Don't run `npm run dev` or `pnpm dev`
+
+3. **Use OpenRouter, NOT OpenAI directly**
+
+ - Import from `@openrouter/ai-sdk-provider`
+ - Use `openrouter()` function, not `openai()`
+ - Model names follow OpenRouter format: `provider/model-name`
+
+4. **Styling Guidelines**
+
+ - Stick to standard Tailwind CSS utility classes
+ - Use shadcn/ui color tokens (e.g., `bg-background`, `text-foreground`)
+ - Avoid custom colors unless explicitly requested
+ - Support dark mode with appropriate Tailwind classes
+
+5. **Authentication**
+
+ - Server-side: Import from `@/lib/auth` (Better Auth instance)
+ - Client-side: Import hooks from `@/lib/auth-client`
+ - Protected routes should check session in Server Components
+ - Use existing auth components from `src/components/auth/`
+
+6. **Database Operations**
+
+ - Use Drizzle ORM (imported from `@/lib/db`)
+ - Schema is defined in `@/lib/schema`
+ - Always run migrations after schema changes
+ - PostgreSQL is the database (not SQLite, MySQL, etc.)
+
+7. **Component Creation**
+
+ - Use existing shadcn/ui components when possible
+ - Follow the established patterns in `src/components/ui/`
+ - Support both light and dark modes
+ - Use TypeScript with proper types
+
+8. **API Routes**
+ - Follow Next.js 15 App Router conventions
+ - Use Route Handlers (route.ts files)
+ - Return Response objects
+ - Handle errors appropriately
+
+### Best Practices
+
+- Read existing code patterns before creating new features
+- Maintain consistency with established file structure
+- Use the documentation files when implementing related features
+- Test changes with lint and typecheck before considering complete
+- When modifying AI functionality, refer to `docs/technical/ai/` guides
+
+### Common Tasks
+
+**Adding a new page:**
+
+1. Create in `src/app/[route]/page.tsx`
+2. Use Server Components by default
+3. Add to navigation if needed
+
+**Adding a new API route:**
+
+1. Create in `src/app/api/[route]/route.ts`
+2. Export HTTP method handlers (GET, POST, etc.)
+3. Use proper TypeScript types
+
+**Adding authentication to a page:**
+
+1. Import auth instance: `import { auth } from "@/lib/auth"`
+2. Get session: `const session = await auth.api.getSession({ headers: await headers() })`
+3. Check session and redirect if needed
+
+**Working with the database:**
+
+1. Update schema in `src/lib/schema.ts`
+2. Generate migration: `npm run db:generate`
+3. Apply migration: `npm run db:migrate`
+4. Import `db` from `@/lib/db` to query
+
+**Modifying AI chat:**
+
+1. Backend: `src/app/api/chat/route.ts`
+2. Frontend: `src/app/chat/page.tsx`
+3. Reference streaming docs: `docs/technical/ai/streaming.md`
+4. Remember to use OpenRouter, not direct OpenAI
+
+## Package Manager
+
+This project uses **pnpm** (see `pnpm-lock.yaml`). When running commands:
+
+- Use `pnpm` instead of `npm` when possible
+- Scripts defined in package.json work with `pnpm run [script]`
diff --git a/README.md b/README.md
index 6804274..49815af 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ A complete agentic coding boilerplate with authentication, PostgreSQL database,
- **🔐 Authentication**: Better Auth with Google OAuth integration
- **🗃️ Database**: Drizzle ORM with PostgreSQL
-- **🤖 AI Integration**: Vercel AI SDK with OpenAI support
+- **🤖 AI Integration**: Vercel AI SDK with OpenRouter (access to 100+ AI models)
- **🎨 UI Components**: shadcn/ui with Tailwind CSS
- **⚡ Modern Stack**: Next.js 15, React 19, TypeScript
- **📱 Responsive**: Mobile-first design approach
@@ -105,9 +105,11 @@ BETTER_AUTH_SECRET="your-random-32-character-secret-key-here"
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
-# AI Integration (Optional - for chat functionality)
-OPENAI_API_KEY="sk-your-openai-api-key-here"
-OPENAI_MODEL="gpt-5-mini"
+# AI Integration via OpenRouter (Optional - for chat functionality)
+# Get your API key from: https://openrouter.ai/settings/keys
+# View available models at: https://openrouter.ai/models
+OPENROUTER_API_KEY="sk-or-v1-your-openrouter-api-key-here"
+OPENROUTER_MODEL="openai/gpt-5-mini"
# App URL (for production deployments)
NEXT_PUBLIC_APP_URL="http://localhost:3000"
@@ -152,13 +154,14 @@ Your application will be available at [http://localhost:3000](http://localhost:3
- `https://yourdomain.com/api/auth/callback/google` (production)
6. Copy the **Client ID** and **Client Secret** to your `.env` file
-### OpenAI API Key
+### OpenRouter API Key
-1. Go to OpenAI Platform
-2. Navigate to **API Keys** in the sidebar
-3. Click **Create new secret key**
-4. Give it a name and copy the key
-5. Add it to your `.env` file as `OPENAI_API_KEY`
+1. Go to OpenRouter
+2. Sign up or log in to your account
+3. Navigate to **Settings** → **Keys** or visit Keys Settings
+4. Click **Create Key** and give it a name
+5. Copy the API key and add it to your `.env` file as `OPENROUTER_API_KEY`
+6. Browse available models at OpenRouter Models
## 🗂️ Project Structure
@@ -201,7 +204,7 @@ npm run db:reset # Reset database (drop all tables)
- **Home (`/`)**: Landing page with setup instructions and features overview
- **Dashboard (`/dashboard`)**: Protected user dashboard with profile information
-- **Chat (`/chat`)**: AI-powered chat interface using OpenAI (requires authentication)
+- **Chat (`/chat`)**: AI-powered chat interface using OpenRouter (requires authentication)
## 🚀 Deployment
@@ -230,8 +233,8 @@ Ensure these are set in your production environment:
- `BETTER_AUTH_SECRET` - Secure random 32+ character string
- `GOOGLE_CLIENT_ID` - Google OAuth Client ID
- `GOOGLE_CLIENT_SECRET` - Google OAuth Client Secret
-- `OPENAI_API_KEY` - OpenAI API key (optional)
-- `OPENAI_MODEL` - OpenAI model name (optional, defaults to gpt-5-mini)
+- `OPENROUTER_API_KEY` - OpenRouter API key (optional, for AI chat functionality)
+- `OPENROUTER_MODEL` - Model name from OpenRouter (optional, defaults to openai/gpt-5-mini)
- `NEXT_PUBLIC_APP_URL` - Your production domain
## 🎥 Tutorial Video
diff --git a/create-agentic-app/package.json b/create-agentic-app/package.json
index 4317783..bf61362 100644
--- a/create-agentic-app/package.json
+++ b/create-agentic-app/package.json
@@ -1,6 +1,6 @@
{
"name": "create-agentic-app",
- "version": "1.0.0",
+ "version": "1.0.1",
"description": "Scaffold a new agentic AI application with Next.js, Better Auth, and AI SDK",
"type": "module",
"bin": {
diff --git a/create-agentic-app/template/CLAUDE.md b/create-agentic-app/template/CLAUDE.md
index 7e01793..d2360bc 100644
--- a/create-agentic-app/template/CLAUDE.md
+++ b/create-agentic-app/template/CLAUDE.md
@@ -1,3 +1,225 @@
-- Always run the LINT and TYPESCHECK scripts after completing your changes. This is to check for any issues.
-- NEVER start the dev server yourself. If you need something from the terminal, ask the user to provide it to you.
-- Avoid using custom colors unless very specifically instructed to do so. Stick to standard tailwind and shadcn colors, styles and tokens.
+# Agentic Coding Boilerplate - AI Assistant Guidelines
+
+## Project Overview
+
+This is a Next.js 15 boilerplate for building AI-powered applications with authentication, database, and modern UI components.
+
+### Tech Stack
+
+- **Framework**: Next.js 15 with App Router, React 19, TypeScript
+- **AI Integration**: Vercel AI SDK 5 + OpenRouter (access to 100+ AI models)
+- **Authentication**: BetterAuth with Google OAuth
+- **Database**: PostgreSQL with Drizzle ORM
+- **UI**: shadcn/ui components with Tailwind CSS 4
+- **Styling**: Tailwind CSS with dark mode support (next-themes)
+
+## AI Integration with OpenRouter
+
+### Key Points
+
+- This project uses **OpenRouter** as the AI provider, NOT direct OpenAI
+- OpenRouter provides access to 100+ AI models through a single unified API
+- Default model: `openai/gpt-5-mini` (configurable via `OPENROUTER_MODEL` env var)
+- Users browse models at: https://openrouter.ai/models
+- Users get API keys from: https://openrouter.ai/settings/keys
+
+### AI Implementation Files
+
+- `src/app/api/chat/route.ts` - Chat API endpoint using OpenRouter
+- Package: `@openrouter/ai-sdk-provider` (not `@ai-sdk/openai`)
+- Import: `import { openrouter } from "@openrouter/ai-sdk-provider"`
+
+## Project Structure
+
+```
+src/
+├── app/ # Next.js App Router
+│ ├── api/
+│ │ ├── auth/[...all]/ # Better Auth catch-all route
+│ │ ├── chat/route.ts # AI chat endpoint (OpenRouter)
+│ │ └── diagnostics/ # System diagnostics
+│ ├── chat/page.tsx # AI chat interface (protected)
+│ ├── dashboard/page.tsx # User dashboard (protected)
+│ ├── profile/page.tsx # User profile (protected)
+│ ├── page.tsx # Home/landing page
+│ └── layout.tsx # Root layout
+├── components/
+│ ├── auth/ # Authentication components
+│ │ ├── sign-in-button.tsx
+│ │ ├── sign-out-button.tsx
+│ │ └── user-profile.tsx
+│ ├── ui/ # shadcn/ui components
+│ │ ├── button.tsx
+│ │ ├── card.tsx
+│ │ ├── dialog.tsx
+│ │ ├── dropdown-menu.tsx
+│ │ ├── avatar.tsx
+│ │ ├── badge.tsx
+│ │ ├── separator.tsx
+│ │ ├── mode-toggle.tsx # Dark/light mode toggle
+│ │ └── github-stars.tsx
+│ ├── site-header.tsx # Main navigation header
+│ ├── site-footer.tsx # Footer component
+│ ├── theme-provider.tsx # Dark mode provider
+│ ├── setup-checklist.tsx # Setup guide component
+│ └── starter-prompt-modal.tsx # Starter prompts modal
+└── lib/
+ ├── auth.ts # Better Auth server config
+ ├── auth-client.ts # Better Auth client hooks
+ ├── db.ts # Database connection
+ ├── schema.ts # Drizzle schema (users, sessions, etc.)
+ └── utils.ts # Utility functions (cn, etc.)
+```
+
+## Environment Variables
+
+Required environment variables (see `env.example`):
+
+```env
+# Database
+POSTGRES_URL=postgresql://user:password@localhost:5432/db_name
+
+# Better Auth
+BETTER_AUTH_SECRET=32-char-random-string
+
+# Google OAuth
+GOOGLE_CLIENT_ID=your-google-client-id
+GOOGLE_CLIENT_SECRET=your-google-client-secret
+
+# AI via OpenRouter
+OPENROUTER_API_KEY=sk-or-v1-your-key
+OPENROUTER_MODEL=openai/gpt-5-mini # or any model from openrouter.ai/models
+
+# App
+NEXT_PUBLIC_APP_URL=http://localhost:3000
+```
+
+## Available Scripts
+
+```bash
+npm run dev # Start dev server (DON'T run this yourself - ask user)
+npm run build # Build for production (runs db:migrate first)
+npm run start # Start production server
+npm run lint # Run ESLint (ALWAYS run after changes)
+npm run typecheck # TypeScript type checking (ALWAYS run after changes)
+npm run db:generate # Generate database migrations
+npm run db:migrate # Run database migrations
+npm run db:push # Push schema changes to database
+npm run db:studio # Open Drizzle Studio (database GUI)
+npm run db:dev # Push schema for development
+npm run db:reset # Reset database (drop all tables)
+```
+
+## Documentation Files
+
+The project includes technical documentation in `docs/`:
+
+- `docs/technical/ai/streaming.md` - AI streaming implementation guide
+- `docs/technical/ai/structured-data.md` - Structured data extraction
+- `docs/technical/react-markdown.md` - Markdown rendering guide
+- `docs/technical/betterauth/polar.md` - Polar payment integration
+- `docs/business/starter-prompt.md` - Business context for AI prompts
+
+## Guidelines for AI Assistants
+
+### CRITICAL RULES
+
+1. **ALWAYS run lint and typecheck** after completing changes:
+
+ ```bash
+ npm run lint && npm run typecheck
+ ```
+
+2. **NEVER start the dev server yourself**
+
+ - If you need dev server output, ask the user to provide it
+ - Don't run `npm run dev` or `pnpm dev`
+
+3. **Use OpenRouter, NOT OpenAI directly**
+
+ - Import from `@openrouter/ai-sdk-provider`
+ - Use `openrouter()` function, not `openai()`
+ - Model names follow OpenRouter format: `provider/model-name`
+
+4. **Styling Guidelines**
+
+ - Stick to standard Tailwind CSS utility classes
+ - Use shadcn/ui color tokens (e.g., `bg-background`, `text-foreground`)
+ - Avoid custom colors unless explicitly requested
+ - Support dark mode with appropriate Tailwind classes
+
+5. **Authentication**
+
+ - Server-side: Import from `@/lib/auth` (Better Auth instance)
+ - Client-side: Import hooks from `@/lib/auth-client`
+ - Protected routes should check session in Server Components
+ - Use existing auth components from `src/components/auth/`
+
+6. **Database Operations**
+
+ - Use Drizzle ORM (imported from `@/lib/db`)
+ - Schema is defined in `@/lib/schema`
+ - Always run migrations after schema changes
+ - PostgreSQL is the database (not SQLite, MySQL, etc.)
+
+7. **Component Creation**
+
+ - Use existing shadcn/ui components when possible
+ - Follow the established patterns in `src/components/ui/`
+ - Support both light and dark modes
+ - Use TypeScript with proper types
+
+8. **API Routes**
+ - Follow Next.js 15 App Router conventions
+ - Use Route Handlers (route.ts files)
+ - Return Response objects
+ - Handle errors appropriately
+
+### Best Practices
+
+- Read existing code patterns before creating new features
+- Maintain consistency with established file structure
+- Use the documentation files when implementing related features
+- Test changes with lint and typecheck before considering complete
+- When modifying AI functionality, refer to `docs/technical/ai/` guides
+
+### Common Tasks
+
+**Adding a new page:**
+
+1. Create in `src/app/[route]/page.tsx`
+2. Use Server Components by default
+3. Add to navigation if needed
+
+**Adding a new API route:**
+
+1. Create in `src/app/api/[route]/route.ts`
+2. Export HTTP method handlers (GET, POST, etc.)
+3. Use proper TypeScript types
+
+**Adding authentication to a page:**
+
+1. Import auth instance: `import { auth } from "@/lib/auth"`
+2. Get session: `const session = await auth.api.getSession({ headers: await headers() })`
+3. Check session and redirect if needed
+
+**Working with the database:**
+
+1. Update schema in `src/lib/schema.ts`
+2. Generate migration: `npm run db:generate`
+3. Apply migration: `npm run db:migrate`
+4. Import `db` from `@/lib/db` to query
+
+**Modifying AI chat:**
+
+1. Backend: `src/app/api/chat/route.ts`
+2. Frontend: `src/app/chat/page.tsx`
+3. Reference streaming docs: `docs/technical/ai/streaming.md`
+4. Remember to use OpenRouter, not direct OpenAI
+
+## Package Manager
+
+This project uses **pnpm** (see `pnpm-lock.yaml`). When running commands:
+
+- Use `pnpm` instead of `npm` when possible
+- Scripts defined in package.json work with `pnpm run [script]`
diff --git a/create-agentic-app/template/README.md b/create-agentic-app/template/README.md
index 6804274..49815af 100644
--- a/create-agentic-app/template/README.md
+++ b/create-agentic-app/template/README.md
@@ -6,7 +6,7 @@ A complete agentic coding boilerplate with authentication, PostgreSQL database,
- **🔐 Authentication**: Better Auth with Google OAuth integration
- **🗃️ Database**: Drizzle ORM with PostgreSQL
-- **🤖 AI Integration**: Vercel AI SDK with OpenAI support
+- **🤖 AI Integration**: Vercel AI SDK with OpenRouter (access to 100+ AI models)
- **🎨 UI Components**: shadcn/ui with Tailwind CSS
- **⚡ Modern Stack**: Next.js 15, React 19, TypeScript
- **📱 Responsive**: Mobile-first design approach
@@ -105,9 +105,11 @@ BETTER_AUTH_SECRET="your-random-32-character-secret-key-here"
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
-# AI Integration (Optional - for chat functionality)
-OPENAI_API_KEY="sk-your-openai-api-key-here"
-OPENAI_MODEL="gpt-5-mini"
+# AI Integration via OpenRouter (Optional - for chat functionality)
+# Get your API key from: https://openrouter.ai/settings/keys
+# View available models at: https://openrouter.ai/models
+OPENROUTER_API_KEY="sk-or-v1-your-openrouter-api-key-here"
+OPENROUTER_MODEL="openai/gpt-5-mini"
# App URL (for production deployments)
NEXT_PUBLIC_APP_URL="http://localhost:3000"
@@ -152,13 +154,14 @@ Your application will be available at [http://localhost:3000](http://localhost:3
- `https://yourdomain.com/api/auth/callback/google` (production)
6. Copy the **Client ID** and **Client Secret** to your `.env` file
-### OpenAI API Key
+### OpenRouter API Key
-1. Go to OpenAI Platform
-2. Navigate to **API Keys** in the sidebar
-3. Click **Create new secret key**
-4. Give it a name and copy the key
-5. Add it to your `.env` file as `OPENAI_API_KEY`
+1. Go to OpenRouter
+2. Sign up or log in to your account
+3. Navigate to **Settings** → **Keys** or visit Keys Settings
+4. Click **Create Key** and give it a name
+5. Copy the API key and add it to your `.env` file as `OPENROUTER_API_KEY`
+6. Browse available models at OpenRouter Models
## 🗂️ Project Structure
@@ -201,7 +204,7 @@ npm run db:reset # Reset database (drop all tables)
- **Home (`/`)**: Landing page with setup instructions and features overview
- **Dashboard (`/dashboard`)**: Protected user dashboard with profile information
-- **Chat (`/chat`)**: AI-powered chat interface using OpenAI (requires authentication)
+- **Chat (`/chat`)**: AI-powered chat interface using OpenRouter (requires authentication)
## 🚀 Deployment
@@ -230,8 +233,8 @@ Ensure these are set in your production environment:
- `BETTER_AUTH_SECRET` - Secure random 32+ character string
- `GOOGLE_CLIENT_ID` - Google OAuth Client ID
- `GOOGLE_CLIENT_SECRET` - Google OAuth Client Secret
-- `OPENAI_API_KEY` - OpenAI API key (optional)
-- `OPENAI_MODEL` - OpenAI model name (optional, defaults to gpt-5-mini)
+- `OPENROUTER_API_KEY` - OpenRouter API key (optional, for AI chat functionality)
+- `OPENROUTER_MODEL` - Model name from OpenRouter (optional, defaults to openai/gpt-5-mini)
- `NEXT_PUBLIC_APP_URL` - Your production domain
## 🎥 Tutorial Video
diff --git a/create-agentic-app/template/env.example b/create-agentic-app/template/env.example
index c71be99..1854928 100644
--- a/create-agentic-app/template/env.example
+++ b/create-agentic-app/template/env.example
@@ -10,9 +10,11 @@ BETTER_AUTH_SECRET=qtD4Ssa0t5jY7ewALgai97sKhAtn7Ysc
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
-# AI Integration (Optional - for chat functionality)
-OPENAI_API_KEY=
-OPENAI_MODEL="gpt-5-mini"
+# AI Integration via OpenRouter (Optional - for chat functionality)
+# Get your API key from: https://openrouter.ai/settings/keys
+# View available models at: https://openrouter.ai/models
+OPENROUTER_API_KEY=
+OPENROUTER_MODEL="openai/gpt-5-mini"
# Optional - for vector search only
OPENAI_EMBEDDING_MODEL="text-embedding-3-large"
diff --git a/create-agentic-app/template/package.json b/create-agentic-app/template/package.json
index 142bbdc..453f4ca 100644
--- a/create-agentic-app/template/package.json
+++ b/create-agentic-app/template/package.json
@@ -1,6 +1,6 @@
{
"name": "agentic-coding-starter-kit",
- "version": "0.1.0",
+ "version": "0.1.1",
"scripts": {
"dev": "next dev --turbopack",
"build": "pnpm run db:migrate && next build",
@@ -15,14 +15,15 @@
"db:reset": "drizzle-kit drop && drizzle-kit push"
},
"dependencies": {
- "@ai-sdk/openai": "^2.0.53",
- "@ai-sdk/react": "^2.0.78",
+ "@ai-sdk/openai": "^2.0.60",
+ "@ai-sdk/react": "^2.0.86",
+ "@openrouter/ai-sdk-provider": "^1.2.0",
"@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-slot": "^1.2.3",
- "ai": "^5.0.78",
- "better-auth": "^1.3.29",
+ "ai": "^5.0.86",
+ "better-auth": "^1.3.34",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"drizzle-orm": "^0.44.7",
@@ -40,12 +41,12 @@
"devDependencies": {
"@eslint/eslintrc": "^3.3.1",
"@tailwindcss/postcss": "^4.1.16",
- "@types/node": "^20.19.23",
- "@types/pg": "^8.15.5",
+ "@types/node": "^20.19.24",
+ "@types/pg": "^8.15.6",
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
- "drizzle-kit": "^0.31.5",
- "eslint": "^9.38.0",
+ "drizzle-kit": "^0.31.6",
+ "eslint": "^9.39.0",
"eslint-config-next": "15.4.6",
"shadcn": "^3.5.0",
"tailwindcss": "^4.1.16",
diff --git a/create-agentic-app/template/src/app/api/chat/route.ts b/create-agentic-app/template/src/app/api/chat/route.ts
index 68ee73f..794e714 100644
--- a/create-agentic-app/template/src/app/api/chat/route.ts
+++ b/create-agentic-app/template/src/app/api/chat/route.ts
@@ -1,11 +1,11 @@
-import { openai } from "@ai-sdk/openai";
+import { openrouter } from "@openrouter/ai-sdk-provider";
import { streamText, UIMessage, convertToModelMessages } from "ai";
export async function POST(req: Request) {
const { messages }: { messages: UIMessage[] } = await req.json();
const result = streamText({
- model: openai(process.env.OPENAI_MODEL || "gpt-5-mini"),
+ model: openrouter(process.env.OPENROUTER_MODEL || "openai/gpt-5-mini"),
messages: convertToModelMessages(messages),
});
diff --git a/env.example b/env.example
index c71be99..1854928 100644
--- a/env.example
+++ b/env.example
@@ -10,9 +10,11 @@ BETTER_AUTH_SECRET=qtD4Ssa0t5jY7ewALgai97sKhAtn7Ysc
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
-# AI Integration (Optional - for chat functionality)
-OPENAI_API_KEY=
-OPENAI_MODEL="gpt-5-mini"
+# AI Integration via OpenRouter (Optional - for chat functionality)
+# Get your API key from: https://openrouter.ai/settings/keys
+# View available models at: https://openrouter.ai/models
+OPENROUTER_API_KEY=
+OPENROUTER_MODEL="openai/gpt-5-mini"
# Optional - for vector search only
OPENAI_EMBEDDING_MODEL="text-embedding-3-large"
diff --git a/package.json b/package.json
index 856f37b..ffa2a7b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "agentic-coding-starter-kit",
- "version": "0.1.0",
+ "version": "0.1.1",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
@@ -17,14 +17,15 @@
"sync-template": "node create-agentic-app/scripts/sync-templates.js"
},
"dependencies": {
- "@ai-sdk/openai": "^2.0.53",
- "@ai-sdk/react": "^2.0.78",
+ "@ai-sdk/openai": "^2.0.60",
+ "@ai-sdk/react": "^2.0.86",
+ "@openrouter/ai-sdk-provider": "^1.2.0",
"@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-slot": "^1.2.3",
- "ai": "^5.0.78",
- "better-auth": "^1.3.29",
+ "ai": "^5.0.86",
+ "better-auth": "^1.3.34",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"drizzle-orm": "^0.44.7",
@@ -42,12 +43,12 @@
"devDependencies": {
"@eslint/eslintrc": "^3.3.1",
"@tailwindcss/postcss": "^4.1.16",
- "@types/node": "^20.19.23",
- "@types/pg": "^8.15.5",
+ "@types/node": "^20.19.24",
+ "@types/pg": "^8.15.6",
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
- "drizzle-kit": "^0.31.5",
- "eslint": "^9.38.0",
+ "drizzle-kit": "^0.31.6",
+ "eslint": "^9.39.0",
"eslint-config-next": "15.4.6",
"shadcn": "^3.5.0",
"tailwindcss": "^4.1.16",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 99b8958..7c0b097 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,11 +9,14 @@ importers:
.:
dependencies:
'@ai-sdk/openai':
- specifier: ^2.0.53
- version: 2.0.53(zod@4.1.12)
+ specifier: ^2.0.60
+ version: 2.0.60(zod@4.1.12)
'@ai-sdk/react':
- specifier: ^2.0.78
- version: 2.0.78(react@19.1.0)(zod@4.1.12)
+ specifier: ^2.0.86
+ version: 2.0.86(react@19.1.0)(zod@4.1.12)
+ '@openrouter/ai-sdk-provider':
+ specifier: ^1.2.0
+ version: 1.2.0(ai@5.0.86(zod@4.1.12))(zod@4.1.12)
'@radix-ui/react-avatar':
specifier: ^1.1.10
version: 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -27,11 +30,11 @@ importers:
specifier: ^1.2.3
version: 1.2.3(@types/react@19.2.2)(react@19.1.0)
ai:
- specifier: ^5.0.78
- version: 5.0.78(zod@4.1.12)
+ specifier: ^5.0.86
+ version: 5.0.86(zod@4.1.12)
better-auth:
- specifier: ^1.3.29
- version: 1.3.29(next@15.4.6(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ specifier: ^1.3.34
+ version: 1.3.34(next@15.4.6(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
class-variance-authority:
specifier: ^0.7.1
version: 0.7.1
@@ -40,7 +43,7 @@ importers:
version: 2.1.1
drizzle-orm:
specifier: ^0.44.7
- version: 0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.8)(pg@8.16.3)(postgres@3.4.7)
+ version: 0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(kysely@0.28.8)(pg@8.16.3)(postgres@3.4.7)
lucide-react:
specifier: ^0.539.0
version: 0.539.0(react@19.1.0)
@@ -79,11 +82,11 @@ importers:
specifier: ^4.1.16
version: 4.1.16
'@types/node':
- specifier: ^20.19.23
- version: 20.19.23
+ specifier: ^20.19.24
+ version: 20.19.24
'@types/pg':
- specifier: ^8.15.5
- version: 8.15.5
+ specifier: ^8.15.6
+ version: 8.15.6
'@types/react':
specifier: ^19.2.2
version: 19.2.2
@@ -91,17 +94,17 @@ importers:
specifier: ^19.2.2
version: 19.2.2(@types/react@19.2.2)
drizzle-kit:
- specifier: ^0.31.5
- version: 0.31.5
+ specifier: ^0.31.6
+ version: 0.31.6
eslint:
- specifier: ^9.38.0
- version: 9.38.0(jiti@2.6.1)
+ specifier: ^9.39.0
+ version: 9.39.0(jiti@2.6.1)
eslint-config-next:
specifier: 15.4.6
- version: 15.4.6(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ version: 15.4.6(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
shadcn:
specifier: ^3.5.0
- version: 3.5.0(@types/node@20.19.23)(typescript@5.9.3)
+ version: 3.5.0(@types/node@20.19.24)(typescript@5.9.3)
tailwindcss:
specifier: ^4.1.16
version: 4.1.16
@@ -114,20 +117,20 @@ importers:
packages:
- '@ai-sdk/gateway@2.0.1':
- resolution: {integrity: sha512-vPVIbnP35ZnayS937XLo85vynR85fpBQWHCdUweq7apzqFOTU2YkUd4V3msebEHbQ2Zro60ZShDDy9SMiyWTqA==}
+ '@ai-sdk/gateway@2.0.5':
+ resolution: {integrity: sha512-5TTDSl0USWY6YGnb4QmJGplFZhk+p9OT7hZevAaER6OGiZ17LB1GypsGYDpNo/MiVMklk8kX4gk6p1/R/EiJ8Q==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/openai@2.0.53':
- resolution: {integrity: sha512-GIkR3+Fyif516ftXv+YPSPstnAHhcZxNoR2s8uSHhQ1yBT7I7aQYTVwpjAuYoT3GR+TeP50q7onj2/nDRbT2FQ==}
+ '@ai-sdk/openai@2.0.60':
+ resolution: {integrity: sha512-h7Bg3nY4UYyBj2HDmsFzPxuBhK4ZGGkC2ssZGXOov+81DVSiRJXR4NFfsxbWW/7c6uMCP/YmZ8MiWtvsKMSCHg==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/provider-utils@3.0.12':
- resolution: {integrity: sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg==}
+ '@ai-sdk/provider-utils@3.0.15':
+ resolution: {integrity: sha512-kOc6Pxb7CsRlNt+sLZKL7/VGQUd7ccl3/tIK+Bqf5/QhHR0Qm3qRBMz1IwU1RmjJEZA73x+KB5cUckbDl2WF7Q==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
@@ -136,8 +139,8 @@ packages:
resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==}
engines: {node: '>=18'}
- '@ai-sdk/react@2.0.78':
- resolution: {integrity: sha512-f5inDBHJyUEzbtNxc9HiTxbcGjtot0uuc//0/khGrl8IZlLxw+yTxO/T1Qq95Rw5QPwTx9/Aw7wIZei3qws9hA==}
+ '@ai-sdk/react@2.0.86':
+ resolution: {integrity: sha512-vqxbbMOKMpYFHZy0aYEO4jtDcKaFCHL/rEtTqAIDlH14GT0uusSjN99gkDHHG3EnbyJSQmk9gqtqbd1GDwlRRg==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
@@ -283,8 +286,8 @@ packages:
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
- '@better-auth/core@1.3.29':
- resolution: {integrity: sha512-Ka2mg4qZACFaLY7DOGFXv1Ma8CkF17k0ClUd2U/ZJbbSoEPI5gnVguEmakJB6HFYswszeZh2295IFORtW9wf7A==}
+ '@better-auth/core@1.3.34':
+ resolution: {integrity: sha512-rt/Bgl0Xa8OQ2DUMKCZEJ8vL9kUw4NCJsBP9Sj9uRhbsK8NEMPiznUOFMkUY2FvrslvfKN7H/fivwyHz9c7HzQ==}
peerDependencies:
'@better-auth/utils': 0.3.0
'@better-fetch/fetch': 1.1.18
@@ -293,8 +296,8 @@ packages:
kysely: ^0.28.5
nanostores: ^1.0.1
- '@better-auth/telemetry@1.3.29':
- resolution: {integrity: sha512-1BFh3YulYDrwWcUkfEWddcrcApACyI4wtrgq3NBd9y+tilBRjWTCWEPuRqJrfM3a5F1ZSqsvOYfFG1XZbkxlVw==}
+ '@better-auth/telemetry@1.3.34':
+ resolution: {integrity: sha512-aQZ3wN90YMqV49diWxAMe1k7s2qb55KCsedCZne5PlgCjU4s3YtnqyjC5FEpzw2KY8l8rvR7DMAsDl13NjObKA==}
'@better-auth/utils@0.3.0':
resolution: {integrity: sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==}
@@ -315,11 +318,11 @@ packages:
peerDependencies:
'@noble/ciphers': ^1.0.0
- '@emnapi/core@1.6.0':
- resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==}
+ '@emnapi/core@1.7.0':
+ resolution: {integrity: sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==}
- '@emnapi/runtime@1.6.0':
- resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==}
+ '@emnapi/runtime@1.7.0':
+ resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==}
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
@@ -332,8 +335,8 @@ packages:
resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
deprecated: 'Merged into tsx: https://tsx.is'
- '@esbuild/aix-ppc64@0.25.11':
- resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -344,8 +347,8 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.25.11':
- resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==}
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -356,8 +359,8 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.25.11':
- resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==}
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -368,8 +371,8 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.25.11':
- resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==}
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -380,8 +383,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.25.11':
- resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==}
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -392,8 +395,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.11':
- resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==}
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -404,8 +407,8 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.25.11':
- resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==}
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -416,8 +419,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.11':
- resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==}
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -428,8 +431,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.25.11':
- resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==}
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -440,8 +443,8 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.25.11':
- resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==}
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -452,8 +455,8 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.25.11':
- resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==}
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -464,8 +467,8 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.25.11':
- resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==}
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -476,8 +479,8 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.25.11':
- resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==}
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -488,8 +491,8 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.25.11':
- resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==}
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -500,8 +503,8 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.11':
- resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==}
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -512,8 +515,8 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.25.11':
- resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==}
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -524,14 +527,14 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.25.11':
- resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==}
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.11':
- resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==}
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
@@ -542,14 +545,14 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.11':
- resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==}
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.11':
- resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==}
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
@@ -560,14 +563,14 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.11':
- resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==}
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.25.11':
- resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==}
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
@@ -578,8 +581,8 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.25.11':
- resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==}
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -590,8 +593,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.25.11':
- resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==}
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -602,8 +605,8 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.25.11':
- resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==}
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -614,8 +617,8 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.25.11':
- resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==}
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -634,28 +637,28 @@ packages:
resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-helpers@0.4.1':
- resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==}
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.16.0':
- resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==}
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.38.0':
- resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==}
+ '@eslint/js@9.39.0':
+ resolution: {integrity: sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7':
resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.4.0':
- resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==}
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@floating-ui/core@1.7.3':
@@ -990,6 +993,13 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
+ '@openrouter/ai-sdk-provider@1.2.0':
+ resolution: {integrity: sha512-stuIwq7Yb7DNmk3GuCtz+oS3nZOY4TXEV3V5KsknDGQN7Fpu3KRMQVWRc1J073xKdf0FC9EHOctSyzsACmp5Ag==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ ai: ^5.0.0
+ zod: ^3.24.1 || ^v4
+
'@opentelemetry/api@1.9.0':
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
@@ -1334,8 +1344,8 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@rushstack/eslint-patch@1.14.0':
- resolution: {integrity: sha512-WJFej426qe4RWOm9MMtP4V3CV4AucXolQty+GRgAWLgQXmpCuwzs7hEpxxhSc/znXUSxum9d/P/32MW0FlAAlA==}
+ '@rushstack/eslint-patch@1.14.1':
+ resolution: {integrity: sha512-jGTk8UD/RdjsNZW8qq10r0RBvxL8OWtoT+kImlzPDFilmozzM+9QmIJsmze9UiSBrFU45ZxhTYBypn9q9z/VfQ==}
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
@@ -1475,11 +1485,11 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/node@20.19.23':
- resolution: {integrity: sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==}
+ '@types/node@20.19.24':
+ resolution: {integrity: sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==}
- '@types/pg@8.15.5':
- resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==}
+ '@types/pg@8.15.6':
+ resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==}
'@types/react-dom@19.2.2':
resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==}
@@ -1677,8 +1687,8 @@ packages:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
- ai@5.0.78:
- resolution: {integrity: sha512-ec77fmQwJGLduswMrW4AAUGSOiu8dZaIwMmWHHGKsrMUFFS6ugfkTyx0srtuKYHNRRLRC2dT7cPirnUl98VnxA==}
+ ai@5.0.86:
+ resolution: {integrity: sha512-ooHwNTkLdedFf98iQhtSc5btc/P4UuXuOpYneoifq0190vqosLunNdW8Hs6CiE0Am7YOGNplDK56JIPlHZIL4w==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
@@ -1778,12 +1788,12 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- baseline-browser-mapping@2.8.20:
- resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==}
+ baseline-browser-mapping@2.8.23:
+ resolution: {integrity: sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ==}
hasBin: true
- better-auth@1.3.29:
- resolution: {integrity: sha512-1va1XZLTQme3DX33PgHqwwVyOJya5H0+ozT6BhOjTnwecC50I75F0OqqTwINq4XZ0+GuD3bl3I55RiFP49jStw==}
+ better-auth@1.3.34:
+ resolution: {integrity: sha512-LWA52SlvnUBJRbN8VLSTLILPomZY3zZAiLxVJCeSQ5uVmaIKkMBhERitkfJcXB9RJcfl4uP+3EqKkb6hX1/uiw==}
peerDependencies:
'@lynx-js/react': '*'
'@sveltejs/kit': '*'
@@ -1856,8 +1866,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001751:
- resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==}
+ caniuse-lite@1.0.30001753:
+ resolution: {integrity: sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1925,8 +1935,8 @@ packages:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
- commander@14.0.1:
- resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==}
+ commander@14.0.2:
+ resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
engines: {node: '>=20'}
concat-map@0.0.1:
@@ -2070,8 +2080,8 @@ packages:
resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
engines: {node: '>=12'}
- drizzle-kit@0.31.5:
- resolution: {integrity: sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==}
+ drizzle-kit@0.31.6:
+ resolution: {integrity: sha512-/B4e/4pwnx25QwD5xXgdpo1S+077a2VZdosXbItE/oNmUgQwZydGDz9qJYmnQl/b+5IX0rLfwRhrPnroGtrg8Q==}
hasBin: true
drizzle-orm@0.44.7:
@@ -2177,8 +2187,8 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.240:
- resolution: {integrity: sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==}
+ electron-to-chromium@1.5.244:
+ resolution: {integrity: sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==}
emoji-regex@10.6.0:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
@@ -2246,8 +2256,8 @@ packages:
engines: {node: '>=12'}
hasBin: true
- esbuild@0.25.11:
- resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==}
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
engines: {node: '>=18'}
hasBin: true
@@ -2348,8 +2358,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.38.0:
- resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==}
+ eslint@9.39.0:
+ resolution: {integrity: sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -2588,8 +2598,8 @@ packages:
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
- graphql@16.11.0:
- resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==}
+ graphql@16.12.0:
+ resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
has-bigints@1.1.0:
@@ -2674,8 +2684,8 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- inline-style-parser@0.2.4:
- resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
+ inline-style-parser@0.2.6:
+ resolution: {integrity: sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg==}
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
@@ -3163,8 +3173,8 @@ packages:
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines: {node: '>=18'}
- minimatch@10.0.3:
- resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
+ minimatch@10.1.1:
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
engines: {node: 20 || >=22}
minimatch@3.1.2:
@@ -3251,8 +3261,8 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- node-releases@2.0.26:
- resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
@@ -3492,9 +3502,9 @@ packages:
pvtsutils@1.3.6:
resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
- pvutils@1.1.3:
- resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==}
- engines: {node: '>=6.0.0'}
+ pvutils@1.1.5:
+ resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==}
+ engines: {node: '>=16.0.0'}
qs@6.14.0:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
@@ -3659,8 +3669,8 @@ packages:
resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
engines: {node: '>= 18'}
- set-cookie-parser@2.7.1:
- resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
+ set-cookie-parser@2.7.2:
+ resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
@@ -3821,11 +3831,11 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- style-to-js@1.1.18:
- resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==}
+ style-to-js@1.1.19:
+ resolution: {integrity: sha512-Ev+SgeqiNGT1ufsXyVC5RrJRXdrkRJ1Gol9Qw7Pb72YCKJXrBvP0ckZhBeVSrw2m06DJpei2528uIpjMb4TsoQ==}
- style-to-object@1.0.11:
- resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==}
+ style-to-object@1.0.12:
+ resolution: {integrity: sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw==}
styled-jsx@5.1.6:
resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
@@ -4146,20 +4156,20 @@ packages:
snapshots:
- '@ai-sdk/gateway@2.0.1(zod@4.1.12)':
+ '@ai-sdk/gateway@2.0.5(zod@4.1.12)':
dependencies:
'@ai-sdk/provider': 2.0.0
- '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12)
+ '@ai-sdk/provider-utils': 3.0.15(zod@4.1.12)
'@vercel/oidc': 3.0.3
zod: 4.1.12
- '@ai-sdk/openai@2.0.53(zod@4.1.12)':
+ '@ai-sdk/openai@2.0.60(zod@4.1.12)':
dependencies:
'@ai-sdk/provider': 2.0.0
- '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12)
+ '@ai-sdk/provider-utils': 3.0.15(zod@4.1.12)
zod: 4.1.12
- '@ai-sdk/provider-utils@3.0.12(zod@4.1.12)':
+ '@ai-sdk/provider-utils@3.0.15(zod@4.1.12)':
dependencies:
'@ai-sdk/provider': 2.0.0
'@standard-schema/spec': 1.0.0
@@ -4170,10 +4180,10 @@ snapshots:
dependencies:
json-schema: 0.4.0
- '@ai-sdk/react@2.0.78(react@19.1.0)(zod@4.1.12)':
+ '@ai-sdk/react@2.0.86(react@19.1.0)(zod@4.1.12)':
dependencies:
- '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12)
- ai: 5.0.78(zod@4.1.12)
+ '@ai-sdk/provider-utils': 3.0.15(zod@4.1.12)
+ ai: 5.0.86(zod@4.1.12)
react: 19.1.0
swr: 2.3.6(react@19.1.0)
throttleit: 2.1.0
@@ -4375,7 +4385,7 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@better-auth/core@1.3.29(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)':
+ '@better-auth/core@1.3.34(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)':
dependencies:
'@better-auth/utils': 0.3.0
'@better-fetch/fetch': 1.1.18
@@ -4385,9 +4395,9 @@ snapshots:
nanostores: 1.0.1
zod: 4.1.12
- '@better-auth/telemetry@1.3.29(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)':
+ '@better-auth/telemetry@1.3.34(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)':
dependencies:
- '@better-auth/core': 1.3.29(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
+ '@better-auth/core': 1.3.34(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
'@better-auth/utils': 0.3.0
'@better-fetch/fetch': 1.1.18
transitivePeerDependencies:
@@ -4418,13 +4428,13 @@ snapshots:
dependencies:
'@noble/ciphers': 1.3.0
- '@emnapi/core@1.6.0':
+ '@emnapi/core@1.7.0':
dependencies:
'@emnapi/wasi-threads': 1.1.0
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.6.0':
+ '@emnapi/runtime@1.7.0':
dependencies:
tslib: 2.8.1
optional: true
@@ -4444,153 +4454,153 @@ snapshots:
'@esbuild-kit/core-utils': 3.3.2
get-tsconfig: 4.13.0
- '@esbuild/aix-ppc64@0.25.11':
+ '@esbuild/aix-ppc64@0.25.12':
optional: true
'@esbuild/android-arm64@0.18.20':
optional: true
- '@esbuild/android-arm64@0.25.11':
+ '@esbuild/android-arm64@0.25.12':
optional: true
'@esbuild/android-arm@0.18.20':
optional: true
- '@esbuild/android-arm@0.25.11':
+ '@esbuild/android-arm@0.25.12':
optional: true
'@esbuild/android-x64@0.18.20':
optional: true
- '@esbuild/android-x64@0.25.11':
+ '@esbuild/android-x64@0.25.12':
optional: true
'@esbuild/darwin-arm64@0.18.20':
optional: true
- '@esbuild/darwin-arm64@0.25.11':
+ '@esbuild/darwin-arm64@0.25.12':
optional: true
'@esbuild/darwin-x64@0.18.20':
optional: true
- '@esbuild/darwin-x64@0.25.11':
+ '@esbuild/darwin-x64@0.25.12':
optional: true
'@esbuild/freebsd-arm64@0.18.20':
optional: true
- '@esbuild/freebsd-arm64@0.25.11':
+ '@esbuild/freebsd-arm64@0.25.12':
optional: true
'@esbuild/freebsd-x64@0.18.20':
optional: true
- '@esbuild/freebsd-x64@0.25.11':
+ '@esbuild/freebsd-x64@0.25.12':
optional: true
'@esbuild/linux-arm64@0.18.20':
optional: true
- '@esbuild/linux-arm64@0.25.11':
+ '@esbuild/linux-arm64@0.25.12':
optional: true
'@esbuild/linux-arm@0.18.20':
optional: true
- '@esbuild/linux-arm@0.25.11':
+ '@esbuild/linux-arm@0.25.12':
optional: true
'@esbuild/linux-ia32@0.18.20':
optional: true
- '@esbuild/linux-ia32@0.25.11':
+ '@esbuild/linux-ia32@0.25.12':
optional: true
'@esbuild/linux-loong64@0.18.20':
optional: true
- '@esbuild/linux-loong64@0.25.11':
+ '@esbuild/linux-loong64@0.25.12':
optional: true
'@esbuild/linux-mips64el@0.18.20':
optional: true
- '@esbuild/linux-mips64el@0.25.11':
+ '@esbuild/linux-mips64el@0.25.12':
optional: true
'@esbuild/linux-ppc64@0.18.20':
optional: true
- '@esbuild/linux-ppc64@0.25.11':
+ '@esbuild/linux-ppc64@0.25.12':
optional: true
'@esbuild/linux-riscv64@0.18.20':
optional: true
- '@esbuild/linux-riscv64@0.25.11':
+ '@esbuild/linux-riscv64@0.25.12':
optional: true
'@esbuild/linux-s390x@0.18.20':
optional: true
- '@esbuild/linux-s390x@0.25.11':
+ '@esbuild/linux-s390x@0.25.12':
optional: true
'@esbuild/linux-x64@0.18.20':
optional: true
- '@esbuild/linux-x64@0.25.11':
+ '@esbuild/linux-x64@0.25.12':
optional: true
- '@esbuild/netbsd-arm64@0.25.11':
+ '@esbuild/netbsd-arm64@0.25.12':
optional: true
'@esbuild/netbsd-x64@0.18.20':
optional: true
- '@esbuild/netbsd-x64@0.25.11':
+ '@esbuild/netbsd-x64@0.25.12':
optional: true
- '@esbuild/openbsd-arm64@0.25.11':
+ '@esbuild/openbsd-arm64@0.25.12':
optional: true
'@esbuild/openbsd-x64@0.18.20':
optional: true
- '@esbuild/openbsd-x64@0.25.11':
+ '@esbuild/openbsd-x64@0.25.12':
optional: true
- '@esbuild/openharmony-arm64@0.25.11':
+ '@esbuild/openharmony-arm64@0.25.12':
optional: true
'@esbuild/sunos-x64@0.18.20':
optional: true
- '@esbuild/sunos-x64@0.25.11':
+ '@esbuild/sunos-x64@0.25.12':
optional: true
'@esbuild/win32-arm64@0.18.20':
optional: true
- '@esbuild/win32-arm64@0.25.11':
+ '@esbuild/win32-arm64@0.25.12':
optional: true
'@esbuild/win32-ia32@0.18.20':
optional: true
- '@esbuild/win32-ia32@0.25.11':
+ '@esbuild/win32-ia32@0.25.12':
optional: true
'@esbuild/win32-x64@0.18.20':
optional: true
- '@esbuild/win32-x64@0.25.11':
+ '@esbuild/win32-x64@0.25.12':
optional: true
- '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.0(jiti@2.6.1))':
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
@@ -4603,11 +4613,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.4.1':
+ '@eslint/config-helpers@0.4.2':
dependencies:
- '@eslint/core': 0.16.0
+ '@eslint/core': 0.17.0
- '@eslint/core@0.16.0':
+ '@eslint/core@0.17.0':
dependencies:
'@types/json-schema': 7.0.15
@@ -4625,13 +4635,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.38.0': {}
+ '@eslint/js@9.39.0': {}
'@eslint/object-schema@2.1.7': {}
- '@eslint/plugin-kit@0.4.0':
+ '@eslint/plugin-kit@0.4.1':
dependencies:
- '@eslint/core': 0.16.0
+ '@eslint/core': 0.17.0
levn: 0.4.1
'@floating-ui/core@1.7.3':
@@ -4741,7 +4751,7 @@ snapshots:
'@img/sharp-wasm32@0.34.4':
dependencies:
- '@emnapi/runtime': 1.6.0
+ '@emnapi/runtime': 1.7.0
optional: true
'@img/sharp-win32-arm64@0.34.4':
@@ -4755,31 +4765,31 @@ snapshots:
'@inquirer/ansi@1.0.1': {}
- '@inquirer/confirm@5.1.19(@types/node@20.19.23)':
+ '@inquirer/confirm@5.1.19(@types/node@20.19.24)':
dependencies:
- '@inquirer/core': 10.3.0(@types/node@20.19.23)
- '@inquirer/type': 3.0.9(@types/node@20.19.23)
+ '@inquirer/core': 10.3.0(@types/node@20.19.24)
+ '@inquirer/type': 3.0.9(@types/node@20.19.24)
optionalDependencies:
- '@types/node': 20.19.23
+ '@types/node': 20.19.24
- '@inquirer/core@10.3.0(@types/node@20.19.23)':
+ '@inquirer/core@10.3.0(@types/node@20.19.24)':
dependencies:
'@inquirer/ansi': 1.0.1
'@inquirer/figures': 1.0.14
- '@inquirer/type': 3.0.9(@types/node@20.19.23)
+ '@inquirer/type': 3.0.9(@types/node@20.19.24)
cli-width: 4.1.0
mute-stream: 2.0.0
signal-exit: 4.1.0
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 20.19.23
+ '@types/node': 20.19.24
'@inquirer/figures@1.0.14': {}
- '@inquirer/type@3.0.9(@types/node@20.19.23)':
+ '@inquirer/type@3.0.9(@types/node@20.19.24)':
optionalDependencies:
- '@types/node': 20.19.23
+ '@types/node': 20.19.24
'@isaacs/balanced-match@4.0.1': {}
@@ -4836,8 +4846,8 @@ snapshots:
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
- '@emnapi/core': 1.6.0
- '@emnapi/runtime': 1.6.0
+ '@emnapi/core': 1.7.0
+ '@emnapi/runtime': 1.7.0
'@tybys/wasm-util': 0.10.1
optional: true
@@ -4906,6 +4916,11 @@ snapshots:
'@open-draft/until@2.1.0': {}
+ '@openrouter/ai-sdk-provider@1.2.0(ai@5.0.86(zod@4.1.12))(zod@4.1.12)':
+ dependencies:
+ ai: 5.0.86(zod@4.1.12)
+ zod: 4.1.12
+
'@opentelemetry/api@1.9.0': {}
'@peculiar/asn1-android@2.5.0':
@@ -5288,7 +5303,7 @@ snapshots:
'@rtsao/scc@1.1.0': {}
- '@rushstack/eslint-patch@1.14.0': {}
+ '@rushstack/eslint-patch@1.14.1': {}
'@sec-ant/readable-stream@0.4.1': {}
@@ -5385,7 +5400,7 @@ snapshots:
'@ts-morph/common@0.27.0':
dependencies:
fast-glob: 3.3.3
- minimatch: 10.0.3
+ minimatch: 10.1.1
path-browserify: 1.0.1
'@tybys/wasm-util@0.10.1':
@@ -5417,13 +5432,13 @@ snapshots:
'@types/ms@2.1.0': {}
- '@types/node@20.19.23':
+ '@types/node@20.19.24':
dependencies:
undici-types: 6.21.0
- '@types/pg@8.15.5':
+ '@types/pg@8.15.6':
dependencies:
- '@types/node': 20.19.23
+ '@types/node': 20.19.24
pg-protocol: 1.10.3
pg-types: 2.2.0
@@ -5441,15 +5456,15 @@ snapshots:
'@types/unist@3.0.3': {}
- '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/scope-manager': 8.46.2
- '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/type-utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.46.2
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -5458,14 +5473,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.46.2
'@typescript-eslint/types': 8.46.2
'@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.46.2
debug: 4.4.3
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -5488,13 +5503,13 @@ snapshots:
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/types': 8.46.2
'@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
@@ -5518,13 +5533,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1))
'@typescript-eslint/scope-manager': 8.46.2
'@typescript-eslint/types': 8.46.2
'@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -5610,11 +5625,11 @@ snapshots:
agent-base@7.1.4: {}
- ai@5.0.78(zod@4.1.12):
+ ai@5.0.86(zod@4.1.12):
dependencies:
- '@ai-sdk/gateway': 2.0.1(zod@4.1.12)
+ '@ai-sdk/gateway': 2.0.5(zod@4.1.12)
'@ai-sdk/provider': 2.0.0
- '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12)
+ '@ai-sdk/provider-utils': 3.0.15(zod@4.1.12)
'@opentelemetry/api': 1.9.0
zod: 4.1.12
@@ -5713,7 +5728,7 @@ snapshots:
asn1js@3.0.6:
dependencies:
pvtsutils: 1.3.6
- pvutils: 1.1.3
+ pvutils: 1.1.5
tslib: 2.8.1
ast-types-flow@0.0.8: {}
@@ -5736,12 +5751,12 @@ snapshots:
balanced-match@1.0.2: {}
- baseline-browser-mapping@2.8.20: {}
+ baseline-browser-mapping@2.8.23: {}
- better-auth@1.3.29(next@15.4.6(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ better-auth@1.3.34(next@15.4.6(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- '@better-auth/core': 1.3.29(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
- '@better-auth/telemetry': 1.3.29(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
+ '@better-auth/core': 1.3.34(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
+ '@better-auth/telemetry': 1.3.34(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
'@better-auth/utils': 0.3.0
'@better-fetch/fetch': 1.1.18
'@noble/ciphers': 2.0.1
@@ -5764,7 +5779,7 @@ snapshots:
'@better-auth/utils': 0.3.0
'@better-fetch/fetch': 1.1.18
rou3: 0.5.1
- set-cookie-parser: 2.7.1
+ set-cookie-parser: 2.7.2
uncrypto: 0.1.3
body-parser@2.2.0:
@@ -5796,10 +5811,10 @@ snapshots:
browserslist@4.27.0:
dependencies:
- baseline-browser-mapping: 2.8.20
- caniuse-lite: 1.0.30001751
- electron-to-chromium: 1.5.240
- node-releases: 2.0.26
+ baseline-browser-mapping: 2.8.23
+ caniuse-lite: 1.0.30001753
+ electron-to-chromium: 1.5.244
+ node-releases: 2.0.27
update-browserslist-db: 1.1.4(browserslist@4.27.0)
buffer-from@1.1.2: {}
@@ -5825,7 +5840,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001751: {}
+ caniuse-lite@1.0.30001753: {}
ccount@2.0.1: {}
@@ -5878,7 +5893,7 @@ snapshots:
commander@11.1.0: {}
- commander@14.0.1: {}
+ commander@14.0.2: {}
concat-map@0.0.1: {}
@@ -5992,19 +6007,19 @@ snapshots:
dotenv@17.2.3: {}
- drizzle-kit@0.31.5:
+ drizzle-kit@0.31.6:
dependencies:
'@drizzle-team/brocli': 0.10.2
'@esbuild-kit/esm-loader': 2.6.5
- esbuild: 0.25.11
- esbuild-register: 3.6.0(esbuild@0.25.11)
+ esbuild: 0.25.12
+ esbuild-register: 3.6.0(esbuild@0.25.12)
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.8)(pg@8.16.3)(postgres@3.4.7):
+ drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(kysely@0.28.8)(pg@8.16.3)(postgres@3.4.7):
optionalDependencies:
'@opentelemetry/api': 1.9.0
- '@types/pg': 8.15.5
+ '@types/pg': 8.15.6
kysely: 0.28.8
pg: 8.16.3
postgres: 3.4.7
@@ -6024,7 +6039,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.240: {}
+ electron-to-chromium@1.5.244: {}
emoji-regex@10.6.0: {}
@@ -6146,10 +6161,10 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- esbuild-register@3.6.0(esbuild@0.25.11):
+ esbuild-register@3.6.0(esbuild@0.25.12):
dependencies:
debug: 4.4.3
- esbuild: 0.25.11
+ esbuild: 0.25.12
transitivePeerDependencies:
- supports-color
@@ -6178,34 +6193,34 @@ snapshots:
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
- esbuild@0.25.11:
+ esbuild@0.25.12:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.11
- '@esbuild/android-arm': 0.25.11
- '@esbuild/android-arm64': 0.25.11
- '@esbuild/android-x64': 0.25.11
- '@esbuild/darwin-arm64': 0.25.11
- '@esbuild/darwin-x64': 0.25.11
- '@esbuild/freebsd-arm64': 0.25.11
- '@esbuild/freebsd-x64': 0.25.11
- '@esbuild/linux-arm': 0.25.11
- '@esbuild/linux-arm64': 0.25.11
- '@esbuild/linux-ia32': 0.25.11
- '@esbuild/linux-loong64': 0.25.11
- '@esbuild/linux-mips64el': 0.25.11
- '@esbuild/linux-ppc64': 0.25.11
- '@esbuild/linux-riscv64': 0.25.11
- '@esbuild/linux-s390x': 0.25.11
- '@esbuild/linux-x64': 0.25.11
- '@esbuild/netbsd-arm64': 0.25.11
- '@esbuild/netbsd-x64': 0.25.11
- '@esbuild/openbsd-arm64': 0.25.11
- '@esbuild/openbsd-x64': 0.25.11
- '@esbuild/openharmony-arm64': 0.25.11
- '@esbuild/sunos-x64': 0.25.11
- '@esbuild/win32-arm64': 0.25.11
- '@esbuild/win32-ia32': 0.25.11
- '@esbuild/win32-x64': 0.25.11
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
escalade@3.2.0: {}
@@ -6213,19 +6228,19 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-next@15.4.6(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3):
+ eslint-config-next@15.4.6(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3):
dependencies:
'@next/eslint-plugin-next': 15.4.6
- '@rushstack/eslint-patch': 1.14.0
- '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.38.0(jiti@2.6.1)
+ '@rushstack/eslint-patch': 1.14.1
+ '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-react: 7.37.5(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-react-hooks: 5.2.0(eslint@9.38.0(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.0(jiti@2.6.1))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.0(jiti@2.6.1))
+ eslint-plugin-react: 7.37.5(eslint@9.39.0(jiti@2.6.1))
+ eslint-plugin-react-hooks: 5.2.0(eslint@9.39.0(jiti@2.6.1))
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
@@ -6241,33 +6256,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.38.0(jiti@2.6.1)):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.0(jiti@2.6.1)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.3
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
get-tsconfig: 4.13.0
is-bun-module: 2.0.0
stable-hash: 0.0.5
tinyglobby: 0.2.15
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.38.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.0(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.38.0(jiti@2.6.1)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.0(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.38.0(jiti@2.6.1)
+ '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.38.0(jiti@2.6.1))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.0(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.0(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -6276,9 +6291,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.38.0(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.0(jiti@2.6.1))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -6290,13 +6305,13 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.0(jiti@2.6.1)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.9
@@ -6306,7 +6321,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -6315,11 +6330,11 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-react-hooks@5.2.0(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-react-hooks@5.2.0(eslint@9.39.0(jiti@2.6.1)):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
- eslint-plugin-react@7.37.5(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-react@7.37.5(eslint@9.39.0(jiti@2.6.1)):
dependencies:
array-includes: 3.1.9
array.prototype.findlast: 1.2.5
@@ -6327,7 +6342,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.0(jiti@2.6.1)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -6350,16 +6365,16 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.38.0(jiti@2.6.1):
+ eslint@9.39.0(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.1
- '@eslint/config-helpers': 0.4.1
- '@eslint/core': 0.16.0
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
'@eslint/eslintrc': 3.3.1
- '@eslint/js': 9.38.0
- '@eslint/plugin-kit': 0.4.0
+ '@eslint/js': 9.39.0
+ '@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
@@ -6659,7 +6674,7 @@ snapshots:
graphemer@1.4.0: {}
- graphql@16.11.0: {}
+ graphql@16.12.0: {}
has-bigints@1.1.0: {}
@@ -6697,7 +6712,7 @@ snapshots:
mdast-util-mdxjs-esm: 2.0.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
- style-to-js: 1.1.18
+ style-to-js: 1.1.19
unist-util-position: 5.0.0
vfile-message: 4.0.3
transitivePeerDependencies:
@@ -6751,7 +6766,7 @@ snapshots:
inherits@2.0.4: {}
- inline-style-parser@0.2.4: {}
+ inline-style-parser@0.2.6: {}
internal-slot@1.1.0:
dependencies:
@@ -7312,7 +7327,7 @@ snapshots:
mimic-function@5.0.1: {}
- minimatch@10.0.3:
+ minimatch@10.1.1:
dependencies:
'@isaacs/brace-expansion': 5.0.0
@@ -7328,14 +7343,14 @@ snapshots:
ms@2.1.3: {}
- msw@2.11.6(@types/node@20.19.23)(typescript@5.9.3):
+ msw@2.11.6(@types/node@20.19.24)(typescript@5.9.3):
dependencies:
- '@inquirer/confirm': 5.1.19(@types/node@20.19.23)
+ '@inquirer/confirm': 5.1.19(@types/node@20.19.24)
'@mswjs/interceptors': 0.40.0
'@open-draft/deferred-promise': 2.2.0
'@types/statuses': 2.0.6
cookie: 1.0.2
- graphql: 16.11.0
+ graphql: 16.12.0
headers-polyfill: 4.0.3
is-node-process: 1.2.0
outvariant: 1.4.3
@@ -7374,7 +7389,7 @@ snapshots:
dependencies:
'@next/env': 15.4.6
'@swc/helpers': 0.5.15
- caniuse-lite: 1.0.30001751
+ caniuse-lite: 1.0.30001753
postcss: 8.4.31
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
@@ -7402,7 +7417,7 @@ snapshots:
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
- node-releases@2.0.26: {}
+ node-releases@2.0.27: {}
npm-run-path@4.0.1:
dependencies:
@@ -7650,7 +7665,7 @@ snapshots:
dependencies:
tslib: 2.8.1
- pvutils@1.1.3: {}
+ pvutils@1.1.5: {}
qs@6.14.0:
dependencies:
@@ -7865,7 +7880,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- set-cookie-parser@2.7.1: {}
+ set-cookie-parser@2.7.2: {}
set-function-length@1.2.2:
dependencies:
@@ -7891,7 +7906,7 @@ snapshots:
setprototypeof@1.2.0: {}
- shadcn@3.5.0(@types/node@20.19.23)(typescript@5.9.3):
+ shadcn@3.5.0(@types/node@20.19.24)(typescript@5.9.3):
dependencies:
'@antfu/ni': 25.0.0
'@babel/core': 7.28.5
@@ -7901,7 +7916,7 @@ snapshots:
'@dotenvx/dotenvx': 1.51.0
'@modelcontextprotocol/sdk': 1.20.2
browserslist: 4.27.0
- commander: 14.0.1
+ commander: 14.0.2
cosmiconfig: 9.0.0(typescript@5.9.3)
dedent: 1.7.0
deepmerge: 4.3.1
@@ -7912,7 +7927,7 @@ snapshots:
fuzzysort: 3.1.0
https-proxy-agent: 7.0.6
kleur: 4.1.5
- msw: 2.11.6(@types/node@20.19.23)(typescript@5.9.3)
+ msw: 2.11.6(@types/node@20.19.24)(typescript@5.9.3)
node-fetch: 3.3.2
ora: 8.2.0
postcss: 8.5.6
@@ -8116,13 +8131,13 @@ snapshots:
strip-json-comments@3.1.1: {}
- style-to-js@1.1.18:
+ style-to-js@1.1.19:
dependencies:
- style-to-object: 1.0.11
+ style-to-object: 1.0.12
- style-to-object@1.0.11:
+ style-to-object@1.0.12:
dependencies:
- inline-style-parser: 0.2.4
+ inline-style-parser: 0.2.6
styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.1.0):
dependencies:
diff --git a/src/app/api/chat/route.ts b/src/app/api/chat/route.ts
index 68ee73f..794e714 100644
--- a/src/app/api/chat/route.ts
+++ b/src/app/api/chat/route.ts
@@ -1,11 +1,11 @@
-import { openai } from "@ai-sdk/openai";
+import { openrouter } from "@openrouter/ai-sdk-provider";
import { streamText, UIMessage, convertToModelMessages } from "ai";
export async function POST(req: Request) {
const { messages }: { messages: UIMessage[] } = await req.json();
const result = streamText({
- model: openai(process.env.OPENAI_MODEL || "gpt-5-mini"),
+ model: openrouter(process.env.OPENROUTER_MODEL || "openai/gpt-5-mini"),
messages: convertToModelMessages(messages),
});