From 1359758fbfb0951a78306ce033bffcb0175d449b Mon Sep 17 00:00:00 2001 From: 7418 <7418@openclaw.ai> Date: Tue, 10 Mar 2026 20:25:57 +0800 Subject: [PATCH] feat: add marketing site and docs app (apps/site) - Homepage with hero section (typewriter animation, ChatDemo, FlickeringGrid), features section, open-source section (GitHub stars), FAQ accordion, final CTA - Docs powered by fumadocs-ui with i18n (en/zh), custom top nav bar with search, GitHub link, and language switcher - Marketing content system with typed en/zh content files - Custom components: RainbowButton, ScrollNav, ChatDemo animation - Docs pages: Getting Started, Installation, Providers, MCP, Bridge, Assistant Workspace, FAQ - DownloadButton MDX component linking to GitHub Releases - Monorepo workspace config (apps/*, packages/*) - Fix FAQ accordion lint (pure CSS grid-template-rows animation, no useEffect) - Fix RainbowButton empty interface lint error Co-Authored-By: Claude Opus 4.6 --- .gitignore | 5 + apps/site/components.json | 25 + .../docs/en/assistant-workspace/index.mdx | 47 + apps/site/content/docs/en/bridge/index.mdx | 54 + apps/site/content/docs/en/faq.mdx | 70 + apps/site/content/docs/en/index.mdx | 30 + apps/site/content/docs/en/installation.mdx | 61 + apps/site/content/docs/en/mcp/index.mdx | 57 + apps/site/content/docs/en/meta.json | 14 + apps/site/content/docs/en/providers/index.mdx | 77 + .../docs/zh/assistant-workspace/index.mdx | 46 + apps/site/content/docs/zh/bridge/index.mdx | 54 + apps/site/content/docs/zh/faq.mdx | 70 + apps/site/content/docs/zh/index.mdx | 29 + apps/site/content/docs/zh/installation.mdx | 61 + apps/site/content/docs/zh/mcp/index.mdx | 57 + apps/site/content/docs/zh/meta.json | 14 + apps/site/content/docs/zh/providers/index.mdx | 77 + apps/site/content/marketing/en.ts | 237 + apps/site/content/marketing/index.ts | 11 + apps/site/content/marketing/zh.ts | 179 + apps/site/next.config.mjs | 10 + apps/site/package.json | 40 + apps/site/postcss.config.mjs | 8 + apps/site/public/logo.png | Bin 0 -> 301603 bytes apps/site/public/screenshots/bridge.svg | 4 + apps/site/public/screenshots/chat.svg | 4 + apps/site/public/screenshots/mcp-skills.svg | 4 + apps/site/public/screenshots/providers.svg | 4 + apps/site/public/screenshots/workspace.svg | 4 + apps/site/source.config.ts | 11 + .../app/[lang]/(marketing)/community/page.tsx | 33 + .../app/[lang]/(marketing)/download/page.tsx | 31 + .../src/app/[lang]/(marketing)/layout.tsx | 15 + apps/site/src/app/[lang]/(marketing)/page.tsx | 29 + .../src/app/[lang]/docs/[[...slug]]/page.tsx | 62 + apps/site/src/app/[lang]/docs/layout.tsx | 31 + apps/site/src/app/[lang]/layout.tsx | 40 + apps/site/src/app/api/search/route.ts | 9 + apps/site/src/app/global.css | 196 + apps/site/src/app/layout.tsx | 18 + apps/site/src/components/docs/DocsTopNav.tsx | 85 + .../src/components/docs/DownloadButton.tsx | 15 + .../src/components/docs/LanguageSwitcher.tsx | 44 + apps/site/src/components/docs/NavTitle.tsx | 16 + .../components/marketing/AudienceSection.tsx | 31 + .../src/components/marketing/ChatDemo.tsx | 505 ++ .../components/marketing/DocsEntrySection.tsx | 40 + .../src/components/marketing/FAQAccordion.tsx | 72 + .../components/marketing/FeaturesSection.tsx | 43 + .../src/components/marketing/FinalCTA.tsx | 38 + .../src/components/marketing/HeroSection.tsx | 75 + .../site/src/components/marketing/IconMap.tsx | 46 + .../marketing/IntegrationsSection.tsx | 74 + .../marketing/QuickstartSection.tsx | 35 + .../marketing/ScreenshotCarousel.tsx | 114 + .../src/components/marketing/ScrollNav.tsx | 100 + .../src/components/marketing/SiteFooter.tsx | 29 + .../components/marketing/TypewriterWords.tsx | 83 + .../site/src/components/ui/button-variants.ts | 38 + apps/site/src/components/ui/button.tsx | 24 + .../src/components/ui/flickering-grid.tsx | 195 + apps/site/src/components/ui/input.tsx | 20 + .../site/src/components/ui/rainbow-button.tsx | 31 + apps/site/src/components/ui/select.tsx | 201 + apps/site/src/components/ui/separator.tsx | 25 + apps/site/src/components/ui/tooltip.tsx | 66 + apps/site/src/lib/i18n.ts | 8 + apps/site/src/lib/layout.shared.tsx | 40 + apps/site/src/lib/site.config.ts | 33 + apps/site/src/lib/source.ts | 20 + apps/site/src/lib/utils.ts | 6 + apps/site/src/middleware.ts | 8 + apps/site/tsconfig.check.json | 14 + apps/site/tsconfig.json | 45 + docs/exec-plans/README.md | 1 + docs/exec-plans/active/site-and-docs.md | 198 + eslint.config.mjs | 3 + package-lock.json | 4091 ++++++++++++++++- package.json | 1 + tsconfig.json | 2 +- 81 files changed, 8152 insertions(+), 191 deletions(-) create mode 100644 apps/site/components.json create mode 100644 apps/site/content/docs/en/assistant-workspace/index.mdx create mode 100644 apps/site/content/docs/en/bridge/index.mdx create mode 100644 apps/site/content/docs/en/faq.mdx create mode 100644 apps/site/content/docs/en/index.mdx create mode 100644 apps/site/content/docs/en/installation.mdx create mode 100644 apps/site/content/docs/en/mcp/index.mdx create mode 100644 apps/site/content/docs/en/meta.json create mode 100644 apps/site/content/docs/en/providers/index.mdx create mode 100644 apps/site/content/docs/zh/assistant-workspace/index.mdx create mode 100644 apps/site/content/docs/zh/bridge/index.mdx create mode 100644 apps/site/content/docs/zh/faq.mdx create mode 100644 apps/site/content/docs/zh/index.mdx create mode 100644 apps/site/content/docs/zh/installation.mdx create mode 100644 apps/site/content/docs/zh/mcp/index.mdx create mode 100644 apps/site/content/docs/zh/meta.json create mode 100644 apps/site/content/docs/zh/providers/index.mdx create mode 100644 apps/site/content/marketing/en.ts create mode 100644 apps/site/content/marketing/index.ts create mode 100644 apps/site/content/marketing/zh.ts create mode 100644 apps/site/next.config.mjs create mode 100644 apps/site/package.json create mode 100644 apps/site/postcss.config.mjs create mode 100644 apps/site/public/logo.png create mode 100644 apps/site/public/screenshots/bridge.svg create mode 100644 apps/site/public/screenshots/chat.svg create mode 100644 apps/site/public/screenshots/mcp-skills.svg create mode 100644 apps/site/public/screenshots/providers.svg create mode 100644 apps/site/public/screenshots/workspace.svg create mode 100644 apps/site/source.config.ts create mode 100644 apps/site/src/app/[lang]/(marketing)/community/page.tsx create mode 100644 apps/site/src/app/[lang]/(marketing)/download/page.tsx create mode 100644 apps/site/src/app/[lang]/(marketing)/layout.tsx create mode 100644 apps/site/src/app/[lang]/(marketing)/page.tsx create mode 100644 apps/site/src/app/[lang]/docs/[[...slug]]/page.tsx create mode 100644 apps/site/src/app/[lang]/docs/layout.tsx create mode 100644 apps/site/src/app/[lang]/layout.tsx create mode 100644 apps/site/src/app/api/search/route.ts create mode 100644 apps/site/src/app/global.css create mode 100644 apps/site/src/app/layout.tsx create mode 100644 apps/site/src/components/docs/DocsTopNav.tsx create mode 100644 apps/site/src/components/docs/DownloadButton.tsx create mode 100644 apps/site/src/components/docs/LanguageSwitcher.tsx create mode 100644 apps/site/src/components/docs/NavTitle.tsx create mode 100644 apps/site/src/components/marketing/AudienceSection.tsx create mode 100644 apps/site/src/components/marketing/ChatDemo.tsx create mode 100644 apps/site/src/components/marketing/DocsEntrySection.tsx create mode 100644 apps/site/src/components/marketing/FAQAccordion.tsx create mode 100644 apps/site/src/components/marketing/FeaturesSection.tsx create mode 100644 apps/site/src/components/marketing/FinalCTA.tsx create mode 100644 apps/site/src/components/marketing/HeroSection.tsx create mode 100644 apps/site/src/components/marketing/IconMap.tsx create mode 100644 apps/site/src/components/marketing/IntegrationsSection.tsx create mode 100644 apps/site/src/components/marketing/QuickstartSection.tsx create mode 100644 apps/site/src/components/marketing/ScreenshotCarousel.tsx create mode 100644 apps/site/src/components/marketing/ScrollNav.tsx create mode 100644 apps/site/src/components/marketing/SiteFooter.tsx create mode 100644 apps/site/src/components/marketing/TypewriterWords.tsx create mode 100644 apps/site/src/components/ui/button-variants.ts create mode 100644 apps/site/src/components/ui/button.tsx create mode 100644 apps/site/src/components/ui/flickering-grid.tsx create mode 100644 apps/site/src/components/ui/input.tsx create mode 100644 apps/site/src/components/ui/rainbow-button.tsx create mode 100644 apps/site/src/components/ui/select.tsx create mode 100644 apps/site/src/components/ui/separator.tsx create mode 100644 apps/site/src/components/ui/tooltip.tsx create mode 100644 apps/site/src/lib/i18n.ts create mode 100644 apps/site/src/lib/layout.shared.tsx create mode 100644 apps/site/src/lib/site.config.ts create mode 100644 apps/site/src/lib/source.ts create mode 100644 apps/site/src/lib/utils.ts create mode 100644 apps/site/src/middleware.ts create mode 100644 apps/site/tsconfig.check.json create mode 100644 apps/site/tsconfig.json create mode 100644 docs/exec-plans/active/site-and-docs.md diff --git a/.gitignore b/.gitignore index 49e282b..8d2ffe0 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,8 @@ next-env.d.ts # user uploads (runtime data) .codepilot-uploads/ + +# monorepo: site app build artifacts +apps/site/.next/ +apps/site/.source/ +apps/site/node_modules/ diff --git a/apps/site/components.json b/apps/site/components.json new file mode 100644 index 0000000..f3505d3 --- /dev/null +++ b/apps/site/components.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "base-nova", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/app/global.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "rtl": false, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "menuColor": "default", + "menuAccent": "subtle", + "registries": {} +} diff --git a/apps/site/content/docs/en/assistant-workspace/index.mdx b/apps/site/content/docs/en/assistant-workspace/index.mdx new file mode 100644 index 0000000..860c20f --- /dev/null +++ b/apps/site/content/docs/en/assistant-workspace/index.mdx @@ -0,0 +1,47 @@ +--- +title: Assistant Workspace +description: Inspect and manage Claude's working environment. +--- + +The Assistant Workspace gives you visibility into what Claude is doing during a conversation. It shows file changes, tool usage, and the current state of Claude's working context. + +## Features + +### File Inspector + +View the files that Claude has read or modified during the conversation: + +- **File tree** — Browse the project directory structure +- **Diff view** — See exactly what changes Claude made to each file +- **File preview** — Preview files with syntax highlighting + +### Tool Activity + +Monitor Claude's tool usage in real time: + +- See which tools Claude is calling and why +- View tool input/output for debugging +- Track the sequence of operations + +### Context Usage + +Track how much of Claude's context window is being used: + +- **Token count** — Current tokens used vs. available +- **Usage breakdown** — How tokens are distributed across messages, tools, and system context +- **Cost estimate** — Approximate cost based on the active provider's pricing + +## Opening the Workspace + +The workspace can be configured from: + +- Go to **Settings** and open the **Assistant** section (`/settings#assistant`) + +The workspace panel appears as a resizable side panel alongside the chat, and can be toggled from the chat header. + +## Use Cases + +- **Code Review** — Review all file changes Claude has made before committing +- **Debugging** — Inspect tool calls when something isn't working as expected +- **Learning** — Understand how Claude approaches problems by watching its tool usage +- **Cost Management** — Monitor token usage to stay within budget diff --git a/apps/site/content/docs/en/bridge/index.mdx b/apps/site/content/docs/en/bridge/index.mdx new file mode 100644 index 0000000..24260ee --- /dev/null +++ b/apps/site/content/docs/en/bridge/index.mdx @@ -0,0 +1,54 @@ +--- +title: Message Bridge +description: Bridge Claude conversations to messaging platforms. +--- + +CodePilot's Message Bridge lets you interact with Claude from external messaging platforms. Start a conversation on your desktop, then continue it from your phone via Discord, Telegram, Feishu (Lark), or QQ. + +## Supported Platforms + +| Platform | Features | +|----------|----------| +| **Discord** | Full message bridge with bot integration | +| **Telegram** | Direct message bridge via bot | +| **Feishu/Lark** | Enterprise messaging bridge | +| **QQ** | Bridge via QQ bot platform | + +## Setup + +### Discord + +1. Open **Bridge** from the sidebar, or go to **Settings** and configure the Discord bridge +2. Create a Discord bot at [discord.com/developers](https://discord.com/developers/applications) +3. Copy the bot token and paste it into CodePilot +4. Invite the bot to your Discord server +5. Specify the channel ID where the bridge should operate +6. Click **Enable** + +### Telegram + +1. Open **Bridge** from the sidebar, or go to **Settings** and configure the Telegram bridge +2. Create a bot via [@BotFather](https://t.me/BotFather) on Telegram +3. Copy the bot token and paste it into CodePilot +4. Click **Enable** +5. Send a message to your bot to start bridging + +### Feishu/Lark + +1. Open **Bridge** from the sidebar, or go to **Settings** and configure the Feishu bridge +2. Create an app in the [Feishu Open Platform](https://open.feishu.cn) +3. Configure the app credentials (App ID and App Secret) +4. Set up event subscriptions +5. Click **Enable** + +## How It Works + +1. **Desktop to Mobile**: Messages you send in CodePilot are forwarded to the configured platform +2. **Mobile to Desktop**: Messages from the platform are sent to Claude, and responses are forwarded back +3. **Background Mode**: CodePilot can run in system tray mode, keeping the bridge active even when the window is closed + +## Bridge Modes + +- **Interactive Mode** — Full bidirectional messaging +- **System Tray Mode** — Minimize to tray, bridge stays active in background +- **Notification Only** — Only receive notifications, no message forwarding diff --git a/apps/site/content/docs/en/faq.mdx b/apps/site/content/docs/en/faq.mdx new file mode 100644 index 0000000..71858a9 --- /dev/null +++ b/apps/site/content/docs/en/faq.mdx @@ -0,0 +1,70 @@ +--- +title: FAQ +description: Frequently asked questions about CodePilot. +--- + +## General + +### What is CodePilot? + +CodePilot is a native desktop GUI client for Claude Code. It provides a graphical interface for the Claude Code CLI, with additional features like multi-provider support, a plugin system, message bridging, and theme customization. + +### Is CodePilot free? + +CodePilot is open source and free to use. You need your own API key from a supported provider (Anthropic, OpenAI, Google, AWS Bedrock, etc.) to use it. + +### What platforms are supported? + +CodePilot supports macOS (Apple Silicon and Intel) and Windows. Linux support is planned. + +## Setup + +### I get a "Node.js not found" error + +CodePilot requires Node.js 18 or later. The setup wizard will offer to install it for you, or you can install it manually from [nodejs.org](https://nodejs.org). + +### How do I get an API key? + +- **Anthropic**: Sign up at [console.anthropic.com](https://console.anthropic.com) and create an API key +- **OpenAI**: Sign up at [platform.openai.com](https://platform.openai.com) and create an API key +- **Google AI**: Get a key from [aistudio.google.com](https://aistudio.google.com) + +### Can I use a local LLM? + +Yes, if it provides an OpenAI-compatible API endpoint. Configure it as an OpenAI provider with your local server's URL. + +## Usage + +### How do I switch between providers? + +Use the provider selector in the chat header. Each conversation remembers its provider, and you can switch mid-conversation. + +### How do I use MCP plugins? + +Open **MCP** from the sidebar to add MCP servers. Once connected, their tools are automatically available to Claude. + +### Can I use CodePilot on my phone? + +Not directly, but you can use the [Message Bridge](/docs/bridge) to bridge conversations to Discord, Telegram, Feishu, or QQ and interact from your phone. + +## Troubleshooting + +### The app won't start + +1. Make sure Node.js 18+ is installed +2. Try deleting the app data directory and relaunching +3. Check the logs in the app data directory for error messages + +### Claude isn't responding + +1. Check that your API key is valid and has sufficient credits +2. Verify your internet connection +3. Try switching to a different provider to isolate the issue +4. Check the **MCP** page in the sidebar for any MCP server errors that might be blocking + +### How do I report a bug? + +Open an issue on [GitHub](https://github.com/op7418/CodePilot/issues) with: +- Your OS and CodePilot version +- Steps to reproduce the issue +- Any relevant error messages from the logs diff --git a/apps/site/content/docs/en/index.mdx b/apps/site/content/docs/en/index.mdx new file mode 100644 index 0000000..ce0c168 --- /dev/null +++ b/apps/site/content/docs/en/index.mdx @@ -0,0 +1,30 @@ +--- +title: Getting Started +description: Get started with CodePilot - a native desktop GUI client for Claude Code. +--- + +# Getting Started + +Welcome to CodePilot! This guide will help you get up and running. + +## What is CodePilot? + +CodePilot is a native desktop GUI client for Claude Code, built with Electron and Next.js. +It provides a rich graphical interface for interacting with Claude, managing projects, +and leveraging AI-powered development tools. + +## Quick Start + +1. Download CodePilot from the [download page](/download) +2. Install and launch the application +3. Configure your API provider in Settings +4. Start a new conversation and begin coding with Claude! + +## Features + +- **Multi-provider support** — Anthropic, OpenAI, Google, AWS Bedrock +- **MCP Plugin System** — Extend functionality with Model Context Protocol plugins +- **Message Bridge** — Connect to Discord, Telegram, Feishu, and QQ +- **Assistant Workspace** — Inspect and manage Claude's working environment +- **Theme System** — Customizable themes and visual styles +- **Image Generation** — Built-in AI image generation capabilities diff --git a/apps/site/content/docs/en/installation.mdx b/apps/site/content/docs/en/installation.mdx new file mode 100644 index 0000000..b673ffe --- /dev/null +++ b/apps/site/content/docs/en/installation.mdx @@ -0,0 +1,61 @@ +--- +title: Installation +description: How to install and set up CodePilot on your system. +--- + +## System Requirements + +- **macOS** 12+ (Apple Silicon or Intel) +- **Windows** 10+ (64-bit) +- **Node.js** 18 or later +- **Claude Code CLI** (will be installed automatically if not present) + +## Download + + + +Download the latest release for your platform from [GitHub Releases](https://github.com/op7418/CodePilot/releases). + +| Platform | Format | Architecture | +|----------|--------|-------------| +| macOS | DMG | arm64 (Apple Silicon) + x64 (Intel) | +| Windows | NSIS Installer | x64 | + +## Installation Steps + +### macOS + +1. Download the `.dmg` file for your architecture +2. Open the DMG and drag CodePilot to your Applications folder +3. Launch CodePilot from Applications +4. On first launch, macOS may ask you to confirm opening an app from an unidentified developer — go to **System Settings > Privacy & Security** and click "Open Anyway" + +### Windows + +1. Download the `.exe` installer +2. Run the installer and follow the prompts +3. CodePilot will be available in your Start menu + +## First Launch + +On first launch, CodePilot will: + +1. **Check for Node.js** — if not found, it will offer to install it automatically +2. **Check for Claude Code CLI** — if not found, it will install it via npm +3. **Open the Setup Wizard** — configure your API provider and preferences + +## Configuring an API Provider + +CodePilot needs at least one API provider to function. Go to **Settings** and open the **Providers** section to add one: + +- **Anthropic** — Direct API access to Claude models +- **Custom API (OpenAI-compatible)** — Any OpenAI-compatible endpoint, including local LLMs +- **OpenRouter** — Access multiple providers via OpenRouter +- **AWS Bedrock** — Claude via AWS +- **Google Vertex** — Claude/Gemini via Google Cloud + +Enter your API key and select a default model. You can configure multiple providers and switch between them. + +## Updating + +CodePilot includes an auto-updater. When a new version is available, you'll see a notification in the app. You can also manually check for updates in the **General** section of **Settings**. diff --git a/apps/site/content/docs/en/mcp/index.mdx b/apps/site/content/docs/en/mcp/index.mdx new file mode 100644 index 0000000..df1d24c --- /dev/null +++ b/apps/site/content/docs/en/mcp/index.mdx @@ -0,0 +1,57 @@ +--- +title: MCP +description: Extend CodePilot with Model Context Protocol servers. +--- + +The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard for connecting AI assistants to external tools and data sources. CodePilot has built-in support for MCP servers. + +## What is MCP? + +MCP servers give Claude access to additional tools beyond its default capabilities: + +- **File system tools** — Read/write files, search directories +- **Database access** — Query databases directly +- **API integrations** — Connect to external services (GitHub, Jira, Slack, etc.) +- **Development tools** — Run tests, lint code, manage dependencies +- **Custom tools** — Build your own tools for any purpose + +## Managing MCP Servers + +### Adding an MCP Server + +1. Open **MCP** from the sidebar +2. Click **Add MCP Server** +3. Configure the server: + - **Name** — A descriptive name for the server + - **Command** — The command to start the MCP server (e.g., `npx @modelcontextprotocol/server-filesystem`) + - **Arguments** — Command-line arguments + - **Environment Variables** — Any required env vars (API keys, etc.) +4. Click **Save** and the server will be started + +### Server Status + +Each MCP server shows its connection status: +- **Connected** — Server is running and tools are available +- **Disconnected** — Server is not running +- **Error** — Server encountered an error (check logs for details) + +## Using MCP Tools + +Once an MCP server is connected, its tools automatically become available to Claude in your conversations. Claude will use these tools when relevant to your request. + +You can see which tools are available from each server on the **MCP** page by expanding the server details. + +## Popular MCP Servers + +| Server | Purpose | +|--------|---------| +| `@modelcontextprotocol/server-filesystem` | File system access | +| `@modelcontextprotocol/server-github` | GitHub integration | +| `@modelcontextprotocol/server-slack` | Slack integration | +| `@anthropic-ai/mcp-server-fetch` | Web fetching | + +## Troubleshooting + +- **Server won't connect**: Check that the command is correct and the required npm package is installed +- **Tools not appearing**: Try disconnecting and reconnecting the server +- **Permission errors**: Ensure the MCP server has access to the resources it needs diff --git a/apps/site/content/docs/en/meta.json b/apps/site/content/docs/en/meta.json new file mode 100644 index 0000000..76a0fca --- /dev/null +++ b/apps/site/content/docs/en/meta.json @@ -0,0 +1,14 @@ +{ + "title": "Documentation", + "pages": [ + "index", + "installation", + "---Guides---", + "providers", + "mcp", + "bridge", + "assistant-workspace", + "---Help---", + "faq" + ] +} diff --git a/apps/site/content/docs/en/providers/index.mdx b/apps/site/content/docs/en/providers/index.mdx new file mode 100644 index 0000000..327f0a0 --- /dev/null +++ b/apps/site/content/docs/en/providers/index.mdx @@ -0,0 +1,77 @@ +--- +title: Providers +description: Configure LLM providers to power your CodePilot experience. +--- + +CodePilot supports multiple LLM providers. You can configure one or more providers and switch between them at any time. + +## Supported Providers + +| Provider | Description | Auth Method | +|----------|-------------|-------------| +| **Anthropic** | Direct access to Claude models (Opus, Sonnet, Haiku) | API Key | +| **Custom API (OpenAI-compatible)** | Any OpenAI-compatible endpoint, including local LLMs | API Key + Base URL | +| **OpenRouter** | Access multiple model providers via OpenRouter | API Key | +| **AWS Bedrock** | Claude via AWS infrastructure | AWS Credentials | +| **Google Vertex** | Claude and Gemini via Google Cloud | Service Account | +| **Google Gemini (Image)** | Gemini image generation | API Key | +| **LiteLLM** | Unified proxy for 100+ LLM providers | API Key + Base URL | + +Additional presets are available for Chinese providers: GLM, Kimi/Moonshot, MiniMax, Volcengine Ark, and Aliyun Bailian. + +## Adding a Provider + +1. Open **Settings** and go to the **Providers** section +2. Click **Add Provider** +3. Select the provider type +4. Enter your credentials: + - For API key providers: paste your API key + - For AWS Bedrock: configure your AWS region and credentials + - For Google Vertex: configure your project ID and region +5. Select a default model +6. Click **Save** + +## Switching Providers + +You can switch the active provider at any time: + +- Use the provider selector in the chat header +- Each conversation remembers which provider was used +- Switching providers mid-conversation is supported + +## Provider-Specific Features + +### Anthropic +- Supports **extended thinking** mode for complex reasoning +- Token usage tracking with cost estimates +- Full Claude Agent SDK integration + +### Custom API (OpenAI-compatible) +- Works with any endpoint that implements the OpenAI chat completions API +- Use this for local LLMs (Ollama, LM Studio, vLLM, etc.) or third-party proxies +- Configure via custom base URL + +### OpenRouter +- Access models from Anthropic, OpenAI, Google, Meta, and more through a single API key +- Automatic model routing and fallback + +### AWS Bedrock +- Uses your existing AWS IAM credentials +- Supports cross-region inference +- No separate API key needed if AWS CLI is configured + +## Environment Variables + +Providers can also be configured via environment variables. CodePilot automatically reads your shell environment: + +```bash +# Anthropic (auto-detected on startup) +export ANTHROPIC_API_KEY="sk-ant-..." + +# AWS Bedrock (uses standard AWS env vars) +export AWS_ACCESS_KEY_ID="..." +export AWS_SECRET_ACCESS_KEY="..." +export AWS_REGION="us-east-1" +``` + +CodePilot auto-detects `ANTHROPIC_API_KEY` from your shell environment on startup. For other providers, configure credentials directly in the Providers settings UI. If you update environment variables, restart CodePilot to pick up the changes. diff --git a/apps/site/content/docs/zh/assistant-workspace/index.mdx b/apps/site/content/docs/zh/assistant-workspace/index.mdx new file mode 100644 index 0000000..dd5831e --- /dev/null +++ b/apps/site/content/docs/zh/assistant-workspace/index.mdx @@ -0,0 +1,46 @@ +--- +title: 助手工作区 +description: 检查和管理 Claude 的工作环境。 +--- + +助手工作区让你能够查看 Claude 在对话过程中的操作。它展示文件变更、工具使用情况以及 Claude 当前的工作上下文状态。 + +## 功能 + +### 文件检查器 + +查看 Claude 在对话中读取或修改的文件: + +- **文件树** — 浏览项目目录结构 +- **Diff 视图** — 查看 Claude 对每个文件的具体更改 +- **文件预览** — 带语法高亮的文件预览 + +### 工具活动 + +实时监控 Claude 的工具使用: + +- 查看 Claude 正在调用哪些工具及原因 +- 查看工具输入/输出以便调试 +- 追踪操作序列 + +### 上下文使用情况 + +追踪 Claude 上下文窗口的使用情况: + +- **Token 计数** — 当前使用的 token 数 vs. 可用数 +- **使用明细** — token 在消息、工具和系统上下文中的分布 +- **成本估算** — 基于当前提供商定价的大致费用 + +## 打开工作区 + +工作区面板可以通过以下方式切换: + +- 前往**设置**,打开**助手**部分(即 Settings #assistant) +- 键盘快捷键(可在设置中配置) + +## 使用场景 + +- **代码审查** — 在提交前审查 Claude 所做的所有文件更改 +- **调试** — 当某些功能不正常时检查工具调用 +- **学习** — 通过观察工具使用来了解 Claude 如何处理问题 +- **成本管理** — 监控 token 使用以控制预算 diff --git a/apps/site/content/docs/zh/bridge/index.mdx b/apps/site/content/docs/zh/bridge/index.mdx new file mode 100644 index 0000000..63d9e3c --- /dev/null +++ b/apps/site/content/docs/zh/bridge/index.mdx @@ -0,0 +1,54 @@ +--- +title: 消息桥接 +description: 将 Claude 对话桥接到消息平台。 +--- + +CodePilot 的消息桥接功能让你可以从外部消息平台与 Claude 交互。在桌面上开始对话,然后通过 Discord、Telegram、飞书或 QQ 在手机上继续。 + +## 支持的平台 + +| 平台 | 功能 | +|------|------| +| **Discord** | 完整的消息桥接,支持 Bot 集成 | +| **Telegram** | 通过 Bot 进行直接消息桥接 | +| **飞书/Lark** | 企业消息桥接 | +| **QQ** | 通过 QQ Bot 平台桥接 | + +## 设置 + +### Discord + +1. 从侧边栏打开 **Bridge** +2. 在 [discord.com/developers](https://discord.com/developers/applications) 创建 Discord Bot +3. 复制 Bot Token 并粘贴到 CodePilot +4. 将 Bot 邀请到你的 Discord 服务器 +5. 指定桥接操作的频道 ID +6. 点击**启用** + +### Telegram + +1. 从侧边栏打开 **Bridge** +2. 在 Telegram 上通过 [@BotFather](https://t.me/BotFather) 创建 Bot +3. 复制 Bot Token 并粘贴到 CodePilot +4. 点击**启用** +5. 向你的 Bot 发送消息开始桥接 + +### 飞书/Lark + +1. 从侧边栏打开 **Bridge** +2. 在[飞书开放平台](https://open.feishu.cn)创建应用 +3. 配置应用凭证(App ID 和 App Secret) +4. 设置事件订阅 +5. 点击**启用** + +## 工作原理 + +1. **桌面到手机**:你在 CodePilot 中发送的消息会转发到配置的平台 +2. **手机到桌面**:来自平台的消息会发送给 Claude,回复会转发回去 +3. **后台模式**:CodePilot 可以在系统托盘模式下运行,即使窗口关闭也能保持桥接活跃 + +## 桥接模式 + +- **交互模式** — 完整的双向消息传递 +- **系统托盘模式** — 最小化到托盘,桥接保持活跃 +- **仅通知** — 只接收通知,不转发消息 diff --git a/apps/site/content/docs/zh/faq.mdx b/apps/site/content/docs/zh/faq.mdx new file mode 100644 index 0000000..99c3d9f --- /dev/null +++ b/apps/site/content/docs/zh/faq.mdx @@ -0,0 +1,70 @@ +--- +title: 常见问题 +description: 关于 CodePilot 的常见问题解答。 +--- + +## 一般问题 + +### CodePilot 是什么? + +CodePilot 是 Claude Code 的原生桌面 GUI 客户端。它为 Claude Code CLI 提供图形界面,附带多提供商支持、插件系统、消息桥接和主题自定义等额外功能。 + +### CodePilot 免费吗? + +CodePilot 是开源且免费使用的。你需要自己的 API 密钥(来自 Anthropic、OpenAI、Google、AWS Bedrock 等支持的提供商)。 + +### 支持哪些平台? + +CodePilot 支持 macOS(Apple Silicon 和 Intel)和 Windows。Linux 支持正在计划中。 + +## 设置 + +### 出现"未找到 Node.js"错误 + +CodePilot 需要 Node.js 18 或更高版本。设置向导会提供自动安装,你也可以从 [nodejs.org](https://nodejs.org) 手动安装。 + +### 如何获取 API 密钥? + +- **Anthropic**:在 [console.anthropic.com](https://console.anthropic.com) 注册并创建 API 密钥 +- **OpenAI**:在 [platform.openai.com](https://platform.openai.com) 注册并创建 API 密钥 +- **Google AI**:从 [aistudio.google.com](https://aistudio.google.com) 获取密钥 + +### 可以使用本地 LLM 吗? + +可以,如果它提供 OpenAI 兼容的 API 端点。将其配置为 OpenAI 提供商,使用本地服务器的 URL 即可。 + +## 使用 + +### 如何切换提供商? + +使用聊天头部的提供商选择器。每个对话会记住其提供商,你可以在对话中途切换。 + +### 如何使用 MCP 插件? + +从侧边栏打开 **MCP** 添加 MCP 服务器。连接后,其工具会自动对 Claude 可用。 + +### 可以在手机上使用 CodePilot 吗? + +不能直接使用,但你可以使用[消息桥接](/zh/docs/bridge)将对话桥接到 Discord、Telegram、飞书或 QQ,在手机上交互。 + +## 故障排除 + +### 应用无法启动 + +1. 确保已安装 Node.js 18+ +2. 尝试删除应用数据目录并重新启动 +3. 检查应用数据目录中的日志文件 + +### Claude 没有响应 + +1. 检查 API 密钥是否有效且有足够额度 +2. 验证网络连接 +3. 尝试切换到其他提供商以定位问题 +4. 检查侧边栏 **MCP** 页面是否有 MCP 服务器错误 + +### 如何报告 Bug? + +在 [GitHub](https://github.com/op7418/CodePilot/issues) 上创建 issue,包含: +- 你的操作系统和 CodePilot 版本 +- 复现步骤 +- 日志中的相关错误信息 diff --git a/apps/site/content/docs/zh/index.mdx b/apps/site/content/docs/zh/index.mdx new file mode 100644 index 0000000..232b8e5 --- /dev/null +++ b/apps/site/content/docs/zh/index.mdx @@ -0,0 +1,29 @@ +--- +title: 快速开始 +description: 开始使用 CodePilot — Claude Code 的原生桌面 GUI 客户端。 +--- + +# 快速开始 + +欢迎使用 CodePilot!本指南将帮助你快速上手。 + +## 什么是 CodePilot? + +CodePilot 是 Claude Code 的原生桌面 GUI 客户端,基于 Electron 和 Next.js 构建。 +它提供了丰富的图形界面,用于与 Claude 交互、管理项目以及利用 AI 驱动的开发工具。 + +## 快速上手 + +1. 从[下载页面](/zh/download)下载 CodePilot +2. 安装并启动应用 +3. 在设置中配置你的 API 提供商 +4. 开始新对话,与 Claude 一起编程! + +## 功能特色 + +- **多提供商支持** — Anthropic、OpenAI、Google、AWS Bedrock +- **MCP 插件系统** — 通过 Model Context Protocol 插件扩展功能 +- **消息桥接** — 连接 Discord、Telegram、飞书和 QQ +- **助手工作区** — 检查和管理 Claude 的工作环境 +- **主题系统** — 可自定义的主题和视觉风格 +- **图片生成** — 内置 AI 图片生成功能 diff --git a/apps/site/content/docs/zh/installation.mdx b/apps/site/content/docs/zh/installation.mdx new file mode 100644 index 0000000..bdd211c --- /dev/null +++ b/apps/site/content/docs/zh/installation.mdx @@ -0,0 +1,61 @@ +--- +title: 安装指南 +description: 如何在你的系统上安装和配置 CodePilot。 +--- + +## 系统要求 + +- **macOS** 12+(Apple Silicon 或 Intel) +- **Windows** 10+(64 位) +- **Node.js** 18 或更高版本 +- **Claude Code CLI**(如未安装会自动安装) + +## 下载 + + + +从 [GitHub Releases](https://github.com/op7418/CodePilot/releases) 下载适合你平台的最新版本。 + +| 平台 | 格式 | 架构 | +|------|------|------| +| macOS | DMG | arm64 (Apple Silicon) + x64 (Intel) | +| Windows | NSIS 安装包 | x64 | + +## 安装步骤 + +### macOS + +1. 下载对应架构的 `.dmg` 文件 +2. 打开 DMG,将 CodePilot 拖到应用程序文件夹 +3. 从应用程序中启动 CodePilot +4. 首次启动时,macOS 可能会提示确认打开来自未识别开发者的应用 — 前往**系统设置 > 隐私与安全性**,点击"仍要打开" + +### Windows + +1. 下载 `.exe` 安装程序 +2. 运行安装程序并按提示操作 +3. CodePilot 将出现在开始菜单中 + +## 首次启动 + +首次启动时,CodePilot 会: + +1. **检查 Node.js** — 如未找到,会提供自动安装 +2. **检查 Claude Code CLI** — 如未找到,会通过 npm 安装 +3. **打开设置向导** — 配置 API 提供商和偏好设置 + +## 配置 API 提供商 + +CodePilot 至少需要一个 API 提供商才能工作。前往**设置 > 提供商**添加: + +- **Anthropic** — 直接访问 Claude 模型 +- **Custom API (OpenAI 兼容)** — 任何 OpenAI 兼容端点,包括本地 LLM +- **OpenRouter** — 通过 OpenRouter 访问多个模型提供商 +- **AWS Bedrock** — 通过 AWS 使用 Claude +- **Google Vertex** — 通过 Google Cloud 使用 Claude/Gemini + +输入 API 密钥并选择默认模型。你可以配置多个提供商并在它们之间切换。 + +## 更新 + +CodePilot 内置自动更新功能。有新版本可用时,你会在应用中看到通知。也可以在**设置**的**通用**部分手动检查更新。 diff --git a/apps/site/content/docs/zh/mcp/index.mdx b/apps/site/content/docs/zh/mcp/index.mdx new file mode 100644 index 0000000..67dabf7 --- /dev/null +++ b/apps/site/content/docs/zh/mcp/index.mdx @@ -0,0 +1,57 @@ +--- +title: MCP 插件 +description: 通过 Model Context Protocol 插件扩展 CodePilot 功能。 +--- + +[Model Context Protocol (MCP)](https://modelcontextprotocol.io) 是一个用于连接 AI 助手与外部工具和数据源的开放标准。CodePilot 内置了对 MCP 服务器的支持。 + +## 什么是 MCP 插件? + +MCP 插件让 Claude 能够使用超出默认能力的额外工具: + +- **文件系统工具** — 读写文件、搜索目录 +- **数据库访问** — 直接查询数据库 +- **API 集成** — 连接外部服务(GitHub、Jira、Slack 等) +- **开发工具** — 运行测试、代码检查、管理依赖 +- **自定义工具** — 为任何目的构建你自己的工具 + +## 管理插件 + +### 添加插件 + +1. 从侧边栏打开 **MCP** +2. 点击**添加 MCP 服务器** +3. 配置服务器: + - **名称** — 插件的描述性名称 + - **命令** — 启动 MCP 服务器的命令(如 `npx @modelcontextprotocol/server-filesystem`) + - **参数** — 命令行参数 + - **环境变量** — 所需的环境变量(API 密钥等) +4. 点击**保存**,插件将被启动 + +### 插件状态 + +每个插件会显示连接状态: +- **已连接** — 服务器正在运行,工具可用 +- **已断开** — 服务器未运行 +- **错误** — 服务器遇到错误(查看日志了解详情) + +## 使用插件工具 + +插件连接后,其工具会自动在对话中对 Claude 可用。Claude 会在与你的请求相关时使用这些工具。 + +你可以在 **MCP** 页面中查看每个插件提供的可用工具。 + +## 常用 MCP 服务器 + +| 服务器 | 用途 | +|--------|------| +| `@modelcontextprotocol/server-filesystem` | 文件系统访问 | +| `@modelcontextprotocol/server-github` | GitHub 集成 | +| `@modelcontextprotocol/server-slack` | Slack 集成 | +| `@anthropic-ai/mcp-server-fetch` | 网页抓取 | + +## 故障排除 + +- **插件无法连接**:检查命令是否正确,所需的 npm 包是否已安装 +- **工具未出现**:尝试断开并重新连接插件 +- **权限错误**:确保 MCP 服务器有权访问所需资源 diff --git a/apps/site/content/docs/zh/meta.json b/apps/site/content/docs/zh/meta.json new file mode 100644 index 0000000..c82200b --- /dev/null +++ b/apps/site/content/docs/zh/meta.json @@ -0,0 +1,14 @@ +{ + "title": "文档", + "pages": [ + "index", + "installation", + "---指南---", + "providers", + "mcp", + "bridge", + "assistant-workspace", + "---帮助---", + "faq" + ] +} diff --git a/apps/site/content/docs/zh/providers/index.mdx b/apps/site/content/docs/zh/providers/index.mdx new file mode 100644 index 0000000..483925b --- /dev/null +++ b/apps/site/content/docs/zh/providers/index.mdx @@ -0,0 +1,77 @@ +--- +title: 提供商配置 +description: 配置 LLM 提供商以驱动你的 CodePilot 体验。 +--- + +CodePilot 支持多个 LLM 提供商。你可以配置一个或多个提供商,随时在它们之间切换。 + +## 支持的提供商 + +| 提供商 | 说明 | 认证方式 | +|--------|------|----------| +| **Anthropic** | 直接访问 Claude 模型(Opus、Sonnet、Haiku) | API 密钥 | +| **Custom API (OpenAI 兼容)** | 任何 OpenAI 兼容端点,包括本地 LLM | API 密钥 + Base URL | +| **OpenRouter** | 通过 OpenRouter 访问多个模型提供商 | API 密钥 | +| **AWS Bedrock** | 通过 AWS 基础设施使用 Claude | AWS 凭证 | +| **Google Vertex** | 通过 Google Cloud 使用 Claude 和 Gemini | 服务账号 | +| **Google Gemini (Image)** | Gemini 图片生成 | API 密钥 | +| **LiteLLM** | 统一代理,支持 100+ LLM 提供商 | API 密钥 + Base URL | + +另外还提供中国提供商预设:GLM、Kimi/Moonshot、MiniMax、火山引擎 Ark、阿里云百炼。 + +## 添加提供商 + +1. 打开**设置 > 提供商** +2. 点击**添加提供商** +3. 选择提供商类型 +4. 输入凭证: + - API 密钥类型:粘贴你的 API 密钥 + - AWS Bedrock:配置 AWS 区域和凭证 + - Google Vertex:配置项目 ID 和区域 +5. 选择默认模型 +6. 点击**保存** + +## 切换提供商 + +你可以随时切换活跃的提供商: + +- 使用聊天头部的提供商选择器 +- 每个对话会记住使用的提供商 +- 支持在对话中途切换提供商 + +## 提供商特定功能 + +### Anthropic +- 支持**扩展思考**模式,用于复杂推理 +- 带成本估算的 token 使用追踪 +- 完整的 Claude Agent SDK 集成 + +### Custom API (OpenAI 兼容) +- 支持任何实现 OpenAI Chat Completions API 的端点 +- 可用于本地 LLM(Ollama、LM Studio、vLLM 等)或第三方代理 +- 通过自定义 Base URL 配置 + +### OpenRouter +- 通过单个 API 密钥访问 Anthropic、OpenAI、Google、Meta 等多家提供商的模型 +- 自动模型路由和故障转移 + +### AWS Bedrock +- 使用现有的 AWS IAM 凭证 +- 支持跨区域推理 +- 如果已配置 AWS CLI,无需单独的 API 密钥 + +## 环境变量 + +提供商也可以通过环境变量配置。CodePilot 会自动读取你的 shell 环境: + +```bash +# Anthropic(启动时自动检测) +export ANTHROPIC_API_KEY="sk-ant-..." + +# AWS Bedrock(使用标准 AWS 环境变量) +export AWS_ACCESS_KEY_ID="..." +export AWS_SECRET_ACCESS_KEY="..." +export AWS_REGION="us-east-1" +``` + +CodePilot 启动时会自动检测 `ANTHROPIC_API_KEY` 环境变量。其他提供商请在设置的提供商界面中直接配置凭证。更新环境变量后需要重启 CodePilot 才能生效。 diff --git a/apps/site/content/marketing/en.ts b/apps/site/content/marketing/en.ts new file mode 100644 index 0000000..f6cdff9 --- /dev/null +++ b/apps/site/content/marketing/en.ts @@ -0,0 +1,237 @@ +export interface MarketingContent { + hero: { + title: string; + tagline: string; + cta: string; + secondaryCta: string; + screenshots: { src: string; alt: string; caption: string }[]; + }; + features: { + title: string; + titleLight: string; + subtitle: string; + items: { + icon: string; + title: string; + description: string; + badge?: string; + }[]; + }; + openSource: { + title: string; + titleLight: string; + highlights: { + icon: string; + title: string; + description: string; + }[]; + githubCta: string; + githubUrl: string; + }; + faq: { + title: string; + titleLight: string; + items: { q: string; a: string }[]; + }; + audience: { + title: string; + subtitle: string; + items: { title: string; description: string }[]; + }; + quickstart: { + title: string; + steps: { step: string; title: string; description: string }[]; + }; + docs: { + title: string; + cards: { title: string; description: string; href: string }[]; + }; + cta: { + title: string; + description: string; + primary: string; + secondary: string; + }; + footer: { + copyright: string; + links: { text: string; url: string }[]; + }; +} + +export const en: MarketingContent = { + hero: { + title: 'CodePilot', + tagline: 'Your desktop AI Agent for', + cta: 'Download', + secondaryCta: 'Documentation', + screenshots: [ + { src: '/screenshots/chat.svg', alt: 'Chat interface', caption: 'Multi-session chat with Code, Plan, and Ask modes' }, + { src: '/screenshots/providers.svg', alt: 'Provider management', caption: 'Connect and switch between AI providers' }, + { src: '/screenshots/mcp-skills.svg', alt: 'MCP and Skills', caption: 'Extend with MCP servers and Skills' }, + { src: '/screenshots/workspace.svg', alt: 'Assistant Workspace', caption: 'Inspect files and review changes in real time' }, + { src: '/screenshots/bridge.svg', alt: 'Bridge messaging', caption: 'Continue conversations from your phone' }, + ], + }, + features: { + title: 'Everything you need to work with Claude Code.', + titleLight: 'Conversations, providers, extensions, and project context — in one place.', + subtitle: '', + items: [ + { + icon: 'MessageSquare', + title: 'Multi-session chat', + description: 'Run multiple conversations with independent context.', + }, + { + icon: 'Layers', + title: 'Code · Plan · Ask', + description: 'Three modes for different workflows.', + }, + { + icon: 'Shield', + title: 'Permission control', + description: 'Confirm before Claude modifies files.', + }, + { + icon: 'FolderOpen', + title: 'Assistant Workspace', + description: 'Inspect files and review changes live.', + }, + { + icon: 'Brain', + title: 'Persona & Memory', + description: 'Consistent behavior across sessions.', + }, + { + icon: 'Sparkles', + title: 'Skills', + description: 'Reusable prompt patterns you can share.', + }, + { + icon: 'Bookmark', + title: 'Session persistence', + description: 'Pick up where you left off after restart.', + }, + { + icon: 'Compass', + title: 'Onboarding', + description: 'Auto-detect project structure on first run.', + }, + ], + }, + openSource: { + title: 'Fully open source.', + titleLight: 'Use your own API key. No middleman, no markup.', + highlights: [ + { + icon: 'Code', + title: 'Open Source', + description: 'Every line of code is public on GitHub. Audit, fork, or contribute.', + }, + { + icon: 'Key', + title: 'Bring Your Own Key', + description: 'Connect directly to Anthropic, OpenAI, Google, or any provider with your own API key.', + }, + { + icon: 'Users', + title: 'Community Driven', + description: 'Built in the open with feedback from developers who use it every day.', + }, + ], + githubCta: 'Star on GitHub', + githubUrl: 'https://github.com/op7418/CodePilot', + }, + faq: { + title: 'Frequently asked questions.', + titleLight: 'Everything you need to know before getting started.', + items: [ + { + q: 'Is CodePilot really free?', + a: 'Yes. CodePilot is completely free and open source. You only pay for the API usage from your chosen provider.', + }, + { + q: 'Which AI providers are supported?', + a: 'Anthropic, OpenAI, Google, AWS Bedrock, and any OpenAI-compatible endpoint. You can switch between them at any time.', + }, + { + q: 'Do I need a Claude Code subscription?', + a: 'No. CodePilot works with your own API key directly — no Claude Code subscription required.', + }, + { + q: 'Is my data sent to CodePilot servers?', + a: 'No. All API calls go directly from your machine to the provider. CodePilot never sees your code or conversations.', + }, + { + q: 'Can I use it on Windows and Linux?', + a: 'macOS is fully supported today. Windows and Linux builds are on the roadmap.', + }, + ], + }, + audience: { + title: 'Built for daily use.', + subtitle: 'For developers who rely on Claude Code every day.', + items: [ + { + title: 'Long-lived codebases', + description: 'Keep project context organized across months of work.', + }, + { + title: 'Multiple providers', + description: 'Switch between providers and MCP servers without friction.', + }, + { + title: 'Persistent context', + description: 'Build up persona, memory, and onboarding that stick.', + }, + { + title: 'Work on the go', + description: 'Continue tasks from your phone while Claude keeps working.', + }, + ], + }, + quickstart: { + title: 'Three steps to start.', + steps: [ + { + step: '1', + title: 'Install Claude Code CLI', + description: 'Install and sign in with your Anthropic account.', + }, + { + step: '2', + title: 'Download CodePilot', + description: 'Configure your preferred provider.', + }, + { + step: '3', + title: 'Start a session', + description: 'Connect Workspace, MCP, or Bridge as needed.', + }, + ], + }, + docs: { + title: 'Documentation', + cards: [ + { title: 'Getting Started', description: 'Installation and first steps.', href: '/docs' }, + { title: 'Providers', description: 'Configure AI providers.', href: '/docs/providers' }, + { title: 'MCP', description: 'Set up MCP servers.', href: '/docs/mcp' }, + { title: 'Bridge', description: 'Connect messaging platforms.', href: '/docs/bridge' }, + { title: 'Workspace', description: 'File inspection and context.', href: '/docs/workspace' }, + ], + }, + cta: { + title: 'Ready to try CodePilot?', + description: 'Download and start working with Claude Code in a desktop workspace.', + primary: 'Download', + secondary: 'Read the docs', + }, + footer: { + copyright: '\u00a9 2026 CodePilot', + links: [ + { text: 'GitHub', url: 'https://github.com/op7418/CodePilot' }, + { text: 'Docs', url: '/docs' }, + { text: 'Download', url: '/download' }, + ], + }, +}; diff --git a/apps/site/content/marketing/index.ts b/apps/site/content/marketing/index.ts new file mode 100644 index 0000000..2110f77 --- /dev/null +++ b/apps/site/content/marketing/index.ts @@ -0,0 +1,11 @@ +import { en } from './en'; +import { zh } from './zh'; +import type { MarketingContent } from './en'; + +const content: Record = { en, zh }; + +export function getMarketingContent(locale: string): MarketingContent { + return content[locale] ?? content.en; +} + +export type { MarketingContent }; diff --git a/apps/site/content/marketing/zh.ts b/apps/site/content/marketing/zh.ts new file mode 100644 index 0000000..ee8fcb3 --- /dev/null +++ b/apps/site/content/marketing/zh.ts @@ -0,0 +1,179 @@ +import type { MarketingContent } from './en'; + +export const zh: MarketingContent = { + hero: { + title: 'CodePilot', + tagline: '你的桌面 AI Agent,专注', + cta: '下载', + secondaryCta: '查看文档', + screenshots: [ + { src: '/screenshots/chat.svg', alt: '聊天界面', caption: '多会话聊天,支持 Code、Plan、Ask 模式' }, + { src: '/screenshots/providers.svg', alt: 'Provider 管理', caption: '连接并切换多个 AI 提供商' }, + { src: '/screenshots/mcp-skills.svg', alt: 'MCP 和 Skills', caption: '通过 MCP 和 Skills 扩展能力' }, + { src: '/screenshots/workspace.svg', alt: 'Assistant Workspace', caption: '实时检查文件和审查更改' }, + { src: '/screenshots/bridge.svg', alt: 'Bridge 消息', caption: '在手机上继续对话' }, + ], + }, + features: { + title: '使用 Claude Code 所需的一切', + titleLight: '对话、Provider、扩展和项目上下文——集于一处。', + subtitle: '', + items: [ + { + icon: 'MessageSquare', + title: '多会话聊天', + description: '多个会话独立运行,各自保持上下文。', + }, + { + icon: 'Layers', + title: 'Code · Plan · Ask', + description: '三种模式,适配不同工作流。', + }, + { + icon: 'Shield', + title: '权限控制', + description: '修改文件前需你确认。', + }, + { + icon: 'FolderOpen', + title: 'Assistant Workspace', + description: '实时查看文件和审查更改。', + }, + { + icon: 'Brain', + title: 'Persona 和 Memory', + description: '跨会话保持一致的行为。', + }, + { + icon: 'Sparkles', + title: 'Skills', + description: '可复用、可分享的提示模式。', + }, + { + icon: 'Bookmark', + title: '会话持久化', + description: '重启后从上次中断处继续。', + }, + { + icon: 'Compass', + title: 'Onboarding', + description: '首次运行自动检测项目结构。', + }, + ], + }, + openSource: { + title: '完全开源。', + titleLight: '使用你自己的 API Key,没有中间商,没有加价。', + highlights: [ + { + icon: 'Code', + title: '开源', + description: '所有代码公开在 GitHub,可审查、可 fork、可贡献。', + }, + { + icon: 'Key', + title: '自带 Key', + description: '直连 Anthropic、OpenAI、Google 或任何 Provider,使用你自己的 API Key。', + }, + { + icon: 'Users', + title: '社区驱动', + description: '在开发者社区的反馈中持续迭代。', + }, + ], + githubCta: '在 GitHub 上 Star', + githubUrl: 'https://github.com/op7418/CodePilot', + }, + faq: { + title: '常见问题。', + titleLight: '开始使用前你可能想了解的一切。', + items: [ + { + q: 'CodePilot 真的免费吗?', + a: '是的。CodePilot 完全免费且开源,你只需为所选 Provider 的 API 用量付费。', + }, + { + q: '支持哪些 AI Provider?', + a: 'Anthropic、OpenAI、Google、AWS Bedrock 以及任何 OpenAI 兼容接口,随时切换。', + }, + { + q: '需要 Claude Code 订阅吗?', + a: '不需要。CodePilot 直接使用你自己的 API Key,无需 Claude Code 订阅。', + }, + { + q: '我的数据会发送到 CodePilot 服务器吗?', + a: '不会。所有 API 调用从你的电脑直接发送到 Provider,CodePilot 不会接触你的代码或对话。', + }, + { + q: '支持 Windows 和 Linux 吗?', + a: '目前完整支持 macOS,Windows 和 Linux 版本在计划中。', + }, + ], + }, + audience: { + title: '为日常使用而设计。', + subtitle: '面向每天依赖 Claude Code 的开发者。', + items: [ + { + title: '长期代码库', + description: '在持续数月的开发中保持上下文有序。', + }, + { + title: '多 Provider', + description: '在提供商和 MCP 服务器之间无缝切换。', + }, + { + title: '持久上下文', + description: '积累 persona、memory 和 onboarding。', + }, + { + title: '随时随地', + description: '通过手机继续任务,Claude 持续工作。', + }, + ], + }, + quickstart: { + title: '三步开始使用。', + steps: [ + { + step: '1', + title: '安装 Claude Code CLI', + description: '安装并用 Anthropic 账户登录。', + }, + { + step: '2', + title: '下载 CodePilot', + description: '配置你偏好的 Provider。', + }, + { + step: '3', + title: '开始会话', + description: '按需连接 Workspace、MCP 或 Bridge。', + }, + ], + }, + docs: { + title: '文档', + cards: [ + { title: '快速开始', description: '安装与第一步。', href: '/docs' }, + { title: 'Providers', description: '配置 AI 提供商。', href: '/docs/providers' }, + { title: 'MCP', description: '设置 MCP 服务器。', href: '/docs/mcp' }, + { title: 'Bridge', description: '连接消息平台。', href: '/docs/bridge' }, + { title: 'Workspace', description: '文件检查与上下文。', href: '/docs/workspace' }, + ], + }, + cta: { + title: '准备好试试 CodePilot 了吗?', + description: '下载并开始在桌面工作区中使用 Claude Code。', + primary: '下载', + secondary: '阅读文档', + }, + footer: { + copyright: '\u00a9 2026 CodePilot', + links: [ + { text: 'GitHub', url: 'https://github.com/op7418/CodePilot' }, + { text: '文档', url: '/zh/docs' }, + { text: '下载', url: '/zh/download' }, + ], + }, +}; diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs new file mode 100644 index 0000000..221c619 --- /dev/null +++ b/apps/site/next.config.mjs @@ -0,0 +1,10 @@ +import { createMDX } from 'fumadocs-mdx/next'; + +/** @type {import('next').NextConfig} */ +const config = { + reactStrictMode: true, +}; + +const withMDX = createMDX(); + +export default withMDX(config); diff --git a/apps/site/package.json b/apps/site/package.json new file mode 100644 index 0000000..663806e --- /dev/null +++ b/apps/site/package.json @@ -0,0 +1,40 @@ +{ + "name": "@codepilot/site", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev --port 3001", + "build": "next build", + "start": "next start", + "lint": "eslint", + "typecheck": "tsc -p tsconfig.check.json --noEmit" + }, + "dependencies": { + "@base-ui/react": "^1.2.0", + "@hugeicons/core-free-icons": "^4.0.0", + "@hugeicons/react": "^1.1.6", + "@types/mdx": "^2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "framer-motion": "^12.35.2", + "fumadocs-core": "^15", + "fumadocs-mdx": "^11", + "fumadocs-ui": "^15", + "lucide-react": "^0.563.0", + "next": "15.3.3", + "react": "^19", + "react-dom": "^19", + "shadcn": "^4.0.2", + "tailwind-merge": "^3.5.0", + "tw-animate-css": "^1.4.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "postcss": "^8", + "tailwindcss": "^4", + "typescript": "^5" + } +} diff --git a/apps/site/postcss.config.mjs b/apps/site/postcss.config.mjs new file mode 100644 index 0000000..7030ebd --- /dev/null +++ b/apps/site/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss').Config} */ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/apps/site/public/logo.png b/apps/site/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c8ddc34fb698ecad2ee25f6130403df0fe5421 GIT binary patch literal 301603 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 z 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

3jndB=0Ri!P)rdua5Hyaf`sdm&Q67NE& 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 literal 0 HcmV?d00001 diff --git a/apps/site/public/screenshots/bridge.svg b/apps/site/public/screenshots/bridge.svg new file mode 100644 index 0000000..08698c5 --- /dev/null +++ b/apps/site/public/screenshots/bridge.svg @@ -0,0 +1,4 @@ + + + PLACEHOLDER + diff --git a/apps/site/public/screenshots/chat.svg b/apps/site/public/screenshots/chat.svg new file mode 100644 index 0000000..08698c5 --- /dev/null +++ b/apps/site/public/screenshots/chat.svg @@ -0,0 +1,4 @@ + + + PLACEHOLDER + diff --git a/apps/site/public/screenshots/mcp-skills.svg b/apps/site/public/screenshots/mcp-skills.svg new file mode 100644 index 0000000..08698c5 --- /dev/null +++ b/apps/site/public/screenshots/mcp-skills.svg @@ -0,0 +1,4 @@ + + + PLACEHOLDER + diff --git a/apps/site/public/screenshots/providers.svg b/apps/site/public/screenshots/providers.svg new file mode 100644 index 0000000..08698c5 --- /dev/null +++ b/apps/site/public/screenshots/providers.svg @@ -0,0 +1,4 @@ + + + PLACEHOLDER + diff --git a/apps/site/public/screenshots/workspace.svg b/apps/site/public/screenshots/workspace.svg new file mode 100644 index 0000000..08698c5 --- /dev/null +++ b/apps/site/public/screenshots/workspace.svg @@ -0,0 +1,4 @@ + + + PLACEHOLDER + diff --git a/apps/site/source.config.ts b/apps/site/source.config.ts new file mode 100644 index 0000000..96ee301 --- /dev/null +++ b/apps/site/source.config.ts @@ -0,0 +1,11 @@ +import { defineDocs, defineConfig } from 'fumadocs-mdx/config'; + +export const docs = defineDocs({ + dir: 'content/docs', +}); + +export default defineConfig({ + mdxOptions: { + // Add any remark/rehype plugins here + }, +}); diff --git a/apps/site/src/app/[lang]/(marketing)/community/page.tsx b/apps/site/src/app/[lang]/(marketing)/community/page.tsx new file mode 100644 index 0000000..3917465 --- /dev/null +++ b/apps/site/src/app/[lang]/(marketing)/community/page.tsx @@ -0,0 +1,33 @@ +import { siteConfig } from '@/lib/site.config'; +import { buttonVariants } from '@/components/ui/button-variants'; + +export default async function CommunityPage({ + params, +}: { + params: Promise<{ lang: string }>; +}) { + const { lang } = await params; + + return ( +

+

+ {lang === 'zh' ? '社区' : 'Community'} +

+

+ {lang === 'zh' + ? '加入社区,获取帮助和分享经验' + : 'Join the community, get help, and share your experience'} +

+
+
+ ); +} diff --git a/apps/site/src/app/[lang]/(marketing)/download/page.tsx b/apps/site/src/app/[lang]/(marketing)/download/page.tsx new file mode 100644 index 0000000..269cae2 --- /dev/null +++ b/apps/site/src/app/[lang]/(marketing)/download/page.tsx @@ -0,0 +1,31 @@ +import { siteConfig } from '@/lib/site.config'; +import { buttonVariants } from '@/components/ui/button-variants'; + +export default async function DownloadPage({ + params, +}: { + params: Promise<{ lang: string }>; +}) { + const { lang } = await params; + + return ( +
+

+ {lang === 'zh' ? '下载 CodePilot' : 'Download CodePilot'} +

+

+ {lang === 'zh' + ? '从 GitHub Releases 下载最新版本' + : 'Download the latest version from GitHub Releases'} +

+ + {lang === 'zh' ? '前往 GitHub Releases' : 'Go to GitHub Releases'} + +
+ ); +} diff --git a/apps/site/src/app/[lang]/(marketing)/layout.tsx b/apps/site/src/app/[lang]/(marketing)/layout.tsx new file mode 100644 index 0000000..c85bca8 --- /dev/null +++ b/apps/site/src/app/[lang]/(marketing)/layout.tsx @@ -0,0 +1,15 @@ +import type { ReactNode } from 'react'; +import { HomeLayout } from 'fumadocs-ui/layouts/home'; +import { homeOptions } from '@/lib/layout.shared'; + +export default async function MarketingLayout({ + params, + children, +}: { + params: Promise<{ lang: string }>; + children: ReactNode; +}) { + const { lang } = await params; + + return {children}; +} diff --git a/apps/site/src/app/[lang]/(marketing)/page.tsx b/apps/site/src/app/[lang]/(marketing)/page.tsx new file mode 100644 index 0000000..1bbfee9 --- /dev/null +++ b/apps/site/src/app/[lang]/(marketing)/page.tsx @@ -0,0 +1,29 @@ +import { getMarketingContent } from '../../../../content/marketing'; +import { ScrollNav } from '@/components/marketing/ScrollNav'; +import { HeroSection } from '@/components/marketing/HeroSection'; +import { FeaturesSection } from '@/components/marketing/FeaturesSection'; +import { IntegrationsSection } from '@/components/marketing/IntegrationsSection'; +import { FAQSection } from '@/components/marketing/FAQAccordion'; +import { FinalCTA } from '@/components/marketing/FinalCTA'; +import { SiteFooter } from '@/components/marketing/SiteFooter'; + +export default async function HomePage({ + params, +}: { + params: Promise<{ lang: string }>; +}) { + const { lang } = await params; + const content = getMarketingContent(lang); + + return ( +
+ + + + + + + +
+ ); +} diff --git a/apps/site/src/app/[lang]/docs/[[...slug]]/page.tsx b/apps/site/src/app/[lang]/docs/[[...slug]]/page.tsx new file mode 100644 index 0000000..97ed6b4 --- /dev/null +++ b/apps/site/src/app/[lang]/docs/[[...slug]]/page.tsx @@ -0,0 +1,62 @@ +import { source } from '@/lib/source'; +import { + DocsPage, + DocsBody, + DocsTitle, + DocsDescription, +} from 'fumadocs-ui/page'; +import { notFound } from 'next/navigation'; +import defaultMdxComponents from 'fumadocs-ui/mdx'; +import { DownloadButton } from '@/components/docs/DownloadButton'; +import type { Metadata } from 'next'; +import type { ReactNode } from 'react'; + +interface MDXPageData { + title?: string; + description?: string; + body: (props: { components: Record }) => ReactNode; + toc: { title: string; url: string; depth: number }[]; +} + +export default async function Page({ + params, +}: { + params: Promise<{ slug?: string[]; lang: string }>; +}) { + const { slug, lang } = await params; + const page = source.getPage(slug, lang); + + if (!page) notFound(); + + // fumadocs-mdx provides body/toc at runtime; typed locally to bridge version gap + const { body: MDXContent, toc } = page.data as unknown as MDXPageData; + + return ( + + {page.data.title} + {page.data.description} + + + + + ); +} + +export function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ slug?: string[]; lang: string }>; +}): Promise { + const { slug, lang } = await params; + const page = source.getPage(slug, lang); + if (!page) notFound(); + + return { + title: page.data.title, + description: page.data.description, + }; +} diff --git a/apps/site/src/app/[lang]/docs/layout.tsx b/apps/site/src/app/[lang]/docs/layout.tsx new file mode 100644 index 0000000..1354536 --- /dev/null +++ b/apps/site/src/app/[lang]/docs/layout.tsx @@ -0,0 +1,31 @@ +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import type { ReactNode } from 'react'; +import { source } from '@/lib/source'; +import { baseOptions } from '@/lib/layout.shared'; +import { DocsTopNav } from '@/components/docs/DocsTopNav'; + +export default async function DocsLayoutWrapper({ + params, + children, +}: { + params: Promise<{ lang: string }>; + children: ReactNode; +}) { + const { lang } = await params; + + return ( +
+ + + {children} + +
+ ); +} diff --git a/apps/site/src/app/[lang]/layout.tsx b/apps/site/src/app/[lang]/layout.tsx new file mode 100644 index 0000000..ae4a308 --- /dev/null +++ b/apps/site/src/app/[lang]/layout.tsx @@ -0,0 +1,40 @@ +import { RootProvider } from 'fumadocs-ui/provider/next'; +import { Inter } from 'next/font/google'; +import type { ReactNode } from 'react'; +import { i18n } from '@/lib/i18n'; + +const inter = Inter({ + subsets: ['latin'], + variable: '--font-inter', + display: 'swap', +}); + +export default async function LangLayout({ + params, + children, +}: { + params: Promise<{ lang: string }>; + children: ReactNode; +}) { + const { lang } = await params; + + return ( + + + + {children} + + + + ); +} + +export function generateStaticParams() { + return i18n.languages.map((lang) => ({ lang })); +} diff --git a/apps/site/src/app/api/search/route.ts b/apps/site/src/app/api/search/route.ts new file mode 100644 index 0000000..28079ec --- /dev/null +++ b/apps/site/src/app/api/search/route.ts @@ -0,0 +1,9 @@ +import { source } from '@/lib/source'; +import { createFromSource } from 'fumadocs-core/search/server'; + +export const { GET } = createFromSource(source, { + localeMap: { + // Orama does not have a Chinese stemmer; use English tokenizer as fallback + zh: 'english', + }, +}); diff --git a/apps/site/src/app/global.css b/apps/site/src/app/global.css new file mode 100644 index 0000000..ac38040 --- /dev/null +++ b/apps/site/src/app/global.css @@ -0,0 +1,196 @@ +@import "tailwindcss"; +@import "fumadocs-ui/css/neutral.css"; +@import "fumadocs-ui/css/preset.css"; +@import "tw-animate-css"; +@import "shadcn/tailwind.css"; + +@custom-variant dark (&:is(.dark *)); + +@source "../../node_modules/fumadocs-ui/dist/**/*.js"; + +/* Font stack: Inter for Latin, system CJK fonts for Chinese */ +@theme { + --font-sans: var(--font-inter), "PingFang SC", "Noto Sans SC", + "Microsoft YaHei", "Hiragino Sans GB", ui-sans-serif, system-ui, sans-serif; + +} + +:root { + --fd-primary: 217 91% 50%; + --fd-background: 225 15% 97%; + /* Rainbow button colors */ + --color-1: 0 100% 63%; + --color-2: 270 100% 63%; + --color-3: 210 100% 63%; + --color-4: 195 100% 63%; + --color-5: 90 100% 63%; + /* Match main CodePilot app's stone neutrals, with blue primary for brand */ + --background: oklch(1 0 0); + --foreground: oklch(0.147 0.004 49.25); + --card: oklch(1 0 0); + --card-foreground: oklch(0.147 0.004 49.25); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.147 0.004 49.25); + --primary: hsl(217 91% 50%); + --primary-foreground: hsl(0 0% 100%); + --secondary: oklch(0.97 0.001 106.424); + --secondary-foreground: oklch(0.216 0.006 56.043); + --muted: oklch(0.97 0.001 106.424); + --muted-foreground: oklch(0.553 0.013 58.071); + --accent: oklch(0.97 0.001 106.424); + --accent-foreground: oklch(0.216 0.006 56.043); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.923 0.003 48.717); + --input: oklch(0.923 0.003 48.717); + --ring: oklch(0.546 0.245 262.881); + --radius: 0.75rem; + --sidebar: oklch(0.985 0.001 106.423); + --sidebar-foreground: oklch(0.147 0.004 49.25); + --sidebar-primary: oklch(0.546 0.245 262.881); + --sidebar-primary-foreground: oklch(0.985 0.001 106.423); + --sidebar-accent: oklch(0.97 0.001 106.424); + --sidebar-accent-foreground: oklch(0.216 0.006 56.043); + --sidebar-border: oklch(0.923 0.003 48.717); + --sidebar-ring: oklch(0.546 0.245 262.881); +} + +.dark { + --fd-primary: 217 80% 62%; + --fd-background: 222 15% 6%; + + /* Match main CodePilot app's dark stone palette */ + --background: oklch(0.147 0.004 49.25); + --foreground: oklch(0.985 0.001 106.423); + --card: oklch(0.147 0.004 49.25); + --card-foreground: oklch(0.985 0.001 106.423); + --popover: oklch(0.147 0.004 49.25); + --popover-foreground: oklch(0.985 0.001 106.423); + --primary: oklch(0.623 0.214 259.815); + --primary-foreground: oklch(0.985 0.001 106.423); + --secondary: oklch(0.268 0.007 34.298); + --secondary-foreground: oklch(0.985 0.001 106.423); + --muted: oklch(0.268 0.007 34.298); + --muted-foreground: oklch(0.553 0.013 58.071); + --accent: oklch(0.268 0.007 34.298); + --accent-foreground: oklch(0.985 0.001 106.423); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.623 0.214 259.815); + --sidebar: oklch(0.216 0.006 56.043); + --sidebar-foreground: oklch(0.985 0.001 106.423); + --sidebar-primary: oklch(0.623 0.214 259.815); + --sidebar-primary-foreground: oklch(0.985 0.001 106.423); + --sidebar-accent: oklch(0.268 0.007 34.298); + --sidebar-accent-foreground: oklch(0.985 0.001 106.423); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.623 0.214 259.815); +} + +/* Tight letter-spacing on headings (Inter style) */ +h1, h2, h3 { + letter-spacing: -0.025em; +} + +@theme inline { + --font-sans: var(--font-sans); + --color-color-1: hsl(var(--color-1)); + --color-color-2: hsl(var(--color-2)); + --color-color-3: hsl(var(--color-3)); + --color-color-4: hsl(var(--color-4)); + --color-color-5: hsl(var(--color-5)); + --animate-rainbow: rainbow var(--speed, 2s) infinite linear; + @keyframes rainbow { + 0% { background-position: 0%; } + 100% { background-position: 200%; } + } + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --color-foreground: var(--foreground); + --color-background: var(--background); + --radius-sm: calc(var(--radius) * 0.6); + --radius-md: calc(var(--radius) * 0.8); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) * 1.4); + --radius-2xl: calc(var(--radius) * 1.8); + --radius-3xl: calc(var(--radius) * 2.2); + --radius-4xl: calc(var(--radius) * 2.6); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } + html { + @apply font-sans; + } +} + +/* Docs page: match homepage typography and spacing */ +.fd-page article { + font-size: 15px; + line-height: 1.7; +} + +/* Docs headings: tighter letter-spacing, match homepage weight */ +.fd-page article h2 { + font-weight: 700; + margin-top: 2.5rem; +} + +.fd-page article h3 { + font-weight: 600; + margin-top: 2rem; +} + +/* Docs links: use primary color */ +.fd-page article a:not([class]) { + color: var(--primary); + text-decoration: underline; + text-underline-offset: 2px; +} + +.fd-page article a:not([class]):hover { + opacity: 0.8; +} + +/* Docs table: cleaner borders */ +.fd-page article table { + border-radius: 0; +} + +/* Docs sidebar: match homepage font weight */ +[data-fd-sidebar] a { + font-weight: 500; +} + diff --git a/apps/site/src/app/layout.tsx b/apps/site/src/app/layout.tsx new file mode 100644 index 0000000..a1ccdf4 --- /dev/null +++ b/apps/site/src/app/layout.tsx @@ -0,0 +1,18 @@ +import './global.css'; +import type { ReactNode } from 'react'; +import type { Metadata } from 'next'; +import { Geist } from "next/font/google"; + +const geist = Geist({subsets:['latin'],variable:'--font-sans'}); + +export const metadata: Metadata = { + title: { + default: 'CodePilot', + template: '%s | CodePilot', + }, + description: 'A native desktop GUI client for Claude Code', +}; + +export default function RootLayout({ children }: { children: ReactNode }) { + return children; +} diff --git a/apps/site/src/components/docs/DocsTopNav.tsx b/apps/site/src/components/docs/DocsTopNav.tsx new file mode 100644 index 0000000..b65adc1 --- /dev/null +++ b/apps/site/src/components/docs/DocsTopNav.tsx @@ -0,0 +1,85 @@ +'use client'; + +import Image from 'next/image'; +import Link from 'next/link'; +import { useRouter, usePathname } from 'next/navigation'; +import { Globe, Github, Search } from 'lucide-react'; +import { useSearchContext } from 'fumadocs-ui/contexts/search'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import { siteConfig } from '@/lib/site.config'; + +export function DocsTopNav({ locale }: { locale: string }) { + const router = useRouter(); + const pathname = usePathname(); + const { setOpenSearch } = useSearchContext(); + + const handleLocaleChange = (newLocale: string | null) => { + if (!newLocale) return; + let newPath: string; + if (locale === 'en') { + newPath = `/${newLocale}${pathname}`; + } else { + newPath = newLocale === 'en' + ? pathname.replace(`/${locale}`, '') || '/' + : pathname.replace(`/${locale}`, `/${newLocale}`); + } + router.push(newPath); + }; + + return ( +
+
+ {/* Left: Logo + Product name */} + + CodePilot + CodePilot + + + {/* Right: Search + GitHub + Language switcher */} +
+ + + + + + + +
+
+
+ ); +} diff --git a/apps/site/src/components/docs/DownloadButton.tsx b/apps/site/src/components/docs/DownloadButton.tsx new file mode 100644 index 0000000..11107f1 --- /dev/null +++ b/apps/site/src/components/docs/DownloadButton.tsx @@ -0,0 +1,15 @@ +import { siteConfig } from '@/lib/site.config'; + +export function DownloadButton({ label = 'Download Latest Release' }: { label?: string }) { + return ( + + {label} + + + ); +} diff --git a/apps/site/src/components/docs/LanguageSwitcher.tsx b/apps/site/src/components/docs/LanguageSwitcher.tsx new file mode 100644 index 0000000..45d0561 --- /dev/null +++ b/apps/site/src/components/docs/LanguageSwitcher.tsx @@ -0,0 +1,44 @@ +'use client'; + +import { useRouter, usePathname } from 'next/navigation'; +import { Globe } from 'lucide-react'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; + +export function LanguageSwitcher({ locale }: { locale: string }) { + const router = useRouter(); + const pathname = usePathname(); + + const handleChange = (newLocale: string | null) => { + if (!newLocale) return; + let newPath: string; + if (locale === 'en') { + newPath = `/${newLocale}${pathname}`; + } else { + newPath = newLocale === 'en' + ? pathname.replace(`/${locale}`, '') || '/' + : pathname.replace(`/${locale}`, `/${newLocale}`); + } + router.push(newPath); + }; + + return ( + + ); +} diff --git a/apps/site/src/components/docs/NavTitle.tsx b/apps/site/src/components/docs/NavTitle.tsx new file mode 100644 index 0000000..1b36a5e --- /dev/null +++ b/apps/site/src/components/docs/NavTitle.tsx @@ -0,0 +1,16 @@ +import Image from 'next/image'; + +export function NavTitle() { + return ( + + CodePilot + CodePilot + + ); +} diff --git a/apps/site/src/components/marketing/AudienceSection.tsx b/apps/site/src/components/marketing/AudienceSection.tsx new file mode 100644 index 0000000..e953184 --- /dev/null +++ b/apps/site/src/components/marketing/AudienceSection.tsx @@ -0,0 +1,31 @@ +import type { MarketingContent } from '../../../content/marketing/en'; + +export function AudienceSection({ + content, +}: { + content: MarketingContent['audience']; +}) { + return ( +
+
+

+ {content.title} +

+

{content.subtitle}

+
+ {content.items.map((item) => ( +
+

{item.title}

+

+ {item.description} +

+
+ ))} +
+
+
+ ); +} diff --git a/apps/site/src/components/marketing/ChatDemo.tsx b/apps/site/src/components/marketing/ChatDemo.tsx new file mode 100644 index 0000000..1490cbc --- /dev/null +++ b/apps/site/src/components/marketing/ChatDemo.tsx @@ -0,0 +1,505 @@ +'use client'; + +import { useEffect, useRef, useState } from 'react'; +import { AnimatePresence, motion } from 'framer-motion'; +import { HugeiconsIcon } from '@hugeicons/react'; +import { + Message02Icon, + ZapIcon, + Plug01Icon, + Image01Icon, + Wifi01Icon, + Settings02Icon, + Search01Icon, + PlusSignIcon, + FolderOpenIcon, + ArrowUp02Icon, + ArrowDown01Icon, + CommandLineIcon, + AiUserIcon, + SecurityCheckIcon, +} from '@hugeicons/core-free-icons'; +import { Check, FileText } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; + + +/* ------------------------------------------------------------------ */ +/* Chat message data */ +/* ------------------------------------------------------------------ */ + +interface ChatMsg { + id: number; + role: 'user' | 'assistant'; + text: string; + delay: number; + badge?: { icon: 'skill' | 'mcp' | 'bridge' | 'agent'; label: string }; + tool?: { name: string; status: 'done' }; +} + +const MESSAGES: ChatMsg[] = [ + { + id: 1, + role: 'user', + text: 'Refactor the auth module to use JWT. Follow the team conventions.', + delay: 800, + badge: { icon: 'skill', label: '/refactor' }, + }, + { + id: 2, + role: 'assistant', + text: 'Reading project conventions from persona memory\u2026', + delay: 1400, + }, + { + id: 3, + role: 'assistant', + text: 'Refactored src/auth/ to JWT. Updated 4 files, added refresh-token rotation, kept the existing middleware contract.', + delay: 2000, + tool: { name: 'Edit 4 files', status: 'done' }, + }, + { + id: 4, + role: 'user', + text: "Connect the Figma MCP server \u2014 I need design tokens.", + delay: 1400, + badge: { icon: 'mcp', label: 'Figma MCP' }, + }, + { + id: 5, + role: 'assistant', + text: "Connected to Figma MCP. Pulled 48 tokens \u2192 src/theme/tokens.ts updated.", + delay: 1800, + tool: { name: 'figma:pull-tokens', status: 'done' }, + }, + { + id: 6, + role: 'user', + text: "I'm heading out. Forward replies to Telegram.", + delay: 1400, + badge: { icon: 'bridge', label: 'Telegram' }, + }, + { + id: 7, + role: 'assistant', + text: "Bridge active \u2014 I'll keep working and send updates to Telegram.", + delay: 1600, + }, + { + id: 8, + role: 'user', + text: 'Generate a hero section with the new tokens.', + delay: 1800, + badge: { icon: 'agent', label: 'Design Agent' }, + }, + { + id: 9, + role: 'assistant', + text: 'Created src/app/hero/ with responsive layout and the new palette. Preview ready.', + delay: 2200, + tool: { name: 'Create 3 files', status: 'done' }, + }, +]; + +const SESSIONS = [ + { name: 'Auth JWT refactor', active: true, time: 'now' }, + { name: 'API rate limiting', active: false, time: '2h' }, + { name: 'Dashboard redesign', active: false, time: '5h' }, + { name: 'CI pipeline fix', active: false, time: '1d' }, + { name: 'Onboarding flow', active: false, time: '2d' }, +]; + +const WORKSPACE_FILES = [ + { name: 'src/auth/jwt.ts', status: 'modified' }, + { name: 'src/auth/middleware.ts', status: 'modified' }, + { name: 'src/auth/refresh.ts', status: 'added' }, + { name: 'src/theme/tokens.ts', status: 'modified' }, + { name: 'src/app/hero/page.tsx', status: 'added' }, +]; + +/* + * The demo uses the real product's purple primary color via CSS custom + * properties scoped to the demo container, so it visually matches the + * actual CodePilot app regardless of the site's blue brand primary. + */ +const DEMO_THEME_VARS = { + '--primary': 'oklch(0.546 0.245 262.881)', + '--primary-foreground': 'oklch(0.985 0.001 106.423)', + '--ring': 'oklch(0.546 0.245 262.881)', +} as React.CSSProperties; + +/* ------------------------------------------------------------------ */ +/* Sub-components */ +/* ------------------------------------------------------------------ */ + +function BadgeIcon({ type }: { type: string }) { + const cls = 'h-3 w-3'; + switch (type) { + case 'skill': return ; + case 'mcp': return ; + case 'bridge': return ; + case 'agent': return ; + default: return null; + } +} + +function Badge({ badge }: { badge: NonNullable }) { + return ( + + + {badge.label} + + ); +} + +function TypingDots() { + return ( + + {[0, 1, 2].map((i) => ( + + ))} + + ); +} + +/* ------------------------------------------------------------------ */ +/* Icon sidebar — real: NavRail.tsx w-14, h-9 w-9 buttons, gap-1 */ +/* ------------------------------------------------------------------ */ + +const NAV_ITEMS = [ + { icon: Message02Icon, label: 'Chats', active: true }, + { icon: ZapIcon, label: 'Skills', active: false }, + { icon: Plug01Icon, label: 'MCP', active: false }, + { icon: Image01Icon, label: 'Gallery', active: false }, + { icon: Wifi01Icon, label: 'Bridge', active: false }, +]; + +function IconSidebar() { + return ( + + ); +} + +/* ------------------------------------------------------------------ */ +/* Session sidebar — real: ChatListPanel 240px, bg-sidebar */ +/* ------------------------------------------------------------------ */ + +function SessionSidebar() { + return ( +
+ {/* Top spacing for macOS traffic lights area */} +
+ + {/* New chat button — real: h-8 outline with PlusSignIcon */} +
+ +
+ + {/* Search */} +
+ + +
+ + {/* Project folder — real: FolderOpenIcon, text-[13px] font-medium */} +
+ + My-Project +
+ + {/* Session list — real: text-[13px], active=bg-sidebar-accent */} +
+ {SESSIONS.map((s) => ( +
+ {s.name} + {s.time} +
+ ))} +
+ +
+
+ ); +} + +/* ------------------------------------------------------------------ */ +/* Right workspace panel — real: RightPanel 288px, bg-background */ +/* ------------------------------------------------------------------ */ + +function WorkspacePanel({ fileCount }: { fileCount: number }) { + const visible = WORKSPACE_FILES.slice(0, fileCount); + + return ( +
+ {/* Section title — real: text-[11px] font-semibold uppercase tracking-wider */} +
+ Tasks +
+ + +
+
+ + {/* Files */} +
+ Files +
+
+ + {visible.map((f) => ( + + + {f.name} + + {f.status === 'added' ? '+' : 'M'} + + + ))} + +
+
+ ); +} + +/* ------------------------------------------------------------------ */ +/* Main ChatDemo */ +/* ------------------------------------------------------------------ */ + +export function ChatDemo() { + const [visibleCount, setVisibleCount] = useState(0); + const [typingId, setTypingId] = useState(null); + const scrollRef = useRef(null); + const hasStarted = useRef(false); + const containerRef = useRef(null); + + const fileCount = Math.min( + WORKSPACE_FILES.length, + visibleCount >= 9 ? 5 : visibleCount >= 5 ? 4 : visibleCount >= 3 ? 2 : 0, + ); + + useEffect(() => { + const el = containerRef.current; + if (!el) return; + const observer = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting && !hasStarted.current) { + hasStarted.current = true; + playMessages(); + } + }, + { threshold: 0.2 }, + ); + observer.observe(el); + return () => observer.disconnect(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + function playMessages() { + let elapsed = 0; + MESSAGES.forEach((msg, i) => { + elapsed += msg.delay; + if (msg.role === 'assistant') { + setTimeout(() => setTypingId(msg.id), elapsed - 600); + } + setTimeout(() => { + setTypingId(null); + setVisibleCount(i + 1); + }, elapsed); + }); + setTimeout(() => { + setVisibleCount(0); + setTypingId(null); + hasStarted.current = false; + const el = containerRef.current; + if (!el) return; + const obs = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting && !hasStarted.current) { + hasStarted.current = true; + playMessages(); + } + }, + { threshold: 0.2 }, + ); + obs.observe(el); + }, elapsed + 4000); + } + + useEffect(() => { + const el = scrollRef.current; + if (el) el.scrollTop = el.scrollHeight; + }, [visibleCount, typingId]); + + const visible = MESSAGES.slice(0, visibleCount); + + return ( +
+ {/* Left: icon bar — real NavRail */} + + + {/* Left: session sidebar — real ChatListPanel */} + + + {/* Center: chat area */} +
+ {/* Chat header — real: h-11 border-b border-border/50 */} +
+ Auth JWT refactor +
+ + {/* Messages */} +
+
+ + {visible.map((msg) => ( + + {msg.badge && ( +
+ +
+ )} +
+ {msg.text} + {msg.tool && ( +
+ + {msg.tool.name} +
+ )} +
+
+ ))} + {typingId !== null && ( + +
+ +
+
+ )} +
+
+
+ + {/* Input bar — real: InputGroup rounded-2xl border-input shadow-md dark:bg-input/30 */} +
+
+ {/* Textarea row */} +
+ Message Claude... + +
+ {/* PromptInputFooter — real: gap-1, icon buttons h-6 w-6 */} +
+
+ + +
+ claude-sonnet-4 + +
+
+
+
+ {/* ChatComposerActionBar — below input */} +
+ + + Design Agent + + + + Default + +
+
+
+ + {/* Right: workspace panel — real RightPanel */} + +
+ ); +} diff --git a/apps/site/src/components/marketing/DocsEntrySection.tsx b/apps/site/src/components/marketing/DocsEntrySection.tsx new file mode 100644 index 0000000..adf5ef6 --- /dev/null +++ b/apps/site/src/components/marketing/DocsEntrySection.tsx @@ -0,0 +1,40 @@ +import Link from 'next/link'; +import { ArrowRight } from 'lucide-react'; +import type { MarketingContent } from '../../../content/marketing/en'; + +export function DocsEntrySection({ + content, + locale, +}: { + content: MarketingContent['docs']; + locale: string; +}) { + const prefix = locale === 'en' ? '' : `/${locale}`; + + return ( +
+
+

+ {content.title} +

+
+ {content.cards.map((card) => ( + +
+

{card.title}

+

+ {card.description} +

+
+ + + ))} +
+
+
+ ); +} diff --git a/apps/site/src/components/marketing/FAQAccordion.tsx b/apps/site/src/components/marketing/FAQAccordion.tsx new file mode 100644 index 0000000..41f50b7 --- /dev/null +++ b/apps/site/src/components/marketing/FAQAccordion.tsx @@ -0,0 +1,72 @@ +'use client'; + +import { useState } from 'react'; +import { Plus, Minus } from 'lucide-react'; +import type { MarketingContent } from '../../../content/marketing/en'; + +function FAQItem({ item, isOpen, onToggle, isLast }: { + item: { q: string; a: string }; + isOpen: boolean; + onToggle: () => void; + isLast: boolean; +}) { + return ( +
+ +
+
+

+ {item.a} +

+
+
+
+ ); +} + +export function FAQSection({ + content, +}: { + content: MarketingContent['faq']; +}) { + const [openIndex, setOpenIndex] = useState(null); + + return ( +
+
+ {/* Two-tone title */} +

+ {content.title}{' '} + {content.titleLight} +

+ +
+ {content.items.map((item, i) => ( + setOpenIndex(openIndex === i ? null : i)} + /> + ))} +
+
+
+ ); +} diff --git a/apps/site/src/components/marketing/FeaturesSection.tsx b/apps/site/src/components/marketing/FeaturesSection.tsx new file mode 100644 index 0000000..897f2e3 --- /dev/null +++ b/apps/site/src/components/marketing/FeaturesSection.tsx @@ -0,0 +1,43 @@ +import { CapabilityIcon } from './IconMap'; +import type { MarketingContent } from '../../../content/marketing/en'; + +export function FeaturesSection({ + content, +}: { + content: MarketingContent['features']; +}) { + return ( +
+
+ {/* Two-tone title: dark + light */} +

+ {content.title}{' '} + {content.titleLight} +

+ + {/* Feature cards — no border, larger description, larger icon without bg */} +
+ {content.items.map((item) => ( +
+ +

+ {item.title} + {item.badge && ( + + {item.badge} + + )} +

+

+ {item.description} +

+
+ ))} +
+
+
+ ); +} diff --git a/apps/site/src/components/marketing/FinalCTA.tsx b/apps/site/src/components/marketing/FinalCTA.tsx new file mode 100644 index 0000000..fbbef3d --- /dev/null +++ b/apps/site/src/components/marketing/FinalCTA.tsx @@ -0,0 +1,38 @@ +import Link from 'next/link'; +import type { MarketingContent } from '../../../content/marketing/en'; +import { RainbowButton } from '@/components/ui/rainbow-button'; + +export function FinalCTA({ + content, + locale, +}: { + content: MarketingContent['cta']; + locale: string; +}) { + const prefix = locale === 'en' ? '' : `/${locale}`; + + return ( +
+
+

+ {content.title}{' '} + {content.description} +

+ +
+ + + {content.primary} + + + + {content.secondary} + +
+
+
+ ); +} diff --git a/apps/site/src/components/marketing/HeroSection.tsx b/apps/site/src/components/marketing/HeroSection.tsx new file mode 100644 index 0000000..22ed92e --- /dev/null +++ b/apps/site/src/components/marketing/HeroSection.tsx @@ -0,0 +1,75 @@ +import Link from 'next/link'; +import Image from 'next/image'; +import type { MarketingContent } from '../../../content/marketing/en'; +import { ChatDemo } from './ChatDemo'; +import { TypewriterWords } from './TypewriterWords'; +import { RainbowButton } from '@/components/ui/rainbow-button'; +import { FlickeringGrid } from '@/components/ui/flickering-grid'; + +export function HeroSection({ + content, + locale, +}: { + content: MarketingContent['hero']; + locale: string; +}) { + const prefix = locale === 'en' ? '' : `/${locale}`; + + return ( +
+ {/* Blue-gray gradient background */} +
+ +
+ {/* Logo + Title + CTA */} +
+ CodePilot + +

+ {content.tagline}{' '} + +

+ +
+ + + {content.cta} + + +
+
+ + {/* Animated chat demo with flickering grid background */} +
+ {/* FlickeringGrid — shifted down, masked with radial gradient for soft edges */} +
+ +
+
+ +
+
+
+
+ ); +} diff --git a/apps/site/src/components/marketing/IconMap.tsx b/apps/site/src/components/marketing/IconMap.tsx new file mode 100644 index 0000000..c51dfdc --- /dev/null +++ b/apps/site/src/components/marketing/IconMap.tsx @@ -0,0 +1,46 @@ +import { + MessageSquare, + Settings, + Plug, + Sparkles, + Radio, + FolderOpen, + Layers, + Shield, + Brain, + Bookmark, + Compass, + Code, + KeyRound, + Users, + type LucideIcon, +} from 'lucide-react'; + +const iconMap: Record = { + MessageSquare, + Settings, + Plug, + Sparkles, + Radio, + FolderOpen, + Layers, + Shield, + Brain, + Bookmark, + Compass, + Code, + Key: KeyRound, + Users, +}; + +export function CapabilityIcon({ + name, + className, +}: { + name: string; + className?: string; +}) { + const Icon = iconMap[name]; + if (!Icon) return null; + return ; +} diff --git a/apps/site/src/components/marketing/IntegrationsSection.tsx b/apps/site/src/components/marketing/IntegrationsSection.tsx new file mode 100644 index 0000000..c9f3485 --- /dev/null +++ b/apps/site/src/components/marketing/IntegrationsSection.tsx @@ -0,0 +1,74 @@ +import { Star } from 'lucide-react'; +import { CapabilityIcon } from './IconMap'; +import type { MarketingContent } from '../../../content/marketing/en'; + +async function getStarCount(): Promise { + try { + const res = await fetch('https://api.github.com/repos/op7418/CodePilot', { + next: { revalidate: 3600 }, + }); + if (!res.ok) return '3.4k'; + const data = await res.json(); + const count = data.stargazers_count; + if (count >= 1000) return `${(count / 1000).toFixed(1)}k`; + return String(count); + } catch { + return '3.4k'; + } +} + +export async function IntegrationsSection({ + content, +}: { + content: MarketingContent['openSource']; + locale?: string; +}) { + const stars = await getStarCount(); + + return ( +
+
+ {/* Two-tone title */} +

+ {content.title}{' '} + {content.titleLight} +

+ + {/* GitHub Star button */} + + + {/* Highlight cards */} +
+ {content.highlights.map((item) => ( +
+ +

+ {item.title} +

+

+ {item.description} +

+
+ ))} +
+ +
+
+ ); +} diff --git a/apps/site/src/components/marketing/QuickstartSection.tsx b/apps/site/src/components/marketing/QuickstartSection.tsx new file mode 100644 index 0000000..53e1a96 --- /dev/null +++ b/apps/site/src/components/marketing/QuickstartSection.tsx @@ -0,0 +1,35 @@ +import type { MarketingContent } from '../../../content/marketing/en'; + +export function QuickstartSection({ + content, +}: { + content: MarketingContent['quickstart']; +}) { + return ( +
+
+

+ {content.title} +

+
+ {content.steps.map((step) => ( +
+ + {step.step} + +
+

{step.title}

+

+ {step.description} +

+
+
+ ))} +
+
+
+ ); +} diff --git a/apps/site/src/components/marketing/ScreenshotCarousel.tsx b/apps/site/src/components/marketing/ScreenshotCarousel.tsx new file mode 100644 index 0000000..f9aa612 --- /dev/null +++ b/apps/site/src/components/marketing/ScreenshotCarousel.tsx @@ -0,0 +1,114 @@ +'use client'; + +import { useCallback, useEffect, useRef, useState } from 'react'; +import Image from 'next/image'; +import type { MarketingContent } from '../../../content/marketing/en'; + +type ScreenshotItem = MarketingContent['hero']['screenshots'][number]; + +export function ScreenshotCarousel({ + items, +}: { + items: ScreenshotItem[]; +}) { + const scrollRef = useRef(null); + const [activeIndex, setActiveIndex] = useState(0); + const isPaused = useRef(false); + + const scrollToIndex = useCallback((index: number) => { + const container = scrollRef.current; + if (!container) return; + const slide = container.children[index] as HTMLElement | undefined; + if (!slide) return; + container.scrollTo({ + left: slide.offsetLeft - (container.offsetWidth - slide.offsetWidth) / 2, + behavior: 'smooth', + }); + }, []); + + useEffect(() => { + const container = scrollRef.current; + if (!container) return; + const observer = new IntersectionObserver( + (entries) => { + for (const entry of entries) { + if (entry.isIntersecting) { + const idx = Array.from(container.children).indexOf(entry.target as HTMLElement); + if (idx >= 0) setActiveIndex(idx); + } + } + }, + { root: container, threshold: 0.6 }, + ); + Array.from(container.children).forEach((child) => observer.observe(child)); + return () => observer.disconnect(); + }, [items.length]); + + useEffect(() => { + const interval = setInterval(() => { + if (isPaused.current) return; + setActiveIndex((prev) => { + const next = (prev + 1) % items.length; + scrollToIndex(next); + return next; + }); + }, 5500); + return () => clearInterval(interval); + }, [items.length, scrollToIndex]); + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'ArrowLeft') scrollToIndex(Math.max(0, activeIndex - 1)); + else if (e.key === 'ArrowRight') scrollToIndex(Math.min(items.length - 1, activeIndex + 1)); + }; + + return ( +
+
{ isPaused.current = true; }} + onMouseLeave={() => { isPaused.current = false; }} + onFocus={() => { isPaused.current = true; }} + onBlur={() => { isPaused.current = false; }} + onKeyDown={handleKeyDown} + tabIndex={0} + role="region" + aria-label="Screenshot carousel" + > + {items.map((item, i) => ( +
+
+ {item.alt} +
+
+ ))} +
+ + {/* Dots only — dark gray active */} +
+ {items.map((item, i) => ( +
+
+ ); +} diff --git a/apps/site/src/components/marketing/ScrollNav.tsx b/apps/site/src/components/marketing/ScrollNav.tsx new file mode 100644 index 0000000..1685037 --- /dev/null +++ b/apps/site/src/components/marketing/ScrollNav.tsx @@ -0,0 +1,100 @@ +'use client'; + +import { useEffect, useState } from 'react'; +import Link from 'next/link'; +import Image from 'next/image'; +import { Github } from 'lucide-react'; + +export function ScrollNav({ locale }: { locale: string }) { + const [visible, setVisible] = useState(false); + const [stars, setStars] = useState(null); + const prefix = locale === 'en' ? '' : `/${locale}`; + + useEffect(() => { + const onScroll = () => setVisible(window.scrollY > 80); + onScroll(); + window.addEventListener('scroll', onScroll, { passive: true }); + return () => window.removeEventListener('scroll', onScroll); + }, []); + + useEffect(() => { + fetch('https://api.github.com/repos/op7418/CodePilot', { next: { revalidate: 3600 } } as RequestInit) + .then((r) => r.json()) + .then((d) => { + if (d.stargazers_count != null) { + const count = Number(d.stargazers_count); + setStars(count >= 1000 ? `${(count / 1000).toFixed(1)}k` : String(count)); + } + }) + .catch(() => {}); + }, []); + + return ( + + ); +} diff --git a/apps/site/src/components/marketing/SiteFooter.tsx b/apps/site/src/components/marketing/SiteFooter.tsx new file mode 100644 index 0000000..576cc7a --- /dev/null +++ b/apps/site/src/components/marketing/SiteFooter.tsx @@ -0,0 +1,29 @@ +import type { MarketingContent } from '../../../content/marketing/en'; + +export function SiteFooter({ + content, +}: { + content: MarketingContent['footer']; +}) { + return ( +
+
+ {content.copyright} + +
+
+ ); +} diff --git a/apps/site/src/components/marketing/TypewriterWords.tsx b/apps/site/src/components/marketing/TypewriterWords.tsx new file mode 100644 index 0000000..635b019 --- /dev/null +++ b/apps/site/src/components/marketing/TypewriterWords.tsx @@ -0,0 +1,83 @@ +'use client'; + +import { useEffect, useState, useCallback } from 'react'; +import { AnimatePresence, motion } from 'framer-motion'; + +interface WordItem { + text: string; + color: string; +} + +const WORDS_EN: WordItem[] = [ + { text: 'Development', color: '#3b82f6' }, // blue + { text: 'Design', color: '#f59e0b' }, // amber + { text: 'Writing', color: '#10b981' }, // emerald + { text: 'Research', color: '#8b5cf6' }, // violet + { text: 'Debugging', color: '#ef4444' }, // red + { text: 'Prototyping', color: '#06b6d4' }, // cyan +]; + +const WORDS_ZH: WordItem[] = [ + { text: '开发', color: '#3b82f6' }, + { text: '设计', color: '#f59e0b' }, + { text: '写作', color: '#10b981' }, + { text: '调研', color: '#8b5cf6' }, + { text: '调试', color: '#ef4444' }, + { text: '原型', color: '#06b6d4' }, +]; + +export function TypewriterWords({ locale }: { locale: string }) { + const words = locale === 'zh' ? WORDS_ZH : WORDS_EN; + const [index, setIndex] = useState(0); + const [displayed, setDisplayed] = useState(''); + const [isDeleting, setIsDeleting] = useState(false); + + const current = words[index]; + + const tick = useCallback(() => { + const full = current.text; + + if (!isDeleting) { + // Typing + const next = full.slice(0, displayed.length + 1); + setDisplayed(next); + if (next === full) { + // Pause then start deleting + setTimeout(() => setIsDeleting(true), 2000); + return; + } + } else { + // Deleting + const next = full.slice(0, displayed.length - 1); + setDisplayed(next); + if (next === '') { + setIsDeleting(false); + setIndex((prev) => (prev + 1) % words.length); + return; + } + } + }, [current.text, displayed, isDeleting, words.length]); + + useEffect(() => { + const speed = isDeleting ? 60 : 100; + const timer = setTimeout(tick, speed); + return () => clearTimeout(timer); + }, [tick, isDeleting]); + + return ( + + + {displayed} + + + + ); +} diff --git a/apps/site/src/components/ui/button-variants.ts b/apps/site/src/components/ui/button-variants.ts new file mode 100644 index 0000000..f4245bc --- /dev/null +++ b/apps/site/src/components/ui/button-variants.ts @@ -0,0 +1,38 @@ +import { cva } from "class-variance-authority" + +export const buttonVariants = cva( + "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", + outline: + "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", + ghost: + "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50", + destructive: + "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: + "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3", + sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5", + lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3", + icon: "size-8", + "icon-xs": + "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3", + "icon-sm": + "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg", + "icon-lg": "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) diff --git a/apps/site/src/components/ui/button.tsx b/apps/site/src/components/ui/button.tsx new file mode 100644 index 0000000..ec4c4bd --- /dev/null +++ b/apps/site/src/components/ui/button.tsx @@ -0,0 +1,24 @@ +"use client" + +import { Button as ButtonPrimitive } from "@base-ui/react/button" +import type { VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" +import { buttonVariants } from "./button-variants" + +function Button({ + className, + variant = "default", + size = "default", + ...props +}: ButtonPrimitive.Props & VariantProps) { + return ( + + ) +} + +export { Button, buttonVariants } diff --git a/apps/site/src/components/ui/flickering-grid.tsx b/apps/site/src/components/ui/flickering-grid.tsx new file mode 100644 index 0000000..2137424 --- /dev/null +++ b/apps/site/src/components/ui/flickering-grid.tsx @@ -0,0 +1,195 @@ +"use client"; + +import React, { + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from "react"; + +interface FlickeringGridProps { + squareSize?: number; + gridGap?: number; + flickerChance?: number; + color?: string; + width?: number; + height?: number; + className?: string; + maxOpacity?: number; +} + +const FlickeringGrid: React.FC = ({ + squareSize = 4, + gridGap = 6, + flickerChance = 0.3, + color = "rgb(0, 0, 0)", + width, + height, + className, + maxOpacity = 0.3, +}) => { + const canvasRef = useRef(null); + const containerRef = useRef(null); + const [isInView, setIsInView] = useState(false); + const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 }); + + const memoizedColor = useMemo(() => { + const toRGBA = (color: string) => { + if (typeof window === "undefined") { + return `rgba(0, 0, 0,`; + } + const canvas = document.createElement("canvas"); + canvas.width = canvas.height = 1; + const ctx = canvas.getContext("2d"); + if (!ctx) return "rgba(255, 0, 0,"; + ctx.fillStyle = color; + ctx.fillRect(0, 0, 1, 1); + const [r, g, b] = Array.from(ctx.getImageData(0, 0, 1, 1).data); + return `rgba(${r}, ${g}, ${b},`; + }; + return toRGBA(color); + }, [color]); + + const setupCanvas = useCallback( + (canvas: HTMLCanvasElement, width: number, height: number) => { + const dpr = window.devicePixelRatio || 1; + canvas.width = width * dpr; + canvas.height = height * dpr; + canvas.style.width = `${width}px`; + canvas.style.height = `${height}px`; + const cols = Math.floor(width / (squareSize + gridGap)); + const rows = Math.floor(height / (squareSize + gridGap)); + + const squares = new Float32Array(cols * rows); + for (let i = 0; i < squares.length; i++) { + squares[i] = Math.random() * maxOpacity; + } + + return { cols, rows, squares, dpr }; + }, + [squareSize, gridGap, maxOpacity], + ); + + const updateSquares = useCallback( + (squares: Float32Array, deltaTime: number) => { + for (let i = 0; i < squares.length; i++) { + if (Math.random() < flickerChance * deltaTime) { + squares[i] = Math.random() * maxOpacity; + } + } + }, + [flickerChance, maxOpacity], + ); + + const drawGrid = useCallback( + ( + ctx: CanvasRenderingContext2D, + width: number, + height: number, + cols: number, + rows: number, + squares: Float32Array, + dpr: number, + ) => { + ctx.clearRect(0, 0, width, height); + ctx.fillStyle = "transparent"; + ctx.fillRect(0, 0, width, height); + + for (let i = 0; i < cols; i++) { + for (let j = 0; j < rows; j++) { + const opacity = squares[i * rows + j]; + ctx.fillStyle = `${memoizedColor}${opacity})`; + ctx.fillRect( + i * (squareSize + gridGap) * dpr, + j * (squareSize + gridGap) * dpr, + squareSize * dpr, + squareSize * dpr, + ); + } + } + }, + [memoizedColor, squareSize, gridGap], + ); + + useEffect(() => { + const canvas = canvasRef.current; + const container = containerRef.current; + if (!canvas || !container) return; + + const ctx = canvas.getContext("2d"); + if (!ctx) return; + + let animationFrameId: number; + let gridParams: ReturnType; + + const updateCanvasSize = () => { + const newWidth = width || container.clientWidth; + const newHeight = height || container.clientHeight; + setCanvasSize({ width: newWidth, height: newHeight }); + gridParams = setupCanvas(canvas, newWidth, newHeight); + }; + + updateCanvasSize(); + + let lastTime = 0; + const animate = (time: number) => { + if (!isInView) return; + + const deltaTime = (time - lastTime) / 1000; + lastTime = time; + + updateSquares(gridParams.squares, deltaTime); + drawGrid( + ctx, + canvas.width, + canvas.height, + gridParams.cols, + gridParams.rows, + gridParams.squares, + gridParams.dpr, + ); + animationFrameId = requestAnimationFrame(animate); + }; + + const resizeObserver = new ResizeObserver(() => { + updateCanvasSize(); + }); + + resizeObserver.observe(container); + + const intersectionObserver = new IntersectionObserver( + ([entry]) => { + setIsInView(entry.isIntersecting); + }, + { threshold: 0 }, + ); + + intersectionObserver.observe(canvas); + + if (isInView) { + animationFrameId = requestAnimationFrame(animate); + } + + return () => { + cancelAnimationFrame(animationFrameId); + resizeObserver.disconnect(); + intersectionObserver.disconnect(); + }; + }, [setupCanvas, updateSquares, drawGrid, width, height, isInView]); + + return ( +
+ +
+ ); +}; + +export { FlickeringGrid }; diff --git a/apps/site/src/components/ui/input.tsx b/apps/site/src/components/ui/input.tsx new file mode 100644 index 0000000..7d21bab --- /dev/null +++ b/apps/site/src/components/ui/input.tsx @@ -0,0 +1,20 @@ +import * as React from "react" +import { Input as InputPrimitive } from "@base-ui/react/input" + +import { cn } from "@/lib/utils" + +function Input({ className, type, ...props }: React.ComponentProps<"input">) { + return ( + + ) +} + +export { Input } diff --git a/apps/site/src/components/ui/rainbow-button.tsx b/apps/site/src/components/ui/rainbow-button.tsx new file mode 100644 index 0000000..b5097b5 --- /dev/null +++ b/apps/site/src/components/ui/rainbow-button.tsx @@ -0,0 +1,31 @@ +import React from "react"; + +import { cn } from "@/lib/utils"; + +export function RainbowButton({ + children, + className, + ...props +}: React.ButtonHTMLAttributes) { + return ( + + ); +} diff --git a/apps/site/src/components/ui/select.tsx b/apps/site/src/components/ui/select.tsx new file mode 100644 index 0000000..e8021f5 --- /dev/null +++ b/apps/site/src/components/ui/select.tsx @@ -0,0 +1,201 @@ +"use client" + +import * as React from "react" +import { Select as SelectPrimitive } from "@base-ui/react/select" + +import { cn } from "@/lib/utils" +import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react" + +const Select = SelectPrimitive.Root + +function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) { + return ( + + ) +} + +function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) { + return ( + + ) +} + +function SelectTrigger({ + className, + size = "default", + children, + ...props +}: SelectPrimitive.Trigger.Props & { + size?: "sm" | "default" +}) { + return ( + + {children} + + } + /> + + ) +} + +function SelectContent({ + className, + children, + side = "bottom", + sideOffset = 4, + align = "center", + alignOffset = 0, + alignItemWithTrigger = true, + ...props +}: SelectPrimitive.Popup.Props & + Pick< + SelectPrimitive.Positioner.Props, + "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger" + >) { + return ( + + + + + {children} + + + + + ) +} + +function SelectLabel({ + className, + ...props +}: SelectPrimitive.GroupLabel.Props) { + return ( + + ) +} + +function SelectItem({ + className, + children, + ...props +}: SelectPrimitive.Item.Props) { + return ( + + + {children} + + + } + > + + + + ) +} + +function SelectSeparator({ + className, + ...props +}: SelectPrimitive.Separator.Props) { + return ( + + ) +} + +function SelectScrollUpButton({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + ) +} + +function SelectScrollDownButton({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + ) +} + +export { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectLabel, + SelectScrollDownButton, + SelectScrollUpButton, + SelectSeparator, + SelectTrigger, + SelectValue, +} diff --git a/apps/site/src/components/ui/separator.tsx b/apps/site/src/components/ui/separator.tsx new file mode 100644 index 0000000..6e1369e --- /dev/null +++ b/apps/site/src/components/ui/separator.tsx @@ -0,0 +1,25 @@ +"use client" + +import { Separator as SeparatorPrimitive } from "@base-ui/react/separator" + +import { cn } from "@/lib/utils" + +function Separator({ + className, + orientation = "horizontal", + ...props +}: SeparatorPrimitive.Props) { + return ( + + ) +} + +export { Separator } diff --git a/apps/site/src/components/ui/tooltip.tsx b/apps/site/src/components/ui/tooltip.tsx new file mode 100644 index 0000000..69e8a82 --- /dev/null +++ b/apps/site/src/components/ui/tooltip.tsx @@ -0,0 +1,66 @@ +"use client" + +import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip" + +import { cn } from "@/lib/utils" + +function TooltipProvider({ + delay = 0, + ...props +}: TooltipPrimitive.Provider.Props) { + return ( + + ) +} + +function Tooltip({ ...props }: TooltipPrimitive.Root.Props) { + return +} + +function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) { + return +} + +function TooltipContent({ + className, + side = "top", + sideOffset = 4, + align = "center", + alignOffset = 0, + children, + ...props +}: TooltipPrimitive.Popup.Props & + Pick< + TooltipPrimitive.Positioner.Props, + "align" | "alignOffset" | "side" | "sideOffset" + >) { + return ( + + + + {children} + + + + + ) +} + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } diff --git a/apps/site/src/lib/i18n.ts b/apps/site/src/lib/i18n.ts new file mode 100644 index 0000000..6e16c9d --- /dev/null +++ b/apps/site/src/lib/i18n.ts @@ -0,0 +1,8 @@ +import { defineI18n } from 'fumadocs-core/i18n'; + +export const i18n = defineI18n({ + defaultLanguage: 'en', + languages: ['en', 'zh'], + hideLocale: 'default-locale', + parser: 'dir', +}); diff --git a/apps/site/src/lib/layout.shared.tsx b/apps/site/src/lib/layout.shared.tsx new file mode 100644 index 0000000..d92c478 --- /dev/null +++ b/apps/site/src/lib/layout.shared.tsx @@ -0,0 +1,40 @@ +import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared'; +import { siteConfig } from '@/lib/site.config'; + +/** + * Shared options used by both HomeLayout and DocsLayout. + */ +export function baseOptions(locale: string): BaseLayoutProps { + return { + nav: { + url: `/${locale === 'en' ? '' : locale}`, + }, + links: [ + { + text: 'Docs', + url: `/${locale === 'en' ? '' : locale + '/'}docs`, + active: 'nested-url', + }, + { + text: 'Download', + url: `/${locale === 'en' ? '' : locale + '/'}docs/installation`, + }, + ], + githubUrl: siteConfig.repo.url, + i18n: false, + themeSwitch: { enabled: false }, + }; +} + +/** + * Homepage-specific overrides: no nav (custom scroll-nav used instead), no search. + */ +export function homeOptions(locale: string): BaseLayoutProps { + return { + ...baseOptions(locale), + nav: { + enabled: false, + }, + searchToggle: { enabled: false }, + }; +} diff --git a/apps/site/src/lib/site.config.ts b/apps/site/src/lib/site.config.ts new file mode 100644 index 0000000..9ce6d41 --- /dev/null +++ b/apps/site/src/lib/site.config.ts @@ -0,0 +1,33 @@ +/** + * Centralized site configuration. + * All public URLs, repo links, and external references should be sourced from here + * to avoid drift across layout, marketing content, and documentation. + */ +export const siteConfig = { + name: 'CodePilot', + description: 'A native desktop GUI client for Claude Code', + + // Canonical repository + repo: { + owner: 'op7418', + name: 'CodePilot', + url: 'https://github.com/op7418/CodePilot', + releases: 'https://github.com/op7418/CodePilot/releases', + issues: 'https://github.com/op7418/CodePilot/issues', + }, + + // External links + links: { + discord: '#', // TODO: replace with actual Discord invite + mcp: 'https://modelcontextprotocol.io', + nodejs: 'https://nodejs.org', + anthropicConsole: 'https://console.anthropic.com', + openaiPlatform: 'https://platform.openai.com', + googleAIStudio: 'https://aistudio.google.com', + discordDev: 'https://discord.com/developers/applications', + telegramBotFather: 'https://t.me/BotFather', + feishuOpen: 'https://open.feishu.cn', + }, +} as const; + +export type SiteConfig = typeof siteConfig; diff --git a/apps/site/src/lib/source.ts b/apps/site/src/lib/source.ts new file mode 100644 index 0000000..3f1841e --- /dev/null +++ b/apps/site/src/lib/source.ts @@ -0,0 +1,20 @@ +import { docs } from '@/.source'; +import { loader } from 'fumadocs-core/source'; +import { i18n } from './i18n'; + +const mdxSource = docs.toFumadocsSource(); + +// fumadocs-mdx v11 returns `files` as a function at runtime, +// while fumadocs-core v15 expects a plain array. Unwrap at runtime, +// cast via `any` to bridge the version mismatch. +/* eslint-disable @typescript-eslint/no-explicit-any */ +const files: any = typeof mdxSource.files === 'function' + ? (mdxSource.files as any)() + : mdxSource.files; +/* eslint-enable @typescript-eslint/no-explicit-any */ + +export const source = loader({ + baseUrl: '/docs', + source: { ...mdxSource, files }, + i18n, +}); diff --git a/apps/site/src/lib/utils.ts b/apps/site/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/apps/site/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/apps/site/src/middleware.ts b/apps/site/src/middleware.ts new file mode 100644 index 0000000..b0cdcd5 --- /dev/null +++ b/apps/site/src/middleware.ts @@ -0,0 +1,8 @@ +import { createI18nMiddleware } from 'fumadocs-core/i18n/middleware'; +import { i18n } from './lib/i18n'; + +export default createI18nMiddleware(i18n); + +export const config = { + matcher: ['/((?!api|_next/static|_next/image|favicon.ico|.*\\..*).*)'], +}; diff --git a/apps/site/tsconfig.check.json b/apps/site/tsconfig.check.json new file mode 100644 index 0000000..7b35ae1 --- /dev/null +++ b/apps/site/tsconfig.check.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "**/*.ts", + "**/*.tsx", + "**/*.mdx", + ".source", + "next-env.d.ts" + ], + "exclude": [ + "node_modules", + ".next" + ] +} diff --git a/apps/site/tsconfig.json b/apps/site/tsconfig.json new file mode 100644 index 0000000..14a4bc4 --- /dev/null +++ b/apps/site/tsconfig.json @@ -0,0 +1,45 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*" + ], + "@/.source": [ + "./.source/index.ts" + ] + } + }, + "include": [ + "**/*.mdx", + "**/*.ts", + "**/*.tsx", + ".source", + "next-env.d.ts", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/docs/exec-plans/README.md b/docs/exec-plans/README.md index a77f385..740669d 100644 --- a/docs/exec-plans/README.md +++ b/docs/exec-plans/README.md @@ -45,6 +45,7 @@ | 文件 | 主题 | 状态 | |------|------|------| | active/context-storage-migration.md | 上下文共享与存储迁移 | Phase 0 部分完成,Phase 1-3 待开始 | +| active/site-and-docs.md | 官网 + 文档站(apps/site) | Phase 0-1 进行中 | ### Completed diff --git a/docs/exec-plans/active/site-and-docs.md b/docs/exec-plans/active/site-and-docs.md new file mode 100644 index 0000000..4f165ba --- /dev/null +++ b/docs/exec-plans/active/site-and-docs.md @@ -0,0 +1,198 @@ +# 官网 + 文档站(apps/site) + +> 创建时间:2026-03-10 +> 最后更新:2026-03-10 + +## 状态 + +| Phase | 内容 | 状态 | 备注 | +|-------|------|------|------| +| Phase 0 | Monorepo 基础设施 | ✅ 已完成 | npm workspaces + 共享配置 | +| Phase 1 | apps/site 骨架 + Fumadocs 接入 | ✅ 已完成 | Next.js + Fumadocs + i18n,已 CDP 验证 | +| Phase 2 | 官网页面(首页、下载、社区) | ✅ 已完成 | marketing 页面 + 内容源 | +| Phase 3 | 首批文档内容 | ✅ 已完成 | 7 篇 x 2 语言,已 CDP 验证 | +| Phase 4 | packages/ui 抽取 | 📋 待开始 | 共享组件库 | +| Phase 5 | 桌面端适配 + CI/CD | 📋 待开始 | Electron 改 /chat、Vercel 部署 | + +## 决策日志 + +- 2026-03-10: 官网与文档合并为一个 Next.js 应用 apps/site,与桌面应用分开部署 +- 2026-03-10: 文档框架选 Fumadocs(支持 Next.js、DocsLayout、i18n、Orama 搜索) +- 2026-03-10: 部署到 Vercel,桌面应用继续 GitHub Releases +- 2026-03-10: 第一阶段只做 zh + en +- 2026-03-10: packages/ui 放 Phase 4,先让 site 跑起来再抽共享组件 +- 2026-03-10: next.config.mjs(Fumadocs MDX 是 ESM-only) +- 2026-03-10: fumadocs-mdx v11 的 toFumadocsSource() 返回 files 为函数,fumadocs-core v15.8 期望数组,需手动调用 +- 2026-03-10: 根 tsconfig.json 需排除 apps/ 和 packages/ 避免 typecheck 冲突 +- 2026-03-10: @/.source 路径需要在 tsconfig paths 中单独映射(因为 src/ 目录结构) + +## 目标目录结构 + +``` +repo/ +├── apps/ +│ ├── desktop/ # 现有 Electron + Next.js(迁移自根目录) +│ └── site/ # 官网 + /docs +│ ├── app/ +│ │ ├── [lang]/ +│ │ │ ├── (marketing)/ +│ │ │ │ ├── page.tsx # 官网首页 +│ │ │ │ ├── download/page.tsx # 下载页 +│ │ │ │ └── community/page.tsx # 社区页 +│ │ │ ├── docs/ +│ │ │ │ ├── layout.tsx # DocsLayout +│ │ │ │ └── [[...slug]]/page.tsx # Fumadocs 文档页 +│ │ │ └── layout.tsx # [lang] layout + RootProvider +│ │ └── api/ +│ │ └── search/route.ts # Orama 搜索 API +│ ├── content/ +│ │ ├── docs/ +│ │ │ ├── en/ # 英文文档 MDX +│ │ │ └── zh/ # 中文文档 MDX +│ │ └── marketing/ +│ │ ├── en.ts # 英文官网文案 +│ │ └── zh.ts # 中文官网文案 +│ ├── lib/ +│ │ ├── source.ts # Fumadocs source loader +│ │ ├── i18n.ts # i18n 配置 +│ │ └── layout.shared.tsx # 共享 layout 选项 +│ ├── components/ # site 专用组件 +│ ├── public/ # 静态资源 +│ ├── source.config.ts # Fumadocs MDX 配置 +│ ├── next.config.mjs # ESM Next.js 配置 +│ ├── tailwind.css # Tailwind v4 + Fumadocs preset +│ ├── tsconfig.json +│ ├── package.json +│ └── middleware.ts # i18n middleware +├── packages/ +│ ├── ui/ # 共享 UI 组件(Phase 4) +│ └── config/ # 共享 tsconfig/eslint(Phase 4) +├── package.json # 根 workspace 配置 +└── ... (现有根目录文件保持不动,Phase 5 再迁移) +``` + +**Phase 0-3 策略:** 不动现有根目录结构。apps/site 作为独立新应用添加,用 npm workspaces 管理。现有桌面应用暂时留在根目录,Phase 5 再考虑是否迁移到 apps/desktop。 + +## 路由设计 + +| 路径 | 页面 | 说明 | +|------|------|------| +| `/` | 官网首页 | 产品介绍、特性展示、CTA | +| `/download` | 下载页 | 跳转 GitHub Releases | +| `/community` | 社区页 | Discord/GitHub 链接 | +| `/docs` | 文档首页 | Getting Started | +| `/docs/[...slug]` | 文档详情 | Fumadocs MDX 渲染 | +| `/zh/` | 中文首页 | 同上中文版 | +| `/zh/docs/[...slug]` | 中文文档 | 同上中文版 | +| `/api/search` | 搜索 API | Orama 全文搜索 | + +i18n 策略:en 为默认语言,URL 无前缀(`hideLocale: 'default-locale'`);zh 有 `/zh/` 前缀。 + +## Fumadocs 接入点 + +### 核心依赖 +``` +fumadocs-core — 内容加载、搜索、页面树、i18n +fumadocs-ui — DocsLayout、DocsPage、RootProvider、SearchDialog +fumadocs-mdx — MDX 构建时加载器、defineDocs、defineConfig +@types/mdx — MDX 类型支持 +``` + +### 关键配置文件 +- `source.config.ts` → `defineDocs({ dir: 'content/docs' })` +- `lib/source.ts` → `loader({ baseUrl: '/docs', source: docs.toFumadocsSource() })` +- `lib/i18n.ts` → `defineI18n({ defaultLanguage: 'en', languages: ['en', 'zh'] })` +- `middleware.ts` → `createI18nMiddleware(i18n)` +- `next.config.mjs` → `createMDX()(config)` + +### Tailwind v4 集成 +```css +@import "tailwindcss"; +@import "fumadocs-ui/css/neutral.css"; +@import "fumadocs-ui/css/preset.css"; +@source "../../node_modules/fumadocs-ui/dist/**/*.js"; +``` + +## Vercel 部署拓扑 + +- **Project root directory:** `apps/site` +- **Framework:** Next.js +- **Production branch:** main +- **Preview:** 开启,每个 PR 自动预览 +- **域名:** codepilot.xxx/ → 官网,codepilot.xxx/docs → 文档 + +Vercel 只部署 apps/site,桌面应用继续走 GitHub Actions + GitHub Releases。 + +## CI/CD 分工 + +| 触发条件 | 平台 | 产物 | +|----------|------|------| +| apps/site/** 变更 | Vercel | 官网 + 文档站 | +| 桌面应用代码变更 | GitHub Actions | DMG / NSIS 安装包 | +| git tag v* | GitHub Actions | Release + 安装包 | + +## 首批文档目录 + +``` +content/docs/en/ +├── index.mdx # Getting Started +├── installation.mdx # 安装指南 +├── providers/ +│ └── index.mdx # Provider 配置(Anthropic/OpenAI/Google/Bedrock) +├── mcp/ +│ └── index.mdx # MCP 插件系统 +├── bridge/ +│ └── index.mdx # 消息桥接(Discord/Telegram/飞书/QQ) +├── assistant-workspace/ +│ └── index.mdx # 助手工作区 +└── faq.mdx # 常见问题 + +content/docs/zh/ +└── (同上,中文版) +``` + +## 分阶段实施计划 + +### Phase 0: Monorepo 基础设施 +1. 根 package.json 添加 `workspaces: ["apps/*", "packages/*"]` +2. 创建 apps/site 目录和 package.json +3. 确保现有桌面应用不受影响 + +### Phase 1: apps/site 骨架 + Fumadocs 接入 +1. 初始化 Next.js 应用(next.config.mjs) +2. 安装 fumadocs-core、fumadocs-ui、fumadocs-mdx +3. 配置 source.config.ts + lib/source.ts +4. 配置 i18n(lib/i18n.ts + middleware.ts) +5. 配置 Tailwind v4 + Fumadocs CSS preset +6. 创建 [lang] layout + RootProvider +7. 创建 docs layout(DocsLayout)+ docs page(DocsPage) +8. 创建搜索 API(Orama) +9. 放入 1 篇测试文档验证全链路 + +### Phase 2: 官网页面 +1. 首页(产品介绍、特性网格、CTA) +2. 下载页(平台检测、跳转 Releases) +3. 社区页(Discord/GitHub 链接) +4. 共享导航栏 + 页脚 +5. marketing 文案内容源(en.ts / zh.ts) + +### Phase 3: 首批文档内容 +1. Getting Started +2. Installation +3. Providers +4. MCP +5. Bridge +6. Assistant Workspace +7. FAQ +8. 中文翻译 + +### Phase 4: packages/ui 抽取 +1. 从 src/components/ui/ 抽取到 packages/ui +2. 桌面应用和 site 都消费 packages/ui +3. 共享 tsconfig/eslint 配置到 packages/config + +### Phase 5: 桌面端适配 + CI/CD +1. Electron loadURL 改为直接打开 /chat +2. 桌面端根路径不再 redirect(或保持 redirect) +3. Vercel 项目配置 +4. GitHub Actions 调整(monorepo 感知) diff --git a/eslint.config.mjs b/eslint.config.mjs index 95c163f..3204f6d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -14,6 +14,9 @@ const eslintConfig = defineConfig([ "release/**", "dist-electron/**", "next-env.d.ts", + // apps/site generated artifacts + "apps/site/.next/**", + "apps/site/.source/**", ]), ]); diff --git a/package-lock.json b/package-lock.json index 3a92ff9..dbc6033 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,10 @@ "": { "name": "codepilot", "version": "0.30.0", + "workspaces": [ + "apps/*", + "packages/*" + ], "dependencies": { "@ai-sdk/amazon-bedrock": "^4.0.77", "@ai-sdk/anthropic": "^3.0.47", @@ -80,6 +84,963 @@ "wait-on": "^9.0.3" } }, + "apps/site": { + "name": "@codepilot/site", + "version": "0.1.0", + "dependencies": { + "@base-ui/react": "^1.2.0", + "@hugeicons/core-free-icons": "^4.0.0", + "@hugeicons/react": "^1.1.6", + "@types/mdx": "^2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "framer-motion": "^12.35.2", + "fumadocs-core": "^15", + "fumadocs-mdx": "^11", + "fumadocs-ui": "^15", + "lucide-react": "^0.563.0", + "next": "15.3.3", + "react": "^19", + "react-dom": "^19", + "shadcn": "^4.0.2", + "tailwind-merge": "^3.5.0", + "tw-animate-css": "^1.4.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "postcss": "^8", + "tailwindcss": "^4", + "typescript": "^5" + } + }, + "apps/site/node_modules/@base-ui/react": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@base-ui/react/-/react-1.2.0.tgz", + "integrity": "sha512-O6aEQHcm+QyGTFY28xuwRD3SEJGZOBDpyjN2WvpfWYFVhg+3zfXPysAILqtM0C1kWC82MccOE/v1j+GHXE4qIw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "@base-ui/utils": "0.2.5", + "@floating-ui/react-dom": "^2.1.6", + "@floating-ui/utils": "^0.2.10", + "tabbable": "^6.4.0", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17 || ^18 || ^19", + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "apps/site/node_modules/@base-ui/utils": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.5.tgz", + "integrity": "sha512-oYC7w0gp76RI5MxprlGLV0wze0SErZaRl3AAkeP3OnNB/UBMb6RqNf6ZSIlxOc9Qp68Ab3C2VOcJQyRs7Xc7Vw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "@floating-ui/utils": "^0.2.10", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "@types/react": "^17 || ^18 || ^19", + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "apps/site/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "apps/site/node_modules/@hugeicons/core-free-icons": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@hugeicons/core-free-icons/-/core-free-icons-4.0.0.tgz", + "integrity": "sha512-bzfbKumv3ke3ajbe2MyXi9i0I/cdsZ6n/mO9EfIPNSL++pHLqs7nSGRIVUtjF4xrrEyVkfhxssv4Jek8DPA6gA==", + "license": "MIT" + }, + "apps/site/node_modules/@next/env": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz", + "integrity": "sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==", + "license": "MIT" + }, + "apps/site/node_modules/@next/swc-darwin-arm64": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz", + "integrity": "sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/site/node_modules/@next/swc-darwin-x64": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz", + "integrity": "sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/site/node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz", + "integrity": "sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/site/node_modules/@next/swc-linux-arm64-musl": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz", + "integrity": "sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/site/node_modules/@next/swc-linux-x64-gnu": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz", + "integrity": "sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/site/node_modules/@next/swc-linux-x64-musl": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz", + "integrity": "sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/site/node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz", + "integrity": "sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/site/node_modules/@next/swc-win32-x64-msvc": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz", + "integrity": "sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "apps/site/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "apps/site/node_modules/fumadocs-core": { + "version": "15.8.5", + "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-15.8.5.tgz", + "integrity": "sha512-hyJtKGuB2J/5y7tDfI1EnGMKlNbSXM5N5cpwvgCY0DcBJwFMDG/GpSpaVRzh3aWy67pAYDZFIwdtbKXBa/q5bg==", + "license": "MIT", + "dependencies": { + "@formatjs/intl-localematcher": "^0.6.2", + "@orama/orama": "^3.1.14", + "@shikijs/rehype": "^3.13.0", + "@shikijs/transformers": "^3.13.0", + "github-slugger": "^2.0.0", + "hast-util-to-estree": "^3.1.3", + "hast-util-to-jsx-runtime": "^2.3.6", + "image-size": "^2.0.2", + "negotiator": "^1.0.0", + "npm-to-yarn": "^3.0.1", + "path-to-regexp": "^8.3.0", + "react-remove-scroll": "^2.7.1", + "remark": "^15.0.1", + "remark-gfm": "^4.0.1", + "remark-rehype": "^11.1.2", + "scroll-into-view-if-needed": "^3.1.0", + "shiki": "^3.13.0", + "unist-util-visit": "^5.0.0" + }, + "peerDependencies": { + "@mixedbread/sdk": "^0.19.0", + "@oramacloud/client": "1.x.x || 2.x.x", + "@tanstack/react-router": "1.x.x", + "@types/react": "*", + "algoliasearch": "5.x.x", + "lucide-react": "*", + "next": "14.x.x || 15.x.x", + "react": "18.x.x || 19.x.x", + "react-dom": "18.x.x || 19.x.x", + "react-router": "7.x.x", + "waku": "^0.26.0" + }, + "peerDependenciesMeta": { + "@mixedbread/sdk": { + "optional": true + }, + "@oramacloud/client": { + "optional": true + }, + "@tanstack/react-router": { + "optional": true + }, + "@types/react": { + "optional": true + }, + "algoliasearch": { + "optional": true + }, + "lucide-react": { + "optional": true + }, + "next": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-router": { + "optional": true + }, + "waku": { + "optional": true + } + } + }, + "apps/site/node_modules/fumadocs-mdx": { + "version": "11.10.1", + "resolved": "https://registry.npmjs.org/fumadocs-mdx/-/fumadocs-mdx-11.10.1.tgz", + "integrity": "sha512-WoEzzzoKncXl7PM++GRxEplAb73y3A4ow+QdTYybhVtoYXgJzvTzkLc5OIlNQm72Dv+OxSAx7uk11zTTOX9YMQ==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.1.1", + "@standard-schema/spec": "^1.0.0", + "chokidar": "^4.0.3", + "esbuild": "^0.25.9", + "estree-util-value-to-estree": "^3.4.0", + "js-yaml": "^4.1.0", + "lru-cache": "^11.2.1", + "picocolors": "^1.1.1", + "remark-mdx": "^3.1.1", + "remark-parse": "^11.0.0", + "tinyexec": "^1.0.1", + "tinyglobby": "^0.2.15", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", + "zod": "^4.1.8" + }, + "bin": { + "fumadocs-mdx": "dist/bin.js" + }, + "peerDependencies": { + "@fumadocs/mdx-remote": "^1.4.0", + "fumadocs-core": "^14.0.0 || ^15.0.0", + "next": "^15.3.0", + "react": "*", + "vite": "6.x.x || 7.x.x" + }, + "peerDependenciesMeta": { + "@fumadocs/mdx-remote": { + "optional": true + }, + "next": { + "optional": true + }, + "react": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "apps/site/node_modules/fumadocs-ui": { + "version": "15.8.5", + "resolved": "https://registry.npmjs.org/fumadocs-ui/-/fumadocs-ui-15.8.5.tgz", + "integrity": "sha512-9pyB+9rOOsrFnmmZ9xREp/OgVhyaSq2ocEpqTNbeQ7tlJ6JWbdFWfW0C9lRXprQEB6DJWUDtDxqKS5QXLH0EGA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-direction": "^1.1.1", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-presence": "^1.1.5", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-tabs": "^1.1.13", + "class-variance-authority": "^0.7.1", + "fumadocs-core": "15.8.5", + "lodash.merge": "^4.6.2", + "next-themes": "^0.4.6", + "postcss-selector-parser": "^7.1.0", + "react-medium-image-zoom": "^5.4.0", + "scroll-into-view-if-needed": "^3.1.0", + "tailwind-merge": "^3.3.1" + }, + "peerDependencies": { + "@types/react": "*", + "next": "14.x.x || 15.x.x", + "react": "18.x.x || 19.x.x", + "react-dom": "18.x.x || 19.x.x", + "tailwindcss": "^3.4.14 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "next": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "apps/site/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "apps/site/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "apps/site/node_modules/next": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.3.3.tgz", + "integrity": "sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==", + "deprecated": "This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/CVE-2025-66478 for more details.", + "license": "MIT", + "dependencies": { + "@next/env": "15.3.3", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.15", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.3.3", + "@next/swc-darwin-x64": "15.3.3", + "@next/swc-linux-arm64-gnu": "15.3.3", + "@next/swc-linux-arm64-musl": "15.3.3", + "@next/swc-linux-x64-gnu": "15.3.3", + "@next/swc-linux-x64-musl": "15.3.3", + "@next/swc-win32-arm64-msvc": "15.3.3", + "@next/swc-win32-x64-msvc": "15.3.3", + "sharp": "^0.34.1" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "apps/site/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/@ai-sdk/amazon-bedrock": { "version": "4.0.77", "resolved": "https://registry.npmjs.org/@ai-sdk/amazon-bedrock/-/amazon-bedrock-4.0.77.tgz", @@ -483,6 +1444,27 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@antfu/ni": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@antfu/ni/-/ni-25.0.0.tgz", + "integrity": "sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==", + "license": "MIT", + "dependencies": { + "ansis": "^4.0.0", + "fzf": "^0.5.2", + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "na": "bin/na.mjs", + "nci": "bin/nci.mjs", + "ni": "bin/ni.mjs", + "nlx": "bin/nlx.mjs", + "nr": "bin/nr.mjs", + "nun": "bin/nun.mjs", + "nup": "bin/nup.mjs" + } + }, "node_modules/@anthropic-ai/claude-agent-sdk": { "version": "0.2.62", "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/-/claude-agent-sdk-0.2.62.tgz", @@ -600,7 +1582,6 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -610,7 +1591,6 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.0", @@ -653,11 +1633,22 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.28.6", @@ -670,6 +1661,27 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -679,6 +1691,19 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", @@ -696,7 +1721,6 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.28.6", @@ -710,6 +1734,57 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -732,7 +1807,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -742,7 +1816,6 @@ "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.28.6", @@ -767,6 +1840,90 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", @@ -934,6 +2091,10 @@ "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", "license": "Apache-2.0" }, + "node_modules/@codepilot/site": { + "resolved": "apps/site", + "link": true + }, "node_modules/@develar/schema-utils": { "version": "2.6.5", "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", @@ -1154,6 +2315,194 @@ "react": ">=16.8.0" } }, + "node_modules/@dotenvx/dotenvx": { + "version": "1.54.1", + "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.54.1.tgz", + "integrity": "sha512-41gU3q7v05GM92QPuPUf4CmUw+mmF8p4wLUh6MCRlxpCkJ9ByLcY9jUf6MwrMNmiKyG/rIckNxj9SCfmNCmCqw==", + "license": "BSD-3-Clause", + "dependencies": { + "commander": "^11.1.0", + "dotenv": "^17.2.1", + "eciesjs": "^0.4.10", + "execa": "^5.1.1", + "fdir": "^6.2.0", + "ignore": "^5.3.0", + "object-treeify": "1.1.33", + "picomatch": "^4.0.2", + "which": "^4.0.0" + }, + "bin": { + "dotenvx": "src/cli/dotenvx.js" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/dotenv": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@ecies/ciphers": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.5.tgz", + "integrity": "sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==", + "license": "MIT", + "engines": { + "bun": ">=1", + "deno": ">=2", + "node": ">=16" + }, + "peerDependencies": { + "@noble/ciphers": "^1.0.0" + } + }, "node_modules/@electron/asar": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", @@ -2450,6 +3799,15 @@ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", "license": "MIT" }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", + "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@giscus/react": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@giscus/react/-/react-3.1.0.tgz", @@ -2540,6 +3898,18 @@ "@hapi/hoek": "^11.0.2" } }, + "node_modules/@hono/node-server": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", + "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@hugeicons/core-free-icons": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@hugeicons/core-free-icons/-/core-free-icons-3.1.1.tgz", @@ -2547,9 +3917,9 @@ "license": "MIT" }, "node_modules/@hugeicons/react": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@hugeicons/react/-/react-1.1.4.tgz", - "integrity": "sha512-gsc3eZyd2fGqRUThW9+lfjxxsOkz6KNVmRXRgJjP32GL0OnnLJnl3hytKt47CBbiQj2xE2kCw+rnP3UQCThcKw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@hugeicons/react/-/react-1.1.6.tgz", + "integrity": "sha512-c2LhXJMAW5wN1pC/smBXG0YPqUON6ceR/ZdXHCjEI9KvB+hjtqYjmzIxok5hAQOeXGz0WtORgCQMzqewFKAZwg==", "license": "MIT", "peerDependencies": { "react": ">=16.0.0" @@ -3090,6 +4460,115 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", @@ -3230,7 +4709,6 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -3595,7 +5073,6 @@ "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -3633,7 +5110,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "license": "BSD-3-Clause", - "peer": true, "engines": { "node": ">= 12" } @@ -3665,6 +5141,85 @@ "langium": "3.3.1" } }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.27.1.tgz", + "integrity": "sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@mswjs/interceptors": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.3.tgz", + "integrity": "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==", + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", @@ -3822,11 +5377,49 @@ "node": ">= 10" } }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -3840,7 +5433,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -3850,7 +5442,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -3920,6 +5511,28 @@ "node": ">=10" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "license": "MIT" + }, "node_modules/@opentelemetry/api": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", @@ -3929,6 +5542,15 @@ "node": ">=8.0.0" } }, + "node_modules/@orama/orama": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.18.tgz", + "integrity": "sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20.0.0" + } + }, "node_modules/@pierre/diffs": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@pierre/diffs/-/diffs-1.0.11.tgz", @@ -6384,74 +8006,17 @@ "npm": ">=7.0.0" } }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, "node_modules/@shikijs/core": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz", - "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.22.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.5" - } - }, - "node_modules/@shikijs/engine-javascript": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.22.0.tgz", - "integrity": "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.22.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.4" - } - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz", - "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.22.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@shikijs/langs": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.22.0.tgz", - "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.22.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.22.0.tgz", - "integrity": "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==", - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.22.0" - } - }, - "node_modules/@shikijs/transformers": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.23.0.tgz", - "integrity": "sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@shikijs/core": "3.23.0", - "@shikijs/types": "3.23.0" - } - }, - "node_modules/@shikijs/transformers/node_modules/@shikijs/core": { "version": "3.23.0", "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", "license": "MIT", - "peer": true, "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", @@ -6459,21 +8024,73 @@ "hast-util-to-html": "^9.0.5" } }, - "node_modules/@shikijs/transformers/node_modules/@shikijs/types": { + "node_modules/@shikijs/engine-javascript": { "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", - "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", "license": "MIT", - "peer": true, "dependencies": { + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/rehype": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.23.0.tgz", + "integrity": "sha512-GepKJxXHbXFfAkiZZZ+4V7x71Lw3s0ALYmydUxJRdvpKjSx9FOMSaunv6WRLFBXR6qjYerUq1YZQno+2gLEPwA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@types/hast": "^3.0.4", + "hast-util-to-string": "^3.0.1", + "shiki": "3.23.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.1.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.23.0.tgz", + "integrity": "sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/types": "3.23.0" } }, "node_modules/@shikijs/types": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", - "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -6499,6 +8116,18 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@smithy/eventstream-codec": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.11.tgz", @@ -6660,6 +8289,12 @@ "react": "^18.0.0 || ^19.0.0" } }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -7013,6 +8648,81 @@ "tailwindcss": "4.1.18" } }, + "node_modules/@ts-morph/common": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.27.0.tgz", + "integrity": "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.3", + "minimatch": "^10.0.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@ts-morph/common/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@ts-morph/common/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@ts-morph/common/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@ts-morph/common/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -7431,8 +9141,7 @@ "version": "2.0.13", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/ms": { "version": "2.1.0", @@ -7518,6 +9227,12 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "license": "MIT" }, + "node_modules/@types/statuses": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz", + "integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==", + "license": "MIT" + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -7543,6 +9258,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/validate-npm-package-name": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/validate-npm-package-name/-/validate-npm-package-name-4.0.2.tgz", + "integrity": "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==", + "license": "MIT" + }, "node_modules/@types/verror": { "version": "1.10.11", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", @@ -8181,6 +9902,44 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -8269,6 +10028,45 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -8340,6 +10138,15 @@ "react-dom": "^16.3.2 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, "node_modules/antd": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/antd/-/antd-6.3.1.tgz", @@ -8849,6 +10656,18 @@ "node": ">=0.10.0" } }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -8872,7 +10691,6 @@ "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "license": "MIT", - "peer": true, "bin": { "astring": "bin/astring" } @@ -9087,6 +10905,46 @@ "readable-stream": "^3.4.0" } }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/boolean": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", @@ -9111,7 +10969,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -9124,7 +10981,6 @@ "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -9277,6 +11133,41 @@ "node": ">= 10.0.0" } }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -9561,6 +11452,21 @@ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "license": "MIT" }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", @@ -9633,7 +11539,6 @@ "version": "2.9.2", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9660,6 +11565,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -9670,7 +11584,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -9739,12 +11652,17 @@ "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, + "node_modules/code-block-writer": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", + "license": "MIT" + }, "node_modules/collapse-white-space": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9827,8 +11745,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -9884,13 +11801,52 @@ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", "license": "MIT" }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -9899,6 +11855,23 @@ "license": "MIT", "optional": true }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/cose-base": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", @@ -9958,6 +11931,18 @@ "node": ">= 8" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", @@ -10609,6 +12594,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -10625,6 +12624,43 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -10666,6 +12702,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -10702,6 +12750,15 @@ "node": ">=0.4.0" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -10752,7 +12809,6 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", "license": "BSD-3-Clause", - "peer": true, "engines": { "node": ">=0.3.1" } @@ -10966,6 +13022,29 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/eciesjs": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.18.tgz", + "integrity": "sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ==", + "license": "MIT", + "dependencies": { + "@ecies/ciphers": "^0.2.5", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "^1.9.7", + "@noble/hashes": "^1.8.0" + }, + "engines": { + "bun": ">=1", + "deno": ">=2", + "node": ">=16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -11137,7 +13216,6 @@ "version": "1.5.286", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", - "dev": true, "license": "ISC" }, "node_modules/electron-updater": { @@ -11271,6 +13349,15 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", @@ -11321,7 +13408,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11552,7 +13638,6 @@ "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", @@ -11569,7 +13654,6 @@ "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", @@ -11627,7 +13711,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11639,6 +13722,12 @@ "integrity": "sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==", "license": "MIT" }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -12029,6 +14118,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -12070,7 +14172,6 @@ "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0" }, @@ -12084,7 +14185,6 @@ "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", @@ -12111,7 +14211,6 @@ "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" @@ -12126,7 +14225,6 @@ "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", @@ -12142,17 +14240,27 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "license": "BSD-3-Clause", - "peer": true, "engines": { "node": ">= 12" } }, + "node_modules/estree-util-value-to-estree": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz", + "integrity": "sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, "node_modules/estree-util-visit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" @@ -12167,7 +14275,6 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -12182,12 +14289,33 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/eventemitter3": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "license": "MIT" }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/eventsource-parser": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", @@ -12197,6 +14325,60 @@ "node": ">=18.0.0" } }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -12213,6 +14395,92 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", + "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", + "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -12324,11 +14592,26 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -12380,6 +14663,33 @@ "node": "^12.20 || >= 14.13" } }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -12449,7 +14759,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -12471,6 +14780,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -12625,13 +14955,22 @@ "node": ">=12.20.0" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/framer-motion": { - "version": "12.33.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.33.0.tgz", - "integrity": "sha512-ca8d+rRPcDP5iIF+MoT3WNc0KHJMjIyFAbtVLvM9eA7joGSpeqDfiNH/kCs1t4CHi04njYvWyj0jS4QlEK/rJQ==", + "version": "12.35.2", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.35.2.tgz", + "integrity": "sha512-dhfuEMaNo0hc+AEqyHiIfiJRNb9U9UQutE9FoKm5pjf7CMitp9xPEF1iWZihR1q86LBmo6EJ7S8cN8QXEy49AA==", "license": "MIT", "dependencies": { - "motion-dom": "^12.33.0", + "motion-dom": "^12.35.2", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, @@ -12652,6 +14991,15 @@ } } }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -12748,6 +15096,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/fuzzysort": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz", + "integrity": "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==", + "license": "MIT" + }, + "node_modules/fzf": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fzf/-/fzf-0.5.2.tgz", + "integrity": "sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==", + "license": "BSD-3-Clause" + }, "node_modules/gaxios": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", @@ -12863,7 +15223,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -12873,7 +15232,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -12924,6 +15282,18 @@ "node": ">=6" } }, + "node_modules/get-own-enumerable-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-keys/-/get-own-enumerable-keys-1.0.0.tgz", + "integrity": "sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -13010,6 +15380,12 @@ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "license": "MIT" }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -13178,6 +15554,15 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, + "node_modules/graphql": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.1.tgz", + "integrity": "sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/hachure-fill": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", @@ -13415,7 +15800,6 @@ "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -13508,6 +15892,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-text": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", @@ -13554,6 +15951,12 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "license": "MIT" + }, "node_modules/hermes-estree": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", @@ -13595,6 +15998,15 @@ "react-is": "^16.7.0" } }, + "node_modules/hono": { + "version": "4.12.6", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.6.tgz", + "integrity": "sha512-KljEp+MeEEEIOT75qBo1UjqqB29fRMtlDEwCxcexOzdkUq6LR/vRvHk5pdROcxyOYyW1niq7Gb5pFVGy5R1eBw==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -13655,6 +16067,26 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -13696,6 +16128,15 @@ "node": ">= 14" } }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/husky": { "version": "9.1.7", "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", @@ -13766,12 +16207,23 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, + "node_modules/image-size": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, "node_modules/immer": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", @@ -13874,12 +16326,20 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", - "dev": true, "license": "MIT", "engines": { "node": ">= 12" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", @@ -14077,6 +16537,21 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -14094,7 +16569,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14149,7 +16623,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -14168,6 +16641,36 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -14210,11 +16713,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -14237,6 +16745,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-3.0.0.tgz", + "integrity": "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -14262,6 +16782,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -14281,6 +16807,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", @@ -14310,6 +16848,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", @@ -14420,6 +16970,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -14536,6 +17101,15 @@ "node": ">= 20" } }, + "node_modules/jose": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.1.tgz", + "integrity": "sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-cookie": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", @@ -14611,6 +17185,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -14640,7 +17220,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -14727,6 +17306,15 @@ "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/langium": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz", @@ -15688,7 +18276,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -15747,7 +18334,6 @@ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=16" }, @@ -16021,7 +18607,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", "license": "MIT", - "peer": true, "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", @@ -16184,6 +18769,33 @@ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "license": "MIT" }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, "node_modules/merge-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/merge-value/-/merge-value-1.0.0.tgz", @@ -16204,7 +18816,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -16546,7 +19157,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -16563,7 +19173,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -16586,7 +19195,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", "license": "MIT", - "peer": true, "dependencies": { "micromark-util-types": "^2.0.0" }, @@ -16600,7 +19208,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", "license": "MIT", - "peer": true, "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", @@ -16621,7 +19228,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -16696,7 +19302,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -16925,7 +19530,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", @@ -17069,7 +19673,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -17117,7 +19720,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -17127,7 +19729,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -17395,9 +19996,9 @@ } }, "node_modules/motion-dom": { - "version": "12.33.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.33.0.tgz", - "integrity": "sha512-XRPebVypsl0UM+7v0Hr8o9UAj0S2djsQWRdHBd5iVouVpMrQqAI0C/rDAT3QaYnXnHuC5hMcwDHCboNeyYjPoQ==", + "version": "12.35.2", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.35.2.tgz", + "integrity": "sha512-pWXFMTwvGDbx1Fe9YL5HZebv2NhvGBzRtiNUv58aoK7+XrsuaydQ0JGRKK2r+bTKlwgSWwWxHbP5249Qr/BNpg==", "license": "MIT", "dependencies": { "motion-utils": "^12.29.2" @@ -17415,6 +20016,93 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/msw": { + "version": "2.12.10", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.10.tgz", + "integrity": "sha512-G3VUymSE0/iegFnuipujpwyTM2GuZAKXNeerUSrG2+Eg391wW63xFs5ixWsK9MWzr1AGoSkYGmyAzNgbR3+urw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.41.2", + "@open-draft/deferred-promise": "^2.2.0", + "@types/statuses": "^2.0.6", + "cookie": "^1.0.2", + "graphql": "^16.12.0", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "rettime": "^0.10.1", + "statuses": "^2.0.2", + "strict-event-emitter": "^0.5.1", + "tough-cookie": "^6.0.0", + "type-fest": "^5.2.0", + "until-async": "^3.0.2", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/msw/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/msw/node_modules/type-fest": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", + "integrity": "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/nan": { "version": "2.25.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", @@ -17472,7 +20160,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -17748,7 +20435,6 @@ "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, "license": "MIT" }, "node_modules/nopt": { @@ -17780,6 +20466,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-to-yarn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-to-yarn/-/npm-to-yarn-3.0.1.tgz", + "integrity": "sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/nebrelbug/npm-to-yarn?sponsor=1" + } + }, "node_modules/numeral": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", @@ -17821,6 +20547,15 @@ "node": ">= 0.4" } }, + "node_modules/object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/object.assign": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", @@ -17924,6 +20659,18 @@ "url": "https://github.com/sindresorhus/on-change?sponsor=1" } }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -17937,7 +20684,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -17966,6 +20712,26 @@ "regex-recursion": "^6.0.2" } }, + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -18008,6 +20774,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "license": "MIT" + }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -18170,6 +20942,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -18182,6 +20966,21 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, "node_modules/path-data-parser": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", @@ -18245,6 +21044,16 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -18292,7 +21101,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -18301,6 +21109,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-types": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", @@ -18401,7 +21218,6 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -18426,11 +21242,23 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss/node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -18475,6 +21303,18 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -18511,6 +21351,21 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prismjs": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", @@ -18554,6 +21409,28 @@ "node": ">=10" } }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -18611,6 +21488,19 @@ "node": ">=12.0.0" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -18683,7 +21573,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -18790,6 +21679,46 @@ } } }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -19245,6 +22174,22 @@ "react": ">=18" } }, + "node_modules/react-medium-image-zoom": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/react-medium-image-zoom/-/react-medium-image-zoom-5.4.1.tgz", + "integrity": "sha512-DD2iZYaCfAwiQGR8AN62r/cDJYoXhezlYJc5HY4TzBUGuGge43CptG0f7m0PEIM72aN6GfpjohvY1yYdtCJB7g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/rpearce" + } + ], + "license": "BSD-3-Clause", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/react-merge-refs": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-3.0.2.tgz", @@ -19441,6 +22386,35 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recast": { + "version": "0.23.11", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", + "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, "node_modules/recharts": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.7.0.tgz", @@ -19476,7 +22450,6 @@ "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", @@ -19492,7 +22465,6 @@ "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", "license": "MIT", - "peer": true, "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", @@ -19513,7 +22485,6 @@ "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", @@ -19530,7 +22501,6 @@ "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", @@ -19705,7 +22675,6 @@ "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", @@ -19730,6 +22699,22 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", + "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-breaks": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz", @@ -19846,7 +22831,6 @@ "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "license": "MIT", - "peer": true, "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" @@ -19914,7 +22898,15 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -20034,11 +23026,16 @@ "node": ">= 4" } }, + "node_modules/rettime": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.10.1.tgz", + "integrity": "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==", + "license": "MIT" + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -20104,11 +23101,38 @@ "points-on-path": "^0.2.1" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -20268,7 +23292,6 @@ "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", "license": "MIT", - "peer": true, "dependencies": { "compute-scroll-into-view": "^3.0.2" } @@ -20277,7 +23300,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -20289,6 +23311,57 @@ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "license": "MIT" }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/send/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", @@ -20306,6 +23379,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -20381,6 +23473,374 @@ "node": ">=0.10.0" } }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shadcn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-4.0.2.tgz", + "integrity": "sha512-U6BxywcVt5Vy+iLdjoyWTPcuz2RQNad09tjJsW8hyKtxlx7VAvzHIvoNxvXN+gxWt/HX8kt/cVNk8AXcmPUaNQ==", + "license": "MIT", + "dependencies": { + "@antfu/ni": "^25.0.0", + "@babel/core": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/plugin-transform-typescript": "^7.28.0", + "@babel/preset-typescript": "^7.27.1", + "@dotenvx/dotenvx": "^1.48.4", + "@modelcontextprotocol/sdk": "^1.26.0", + "@types/validate-npm-package-name": "^4.0.2", + "browserslist": "^4.26.2", + "commander": "^14.0.0", + "cosmiconfig": "^9.0.0", + "dedent": "^1.6.0", + "deepmerge": "^4.3.1", + "diff": "^8.0.2", + "execa": "^9.6.0", + "fast-glob": "^3.3.3", + "fs-extra": "^11.3.1", + "fuzzysort": "^3.1.0", + "https-proxy-agent": "^7.0.6", + "kleur": "^4.1.5", + "msw": "^2.10.4", + "node-fetch": "^3.3.2", + "open": "^11.0.0", + "ora": "^8.2.0", + "postcss": "^8.5.6", + "postcss-selector-parser": "^7.1.0", + "prompts": "^2.4.2", + "recast": "^0.23.11", + "stringify-object": "^5.0.0", + "tailwind-merge": "^3.0.1", + "ts-morph": "^26.0.0", + "tsconfig-paths": "^4.2.0", + "validate-npm-package-name": "^7.0.1", + "zod": "^3.24.1", + "zod-to-json-schema": "^3.24.6" + }, + "bin": { + "shadcn": "dist/index.js" + } + }, + "node_modules/shadcn/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/shadcn/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/shadcn/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/shadcn/node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/shadcn/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/shadcn/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/shadcn/node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/shadcn/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/shadcn/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/shadcn/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shadcn/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shadcn/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/shadcn/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/shadcn/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/shadcn/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", @@ -20474,17 +23934,17 @@ } }, "node_modules/shiki": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.22.0.tgz", - "integrity": "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", "license": "MIT", "dependencies": { - "@shikijs/core": "3.22.0", - "@shikijs/engine-javascript": "3.22.0", - "@shikijs/engine-oniguruma": "3.22.0", - "@shikijs/langs": "3.22.0", - "@shikijs/themes": "3.22.0", - "@shikijs/types": "3.22.0", + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } @@ -20594,7 +24054,6 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, "license": "ISC" }, "node_modules/simple-concat": { @@ -20668,6 +24127,12 @@ "node": ">=10" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, "node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -20729,7 +24194,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -20843,6 +24307,27 @@ "node": ">= 6" } }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -20894,6 +24379,20 @@ "node": ">= 20" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "license": "MIT" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -21088,6 +24587,23 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/stringify-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-5.0.0.tgz", + "integrity": "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-keys": "^1.0.0", + "is-obj": "^3.0.0", + "is-regexp": "^3.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/stringify-object?sponsor=1" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -21117,12 +24633,23 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -21239,13 +24766,24 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "license": "MIT" + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", "license": "MIT", - "peer": true + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/tailwind-merge": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", - "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", "license": "MIT", "funding": { "type": "github", @@ -21256,7 +24794,7 @@ "version": "4.1.18", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/tapable": { @@ -21457,7 +24995,6 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -21474,7 +25011,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -21492,7 +25028,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -21501,6 +25036,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/tldts": { + "version": "7.0.25", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.25.tgz", + "integrity": "sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==", + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.25" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.25", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.25.tgz", + "integrity": "sha512-ZjCZK0rppSBu7rjHYDYsEaMOIbbT+nWF57hKkv4IUmZWBNrBWBOjIElc0mKRgLM8bm7x/BBlof6t2gi/Oq/Asw==", + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", @@ -21525,7 +25078,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -21548,6 +25100,27 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", + "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -21626,6 +25199,16 @@ "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", "license": "MIT" }, + "node_modules/ts-morph": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-26.0.0.tgz", + "integrity": "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==", + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.27.0", + "code-block-writer": "^13.0.3" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -21709,7 +25292,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/Wombosvideo" @@ -21742,6 +25324,45 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -21824,7 +25445,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -21904,6 +25525,18 @@ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", @@ -21994,7 +25627,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -22069,6 +25701,15 @@ "node": ">= 4.0.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -22104,11 +25745,19 @@ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, + "node_modules/until-async": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz", + "integrity": "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/kettanaito" + } + }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "dev": true, "funding": [ { "type": "opencollective", @@ -22258,6 +25907,24 @@ "license": "MIT", "peer": true }, + "node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/verror": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", @@ -22585,7 +26252,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -22644,6 +26310,22 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", @@ -22658,7 +26340,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -22668,7 +26349,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, "license": "ISC" }, "node_modules/yaml": { @@ -22684,7 +26364,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -22703,7 +26382,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -22733,6 +26411,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zlib-sync": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/zlib-sync/-/zlib-sync-0.1.10.tgz", @@ -22752,6 +26454,15 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, "node_modules/zod-validation-error": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", diff --git a/package.json b/package.json index 2ce836f..32642af 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "codepilot", "version": "0.30.0", "private": true, + "workspaces": ["apps/*", "packages/*"], "author": { "name": "op7418", "email": "7418@openclaw.ai" diff --git a/tsconfig.json b/tsconfig.json index f4fe347..d320569 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,5 +30,5 @@ ".next/dev/types/**/*.ts", "**/*.mts" ], - "exclude": ["node_modules", "electron", "dist-electron", "scripts", "release"] + "exclude": ["node_modules", "electron", "dist-electron", "scripts", "release", "apps", "packages"] }