From 6fb59d2bc5c6e15c4e732d0f556b3a1bcbf957aa Mon Sep 17 00:00:00 2001 From: Sam Denty Date: Wed, 25 Sep 2024 19:54:09 +0100 Subject: [PATCH] fix: remove monorepo --- .github/workflows/ci.yaml | 1 - README.md | 83 +- .../app => app}/components/chat/Artifact.tsx | 0 .../components/chat/AssistantMessage.tsx | 0 .../components/chat/BaseChat.module.scss | 0 .../app => app}/components/chat/BaseChat.tsx | 0 .../components/chat/Chat.client.tsx | 13 - .../components/chat/CodeBlock.module.scss | 0 .../app => app}/components/chat/CodeBlock.tsx | 0 .../components/chat/Markdown.module.scss | 0 .../app => app}/components/chat/Markdown.tsx | 0 .../components/chat/Messages.client.tsx | 0 .../components/chat/SendButton.client.tsx | 0 .../components/chat/UserMessage.tsx | 0 .../editor/codemirror/BinaryContent.tsx | 0 .../editor/codemirror/CodeMirrorEditor.tsx | 0 .../components/editor/codemirror/cm-theme.ts | 0 .../components/editor/codemirror/indent.ts | 0 .../components/editor/codemirror/languages.ts | 0 .../app => app}/components/header/Header.tsx | 0 .../header/HeaderActionButtons.client.tsx | 4 - .../components/sidebar/HistoryItem.tsx | 0 .../components/sidebar/Menu.client.tsx | 0 .../components/sidebar/date-binning.ts | 0 .../bolt/app => app}/components/ui/Dialog.tsx | 0 .../app => app}/components/ui/IconButton.tsx | 0 .../app => app}/components/ui/LoadingDots.tsx | 0 .../app => app}/components/ui/PanelHeader.tsx | 0 .../components/ui/PanelHeaderButton.tsx | 0 .../bolt/app => app}/components/ui/Slider.tsx | 0 .../app => app}/components/ui/ThemeSwitch.tsx | 0 .../components/workbench/EditorPanel.tsx | 0 .../components/workbench/FileBreadcrumb.tsx | 0 .../components/workbench/FileTree.tsx | 0 .../components/workbench/PortDropdown.tsx | 0 .../components/workbench/Preview.tsx | 0 .../components/workbench/Workbench.client.tsx | 0 .../workbench/terminal/Terminal.tsx | 0 .../components/workbench/terminal/theme.ts | 0 {packages/bolt/app => app}/entry.client.tsx | 0 {packages/bolt/app => app}/entry.server.tsx | 0 .../bolt/app => app}/lib/.server/auth.ts | 0 .../app => app}/lib/.server/llm/api-key.ts | 0 .../app => app}/lib/.server/llm/constants.ts | 0 .../bolt/app => app}/lib/.server/llm/model.ts | 0 .../app => app}/lib/.server/llm/prompts.ts | 0 .../lib/.server/llm/stream-text.ts | 0 .../lib/.server/llm/switchable-stream.ts | 0 .../bolt/app => app}/lib/.server/sessions.ts | 0 app/lib/analytics.ts | 38 + {packages/bolt/app => app}/lib/auth.ts | 0 {packages/bolt/app => app}/lib/constants.ts | 0 {packages/bolt/app => app}/lib/crypto.ts | 0 {packages/bolt/app => app}/lib/fetch.ts | 0 {packages/bolt/app => app}/lib/hooks/index.ts | 0 .../app => app}/lib/hooks/useMessageParser.ts | 0 .../lib/hooks/usePromptEnhancer.ts | 0 .../app => app}/lib/hooks/useShortcuts.ts | 0 .../app => app}/lib/hooks/useSnapScroll.ts | 0 .../persistence/ChatDescription.client.tsx | 0 .../bolt/app => app}/lib/persistence/db.ts | 0 .../bolt/app => app}/lib/persistence/index.ts | 0 .../lib/persistence/useChatHistory.ts | 11 - .../__snapshots__/message-parser.spec.ts.snap | 0 .../app => app}/lib/runtime/action-runner.ts | 0 .../lib/runtime/message-parser.spec.ts | 0 .../app => app}/lib/runtime/message-parser.ts | 0 {packages/bolt/app => app}/lib/stores/chat.ts | 0 .../bolt/app => app}/lib/stores/editor.ts | 0 .../bolt/app => app}/lib/stores/files.ts | 0 .../bolt/app => app}/lib/stores/previews.ts | 0 .../bolt/app => app}/lib/stores/settings.ts | 0 .../bolt/app => app}/lib/stores/terminal.ts | 0 .../bolt/app => app}/lib/stores/theme.ts | 0 .../bolt/app => app}/lib/stores/workbench.ts | 0 .../lib/webcontainer/auth.client.ts | 0 .../app => app}/lib/webcontainer/index.ts | 0 {packages/bolt/app => app}/root.tsx | 18 +- {packages/bolt/app => app}/routes/_index.tsx | 0 {packages/bolt/app => app}/routes/api.chat.ts | 17 +- .../bolt/app => app}/routes/api.enhancer.ts | 0 .../bolt/app => app}/routes/chat.$id.tsx | 0 {packages/bolt/app => app}/routes/login.tsx | 0 {packages/bolt/app => app}/routes/logout.tsx | 0 .../bolt/app => app}/styles/animations.scss | 0 .../app => app}/styles/components/code.scss | 0 .../app => app}/styles/components/editor.scss | 0 .../styles/components/resize-handle.scss | 0 .../styles/components/terminal.scss | 0 .../app => app}/styles/components/toast.scss | 0 {packages/bolt/app => app}/styles/index.scss | 0 .../bolt/app => app}/styles/variables.scss | 0 .../bolt/app => app}/styles/z-index.scss | 0 {packages/bolt/app => app}/types/actions.ts | 0 {packages/bolt/app => app}/types/artifact.ts | 0 {packages/bolt/app => app}/types/terminal.ts | 0 {packages/bolt/app => app}/types/theme.ts | 0 {packages/bolt/app => app}/utils/buffer.ts | 0 .../bolt/app => app}/utils/classNames.ts | 0 {packages/bolt/app => app}/utils/constants.ts | 0 {packages/bolt/app => app}/utils/debounce.ts | 0 {packages/bolt/app => app}/utils/diff.ts | 0 {packages/bolt/app => app}/utils/easings.ts | 0 {packages/bolt/app => app}/utils/logger.ts | 0 {packages/bolt/app => app}/utils/markdown.ts | 0 {packages/bolt/app => app}/utils/mobile.ts | 0 {packages/bolt/app => app}/utils/promises.ts | 0 {packages/bolt/app => app}/utils/react.ts | 0 {packages/bolt/app => app}/utils/shell.ts | 0 .../bolt/app => app}/utils/stripIndent.ts | 0 {packages/bolt/app => app}/utils/terminal.ts | 0 .../bolt/app => app}/utils/unreachable.ts | 0 packages/bolt/bindings.sh => bindings.sh | 0 eslint.config.mjs | 2 +- .../bolt/functions => functions}/[[path]].ts | 0 {packages/bolt/icons => icons}/chat.svg | 0 {packages/bolt/icons => icons}/logo-text.svg | 0 {packages/bolt/icons => icons}/logo.svg | 0 {packages/bolt/icons => icons}/stars.svg | 0 .../bolt/load-context.ts => load-context.ts | 0 package.json | 97 ++- packages/bolt/.gitignore | 8 - packages/bolt/README.md | 85 -- .../header/OpenStackBlitz.client.tsx | 102 --- packages/bolt/app/lib/analytics.ts | 105 --- packages/bolt/app/routes/api.analytics.ts | 19 - packages/bolt/package.json | 94 --- pnpm-lock.yaml | 724 +----------------- pnpm-workspace.yaml | 2 - {packages/bolt/public => public}/favicon.svg | 0 {packages/bolt/public => public}/logo.svg | 0 packages/bolt/tsconfig.json => tsconfig.json | 0 .../bolt/types => types}/istextorbinary.d.ts | 0 packages/bolt/uno.config.ts => uno.config.ts | 0 .../bolt/vite.config.ts => vite.config.ts | 0 ...guration.d.ts => worker-configuration.d.ts | 0 packages/bolt/wrangler.toml => wrangler.toml | 0 137 files changed, 194 insertions(+), 1229 deletions(-) rename {packages/bolt/app => app}/components/chat/Artifact.tsx (100%) rename {packages/bolt/app => app}/components/chat/AssistantMessage.tsx (100%) rename {packages/bolt/app => app}/components/chat/BaseChat.module.scss (100%) rename {packages/bolt/app => app}/components/chat/BaseChat.tsx (100%) rename {packages/bolt/app => app}/components/chat/Chat.client.tsx (94%) rename {packages/bolt/app => app}/components/chat/CodeBlock.module.scss (100%) rename {packages/bolt/app => app}/components/chat/CodeBlock.tsx (100%) rename {packages/bolt/app => app}/components/chat/Markdown.module.scss (100%) rename {packages/bolt/app => app}/components/chat/Markdown.tsx (100%) rename {packages/bolt/app => app}/components/chat/Messages.client.tsx (100%) rename {packages/bolt/app => app}/components/chat/SendButton.client.tsx (100%) rename {packages/bolt/app => app}/components/chat/UserMessage.tsx (100%) rename {packages/bolt/app => app}/components/editor/codemirror/BinaryContent.tsx (100%) rename {packages/bolt/app => app}/components/editor/codemirror/CodeMirrorEditor.tsx (100%) rename {packages/bolt/app => app}/components/editor/codemirror/cm-theme.ts (100%) rename {packages/bolt/app => app}/components/editor/codemirror/indent.ts (100%) rename {packages/bolt/app => app}/components/editor/codemirror/languages.ts (100%) rename {packages/bolt/app => app}/components/header/Header.tsx (100%) rename {packages/bolt/app => app}/components/header/HeaderActionButtons.client.tsx (94%) rename {packages/bolt/app => app}/components/sidebar/HistoryItem.tsx (100%) rename {packages/bolt/app => app}/components/sidebar/Menu.client.tsx (100%) rename {packages/bolt/app => app}/components/sidebar/date-binning.ts (100%) rename {packages/bolt/app => app}/components/ui/Dialog.tsx (100%) rename {packages/bolt/app => app}/components/ui/IconButton.tsx (100%) rename {packages/bolt/app => app}/components/ui/LoadingDots.tsx (100%) rename {packages/bolt/app => app}/components/ui/PanelHeader.tsx (100%) rename {packages/bolt/app => app}/components/ui/PanelHeaderButton.tsx (100%) rename {packages/bolt/app => app}/components/ui/Slider.tsx (100%) rename {packages/bolt/app => app}/components/ui/ThemeSwitch.tsx (100%) rename {packages/bolt/app => app}/components/workbench/EditorPanel.tsx (100%) rename {packages/bolt/app => app}/components/workbench/FileBreadcrumb.tsx (100%) rename {packages/bolt/app => app}/components/workbench/FileTree.tsx (100%) rename {packages/bolt/app => app}/components/workbench/PortDropdown.tsx (100%) rename {packages/bolt/app => app}/components/workbench/Preview.tsx (100%) rename {packages/bolt/app => app}/components/workbench/Workbench.client.tsx (100%) rename {packages/bolt/app => app}/components/workbench/terminal/Terminal.tsx (100%) rename {packages/bolt/app => app}/components/workbench/terminal/theme.ts (100%) rename {packages/bolt/app => app}/entry.client.tsx (100%) rename {packages/bolt/app => app}/entry.server.tsx (100%) rename {packages/bolt/app => app}/lib/.server/auth.ts (100%) rename {packages/bolt/app => app}/lib/.server/llm/api-key.ts (100%) rename {packages/bolt/app => app}/lib/.server/llm/constants.ts (100%) rename {packages/bolt/app => app}/lib/.server/llm/model.ts (100%) rename {packages/bolt/app => app}/lib/.server/llm/prompts.ts (100%) rename {packages/bolt/app => app}/lib/.server/llm/stream-text.ts (100%) rename {packages/bolt/app => app}/lib/.server/llm/switchable-stream.ts (100%) rename {packages/bolt/app => app}/lib/.server/sessions.ts (100%) create mode 100644 app/lib/analytics.ts rename {packages/bolt/app => app}/lib/auth.ts (100%) rename {packages/bolt/app => app}/lib/constants.ts (100%) rename {packages/bolt/app => app}/lib/crypto.ts (100%) rename {packages/bolt/app => app}/lib/fetch.ts (100%) rename {packages/bolt/app => app}/lib/hooks/index.ts (100%) rename {packages/bolt/app => app}/lib/hooks/useMessageParser.ts (100%) rename {packages/bolt/app => app}/lib/hooks/usePromptEnhancer.ts (100%) rename {packages/bolt/app => app}/lib/hooks/useShortcuts.ts (100%) rename {packages/bolt/app => app}/lib/hooks/useSnapScroll.ts (100%) rename {packages/bolt/app => app}/lib/persistence/ChatDescription.client.tsx (100%) rename {packages/bolt/app => app}/lib/persistence/db.ts (100%) rename {packages/bolt/app => app}/lib/persistence/index.ts (100%) rename {packages/bolt/app => app}/lib/persistence/useChatHistory.ts (90%) rename {packages/bolt/app => app}/lib/runtime/__snapshots__/message-parser.spec.ts.snap (100%) rename {packages/bolt/app => app}/lib/runtime/action-runner.ts (100%) rename {packages/bolt/app => app}/lib/runtime/message-parser.spec.ts (100%) rename {packages/bolt/app => app}/lib/runtime/message-parser.ts (100%) rename {packages/bolt/app => app}/lib/stores/chat.ts (100%) rename {packages/bolt/app => app}/lib/stores/editor.ts (100%) rename {packages/bolt/app => app}/lib/stores/files.ts (100%) rename {packages/bolt/app => app}/lib/stores/previews.ts (100%) rename {packages/bolt/app => app}/lib/stores/settings.ts (100%) rename {packages/bolt/app => app}/lib/stores/terminal.ts (100%) rename {packages/bolt/app => app}/lib/stores/theme.ts (100%) rename {packages/bolt/app => app}/lib/stores/workbench.ts (100%) rename {packages/bolt/app => app}/lib/webcontainer/auth.client.ts (100%) rename {packages/bolt/app => app}/lib/webcontainer/index.ts (100%) rename {packages/bolt/app => app}/root.tsx (80%) rename {packages/bolt/app => app}/routes/_index.tsx (100%) rename {packages/bolt/app => app}/routes/api.chat.ts (78%) rename {packages/bolt/app => app}/routes/api.enhancer.ts (100%) rename {packages/bolt/app => app}/routes/chat.$id.tsx (100%) rename {packages/bolt/app => app}/routes/login.tsx (100%) rename {packages/bolt/app => app}/routes/logout.tsx (100%) rename {packages/bolt/app => app}/styles/animations.scss (100%) rename {packages/bolt/app => app}/styles/components/code.scss (100%) rename {packages/bolt/app => app}/styles/components/editor.scss (100%) rename {packages/bolt/app => app}/styles/components/resize-handle.scss (100%) rename {packages/bolt/app => app}/styles/components/terminal.scss (100%) rename {packages/bolt/app => app}/styles/components/toast.scss (100%) rename {packages/bolt/app => app}/styles/index.scss (100%) rename {packages/bolt/app => app}/styles/variables.scss (100%) rename {packages/bolt/app => app}/styles/z-index.scss (100%) rename {packages/bolt/app => app}/types/actions.ts (100%) rename {packages/bolt/app => app}/types/artifact.ts (100%) rename {packages/bolt/app => app}/types/terminal.ts (100%) rename {packages/bolt/app => app}/types/theme.ts (100%) rename {packages/bolt/app => app}/utils/buffer.ts (100%) rename {packages/bolt/app => app}/utils/classNames.ts (100%) rename {packages/bolt/app => app}/utils/constants.ts (100%) rename {packages/bolt/app => app}/utils/debounce.ts (100%) rename {packages/bolt/app => app}/utils/diff.ts (100%) rename {packages/bolt/app => app}/utils/easings.ts (100%) rename {packages/bolt/app => app}/utils/logger.ts (100%) rename {packages/bolt/app => app}/utils/markdown.ts (100%) rename {packages/bolt/app => app}/utils/mobile.ts (100%) rename {packages/bolt/app => app}/utils/promises.ts (100%) rename {packages/bolt/app => app}/utils/react.ts (100%) rename {packages/bolt/app => app}/utils/shell.ts (100%) rename {packages/bolt/app => app}/utils/stripIndent.ts (100%) rename {packages/bolt/app => app}/utils/terminal.ts (100%) rename {packages/bolt/app => app}/utils/unreachable.ts (100%) rename packages/bolt/bindings.sh => bindings.sh (100%) rename {packages/bolt/functions => functions}/[[path]].ts (100%) rename {packages/bolt/icons => icons}/chat.svg (100%) rename {packages/bolt/icons => icons}/logo-text.svg (100%) rename {packages/bolt/icons => icons}/logo.svg (100%) rename {packages/bolt/icons => icons}/stars.svg (100%) rename packages/bolt/load-context.ts => load-context.ts (100%) delete mode 100644 packages/bolt/.gitignore delete mode 100644 packages/bolt/README.md delete mode 100644 packages/bolt/app/components/header/OpenStackBlitz.client.tsx delete mode 100644 packages/bolt/app/lib/analytics.ts delete mode 100644 packages/bolt/app/routes/api.analytics.ts delete mode 100644 packages/bolt/package.json delete mode 100644 pnpm-workspace.yaml rename {packages/bolt/public => public}/favicon.svg (100%) rename {packages/bolt/public => public}/logo.svg (100%) rename packages/bolt/tsconfig.json => tsconfig.json (100%) rename {packages/bolt/types => types}/istextorbinary.d.ts (100%) rename packages/bolt/uno.config.ts => uno.config.ts (100%) rename packages/bolt/vite.config.ts => vite.config.ts (100%) rename packages/bolt/worker-configuration.d.ts => worker-configuration.d.ts (100%) rename packages/bolt/wrangler.toml => wrangler.toml (100%) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b8b8649..006d54a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -45,7 +45,6 @@ jobs: with: wranglerVersion: '* -w' packageManager: pnpm - workingDirectory: 'packages/bolt' apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy diff --git a/README.md b/README.md index d93d679..424b535 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,84 @@ -# Bolt Monorepo +# Bolt -Welcome to the Bolt monorepo! This repository contains the codebase for Bolt, an AI assistant developed by StackBlitz. +Bolt is an AI assistant developed by StackBlitz. This package contains the UI interface for Bolt as well as the server components, built using [Remix Run](https://remix.run/). -## Repository Structure +## Prerequisites -Currently, this monorepo contains a single package: - -- [`bolt`](packages/bolt): The main package containing the UI interface for Bolt as well as the server components. - -As the project grows, additional packages may be added to this workspace. - -## Getting Started - -### Prerequisites +Before you begin, ensure you have the following installed: - Node.js (v20.15.1) - pnpm (v9.4.0) -### Installation +## Setup -1. Clone the repository: +1. Clone the repository (if you haven't already): ```bash git clone https://github.com/stackblitz/bolt.git -cd bolt ``` 2. Install dependencies: ```bash -pnpm i +pnpm install ``` -3. Optionally, init git hooks: +3. Create a `.env.local` file in the root directory and add your Anthropic API key: -```bash -pnpmx husky +``` +ANTHROPIC_API_KEY=XXX ``` -### Development +Optionally, you an set the debug level or disable authentication: -To start developing the Bolt UI: - -1. Navigate to the bolt package: - -```bash -cd packages/bolt +``` +VITE_LOG_LEVEL=debug +VITE_DISABLE_AUTH=1 ``` -2. Start the development server: +If you want to run authentication against a local StackBlitz instance, add: + +``` +VITE_CLIENT_ORIGIN=https://local.stackblitz.com:3000 +``` + +**Important**: Never commit your `.env.local` file to version control. It's already included in .gitignore. + +## Available Scripts + +- `pnpm run dev`: Starts the development server. +- `pnpm run build`: Builds the project. +- `pnpm run start`: Runs the built application locally using Wrangler Pages. This script uses `bindings.sh` to set up necessary bindings so you don't have to duplicate environment variables. +- `pnpm run preview`: Builds the project and then starts it locally, useful for testing the production build. Note, HTTP streaming currently doesn't work as expected with `wrangler pages dev`. +- `pnpm test:` Runs the test suite using Vitest. +- `pnpm run typecheck`: Runs TypeScript type checking. +- `pnpm run typegen`: Generates TypeScript types using Wrangler. +- `pnpm run deploy`: Builds the project and deploys it to Cloudflare Pages. + +## Development + +To start the development server: ```bash pnpm run dev ``` + +This will start the Remix Vite development server. + +## Testing + +Run the test suite with: + +```bash +pnpm test +``` + +## Deployment + +To deploy the application to Cloudflare Pages: + +```bash +pnpm run deploy +``` + +Make sure you have the necessary permissions and Wrangler is correctly configured for your Cloudflare account. diff --git a/packages/bolt/app/components/chat/Artifact.tsx b/app/components/chat/Artifact.tsx similarity index 100% rename from packages/bolt/app/components/chat/Artifact.tsx rename to app/components/chat/Artifact.tsx diff --git a/packages/bolt/app/components/chat/AssistantMessage.tsx b/app/components/chat/AssistantMessage.tsx similarity index 100% rename from packages/bolt/app/components/chat/AssistantMessage.tsx rename to app/components/chat/AssistantMessage.tsx diff --git a/packages/bolt/app/components/chat/BaseChat.module.scss b/app/components/chat/BaseChat.module.scss similarity index 100% rename from packages/bolt/app/components/chat/BaseChat.module.scss rename to app/components/chat/BaseChat.module.scss diff --git a/packages/bolt/app/components/chat/BaseChat.tsx b/app/components/chat/BaseChat.tsx similarity index 100% rename from packages/bolt/app/components/chat/BaseChat.tsx rename to app/components/chat/BaseChat.tsx diff --git a/packages/bolt/app/components/chat/Chat.client.tsx b/app/components/chat/Chat.client.tsx similarity index 94% rename from packages/bolt/app/components/chat/Chat.client.tsx rename to app/components/chat/Chat.client.tsx index e421a08..dff7598 100644 --- a/packages/bolt/app/components/chat/Chat.client.tsx +++ b/app/components/chat/Chat.client.tsx @@ -4,7 +4,6 @@ import { useChat } from 'ai/react'; import { useAnimate } from 'framer-motion'; import { memo, useEffect, useRef, useState } from 'react'; import { cssTransition, toast, ToastContainer } from 'react-toastify'; -import { AnalyticsAction, AnalyticsTrackEvent, sendAnalyticsEvent } from '~/lib/analytics'; import { useMessageParser, usePromptEnhancer, useShortcuts, useSnapScroll } from '~/lib/hooks'; import { useChatHistory } from '~/lib/persistence'; import { chatStore } from '~/lib/stores/chat'; @@ -195,18 +194,6 @@ export const ChatImpl = memo(({ initialMessages, storeMessageHistory }: ChatProp resetEnhancer(); textareaRef.current?.blur(); - - const event = messages.length === 0 ? AnalyticsTrackEvent.ChatCreated : AnalyticsTrackEvent.MessageSent; - - sendAnalyticsEvent({ - action: AnalyticsAction.Track, - payload: { - event, - properties: { - message: _input, - }, - }, - }); }; const [messageRef, scrollRef] = useSnapScroll(); diff --git a/packages/bolt/app/components/chat/CodeBlock.module.scss b/app/components/chat/CodeBlock.module.scss similarity index 100% rename from packages/bolt/app/components/chat/CodeBlock.module.scss rename to app/components/chat/CodeBlock.module.scss diff --git a/packages/bolt/app/components/chat/CodeBlock.tsx b/app/components/chat/CodeBlock.tsx similarity index 100% rename from packages/bolt/app/components/chat/CodeBlock.tsx rename to app/components/chat/CodeBlock.tsx diff --git a/packages/bolt/app/components/chat/Markdown.module.scss b/app/components/chat/Markdown.module.scss similarity index 100% rename from packages/bolt/app/components/chat/Markdown.module.scss rename to app/components/chat/Markdown.module.scss diff --git a/packages/bolt/app/components/chat/Markdown.tsx b/app/components/chat/Markdown.tsx similarity index 100% rename from packages/bolt/app/components/chat/Markdown.tsx rename to app/components/chat/Markdown.tsx diff --git a/packages/bolt/app/components/chat/Messages.client.tsx b/app/components/chat/Messages.client.tsx similarity index 100% rename from packages/bolt/app/components/chat/Messages.client.tsx rename to app/components/chat/Messages.client.tsx diff --git a/packages/bolt/app/components/chat/SendButton.client.tsx b/app/components/chat/SendButton.client.tsx similarity index 100% rename from packages/bolt/app/components/chat/SendButton.client.tsx rename to app/components/chat/SendButton.client.tsx diff --git a/packages/bolt/app/components/chat/UserMessage.tsx b/app/components/chat/UserMessage.tsx similarity index 100% rename from packages/bolt/app/components/chat/UserMessage.tsx rename to app/components/chat/UserMessage.tsx diff --git a/packages/bolt/app/components/editor/codemirror/BinaryContent.tsx b/app/components/editor/codemirror/BinaryContent.tsx similarity index 100% rename from packages/bolt/app/components/editor/codemirror/BinaryContent.tsx rename to app/components/editor/codemirror/BinaryContent.tsx diff --git a/packages/bolt/app/components/editor/codemirror/CodeMirrorEditor.tsx b/app/components/editor/codemirror/CodeMirrorEditor.tsx similarity index 100% rename from packages/bolt/app/components/editor/codemirror/CodeMirrorEditor.tsx rename to app/components/editor/codemirror/CodeMirrorEditor.tsx diff --git a/packages/bolt/app/components/editor/codemirror/cm-theme.ts b/app/components/editor/codemirror/cm-theme.ts similarity index 100% rename from packages/bolt/app/components/editor/codemirror/cm-theme.ts rename to app/components/editor/codemirror/cm-theme.ts diff --git a/packages/bolt/app/components/editor/codemirror/indent.ts b/app/components/editor/codemirror/indent.ts similarity index 100% rename from packages/bolt/app/components/editor/codemirror/indent.ts rename to app/components/editor/codemirror/indent.ts diff --git a/packages/bolt/app/components/editor/codemirror/languages.ts b/app/components/editor/codemirror/languages.ts similarity index 100% rename from packages/bolt/app/components/editor/codemirror/languages.ts rename to app/components/editor/codemirror/languages.ts diff --git a/packages/bolt/app/components/header/Header.tsx b/app/components/header/Header.tsx similarity index 100% rename from packages/bolt/app/components/header/Header.tsx rename to app/components/header/Header.tsx diff --git a/packages/bolt/app/components/header/HeaderActionButtons.client.tsx b/app/components/header/HeaderActionButtons.client.tsx similarity index 94% rename from packages/bolt/app/components/header/HeaderActionButtons.client.tsx rename to app/components/header/HeaderActionButtons.client.tsx index 80ed06e..6f8e843 100644 --- a/packages/bolt/app/components/header/HeaderActionButtons.client.tsx +++ b/app/components/header/HeaderActionButtons.client.tsx @@ -2,7 +2,6 @@ import { useStore } from '@nanostores/react'; import { chatStore } from '~/lib/stores/chat'; import { workbenchStore } from '~/lib/stores/workbench'; import { classNames } from '~/utils/classNames'; -import { OpenStackBlitz } from './OpenStackBlitz.client'; interface HeaderActionButtonsProps {} @@ -40,9 +39,6 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) {
-
- -
); } diff --git a/packages/bolt/app/components/sidebar/HistoryItem.tsx b/app/components/sidebar/HistoryItem.tsx similarity index 100% rename from packages/bolt/app/components/sidebar/HistoryItem.tsx rename to app/components/sidebar/HistoryItem.tsx diff --git a/packages/bolt/app/components/sidebar/Menu.client.tsx b/app/components/sidebar/Menu.client.tsx similarity index 100% rename from packages/bolt/app/components/sidebar/Menu.client.tsx rename to app/components/sidebar/Menu.client.tsx diff --git a/packages/bolt/app/components/sidebar/date-binning.ts b/app/components/sidebar/date-binning.ts similarity index 100% rename from packages/bolt/app/components/sidebar/date-binning.ts rename to app/components/sidebar/date-binning.ts diff --git a/packages/bolt/app/components/ui/Dialog.tsx b/app/components/ui/Dialog.tsx similarity index 100% rename from packages/bolt/app/components/ui/Dialog.tsx rename to app/components/ui/Dialog.tsx diff --git a/packages/bolt/app/components/ui/IconButton.tsx b/app/components/ui/IconButton.tsx similarity index 100% rename from packages/bolt/app/components/ui/IconButton.tsx rename to app/components/ui/IconButton.tsx diff --git a/packages/bolt/app/components/ui/LoadingDots.tsx b/app/components/ui/LoadingDots.tsx similarity index 100% rename from packages/bolt/app/components/ui/LoadingDots.tsx rename to app/components/ui/LoadingDots.tsx diff --git a/packages/bolt/app/components/ui/PanelHeader.tsx b/app/components/ui/PanelHeader.tsx similarity index 100% rename from packages/bolt/app/components/ui/PanelHeader.tsx rename to app/components/ui/PanelHeader.tsx diff --git a/packages/bolt/app/components/ui/PanelHeaderButton.tsx b/app/components/ui/PanelHeaderButton.tsx similarity index 100% rename from packages/bolt/app/components/ui/PanelHeaderButton.tsx rename to app/components/ui/PanelHeaderButton.tsx diff --git a/packages/bolt/app/components/ui/Slider.tsx b/app/components/ui/Slider.tsx similarity index 100% rename from packages/bolt/app/components/ui/Slider.tsx rename to app/components/ui/Slider.tsx diff --git a/packages/bolt/app/components/ui/ThemeSwitch.tsx b/app/components/ui/ThemeSwitch.tsx similarity index 100% rename from packages/bolt/app/components/ui/ThemeSwitch.tsx rename to app/components/ui/ThemeSwitch.tsx diff --git a/packages/bolt/app/components/workbench/EditorPanel.tsx b/app/components/workbench/EditorPanel.tsx similarity index 100% rename from packages/bolt/app/components/workbench/EditorPanel.tsx rename to app/components/workbench/EditorPanel.tsx diff --git a/packages/bolt/app/components/workbench/FileBreadcrumb.tsx b/app/components/workbench/FileBreadcrumb.tsx similarity index 100% rename from packages/bolt/app/components/workbench/FileBreadcrumb.tsx rename to app/components/workbench/FileBreadcrumb.tsx diff --git a/packages/bolt/app/components/workbench/FileTree.tsx b/app/components/workbench/FileTree.tsx similarity index 100% rename from packages/bolt/app/components/workbench/FileTree.tsx rename to app/components/workbench/FileTree.tsx diff --git a/packages/bolt/app/components/workbench/PortDropdown.tsx b/app/components/workbench/PortDropdown.tsx similarity index 100% rename from packages/bolt/app/components/workbench/PortDropdown.tsx rename to app/components/workbench/PortDropdown.tsx diff --git a/packages/bolt/app/components/workbench/Preview.tsx b/app/components/workbench/Preview.tsx similarity index 100% rename from packages/bolt/app/components/workbench/Preview.tsx rename to app/components/workbench/Preview.tsx diff --git a/packages/bolt/app/components/workbench/Workbench.client.tsx b/app/components/workbench/Workbench.client.tsx similarity index 100% rename from packages/bolt/app/components/workbench/Workbench.client.tsx rename to app/components/workbench/Workbench.client.tsx diff --git a/packages/bolt/app/components/workbench/terminal/Terminal.tsx b/app/components/workbench/terminal/Terminal.tsx similarity index 100% rename from packages/bolt/app/components/workbench/terminal/Terminal.tsx rename to app/components/workbench/terminal/Terminal.tsx diff --git a/packages/bolt/app/components/workbench/terminal/theme.ts b/app/components/workbench/terminal/theme.ts similarity index 100% rename from packages/bolt/app/components/workbench/terminal/theme.ts rename to app/components/workbench/terminal/theme.ts diff --git a/packages/bolt/app/entry.client.tsx b/app/entry.client.tsx similarity index 100% rename from packages/bolt/app/entry.client.tsx rename to app/entry.client.tsx diff --git a/packages/bolt/app/entry.server.tsx b/app/entry.server.tsx similarity index 100% rename from packages/bolt/app/entry.server.tsx rename to app/entry.server.tsx diff --git a/packages/bolt/app/lib/.server/auth.ts b/app/lib/.server/auth.ts similarity index 100% rename from packages/bolt/app/lib/.server/auth.ts rename to app/lib/.server/auth.ts diff --git a/packages/bolt/app/lib/.server/llm/api-key.ts b/app/lib/.server/llm/api-key.ts similarity index 100% rename from packages/bolt/app/lib/.server/llm/api-key.ts rename to app/lib/.server/llm/api-key.ts diff --git a/packages/bolt/app/lib/.server/llm/constants.ts b/app/lib/.server/llm/constants.ts similarity index 100% rename from packages/bolt/app/lib/.server/llm/constants.ts rename to app/lib/.server/llm/constants.ts diff --git a/packages/bolt/app/lib/.server/llm/model.ts b/app/lib/.server/llm/model.ts similarity index 100% rename from packages/bolt/app/lib/.server/llm/model.ts rename to app/lib/.server/llm/model.ts diff --git a/packages/bolt/app/lib/.server/llm/prompts.ts b/app/lib/.server/llm/prompts.ts similarity index 100% rename from packages/bolt/app/lib/.server/llm/prompts.ts rename to app/lib/.server/llm/prompts.ts diff --git a/packages/bolt/app/lib/.server/llm/stream-text.ts b/app/lib/.server/llm/stream-text.ts similarity index 100% rename from packages/bolt/app/lib/.server/llm/stream-text.ts rename to app/lib/.server/llm/stream-text.ts diff --git a/packages/bolt/app/lib/.server/llm/switchable-stream.ts b/app/lib/.server/llm/switchable-stream.ts similarity index 100% rename from packages/bolt/app/lib/.server/llm/switchable-stream.ts rename to app/lib/.server/llm/switchable-stream.ts diff --git a/packages/bolt/app/lib/.server/sessions.ts b/app/lib/.server/sessions.ts similarity index 100% rename from packages/bolt/app/lib/.server/sessions.ts rename to app/lib/.server/sessions.ts diff --git a/app/lib/analytics.ts b/app/lib/analytics.ts new file mode 100644 index 0000000..7be24d3 --- /dev/null +++ b/app/lib/analytics.ts @@ -0,0 +1,38 @@ +import { CLIENT_ORIGIN } from '~/lib/constants'; +import { request as doRequest } from '~/lib/fetch'; + +export interface Identity { + userId?: string | null; + guestId?: string | null; + segmentWriteKey?: string | null; + avatar?: string; +} + +const MESSAGE_PREFIX = 'Bolt'; + +export enum AnalyticsTrackEvent { + MessageSent = `${MESSAGE_PREFIX} Message Sent`, + MessageComplete = `${MESSAGE_PREFIX} Message Complete`, + ChatCreated = `${MESSAGE_PREFIX} Chat Created`, +} + +export async function identifyUser(access: string): Promise { + const response = await doRequest(`${CLIENT_ORIGIN}/api/identify`, { + method: 'GET', + headers: { authorization: `Bearer ${access}` }, + }); + + const body = await response.json(); + + if (!response.ok) { + return undefined; + } + + // convert numerical identity values to strings + const stringified = Object.entries(body).map(([key, value]) => [ + key, + typeof value === 'number' ? value.toString() : value, + ]); + + return Object.fromEntries(stringified) as Identity; +} diff --git a/packages/bolt/app/lib/auth.ts b/app/lib/auth.ts similarity index 100% rename from packages/bolt/app/lib/auth.ts rename to app/lib/auth.ts diff --git a/packages/bolt/app/lib/constants.ts b/app/lib/constants.ts similarity index 100% rename from packages/bolt/app/lib/constants.ts rename to app/lib/constants.ts diff --git a/packages/bolt/app/lib/crypto.ts b/app/lib/crypto.ts similarity index 100% rename from packages/bolt/app/lib/crypto.ts rename to app/lib/crypto.ts diff --git a/packages/bolt/app/lib/fetch.ts b/app/lib/fetch.ts similarity index 100% rename from packages/bolt/app/lib/fetch.ts rename to app/lib/fetch.ts diff --git a/packages/bolt/app/lib/hooks/index.ts b/app/lib/hooks/index.ts similarity index 100% rename from packages/bolt/app/lib/hooks/index.ts rename to app/lib/hooks/index.ts diff --git a/packages/bolt/app/lib/hooks/useMessageParser.ts b/app/lib/hooks/useMessageParser.ts similarity index 100% rename from packages/bolt/app/lib/hooks/useMessageParser.ts rename to app/lib/hooks/useMessageParser.ts diff --git a/packages/bolt/app/lib/hooks/usePromptEnhancer.ts b/app/lib/hooks/usePromptEnhancer.ts similarity index 100% rename from packages/bolt/app/lib/hooks/usePromptEnhancer.ts rename to app/lib/hooks/usePromptEnhancer.ts diff --git a/packages/bolt/app/lib/hooks/useShortcuts.ts b/app/lib/hooks/useShortcuts.ts similarity index 100% rename from packages/bolt/app/lib/hooks/useShortcuts.ts rename to app/lib/hooks/useShortcuts.ts diff --git a/packages/bolt/app/lib/hooks/useSnapScroll.ts b/app/lib/hooks/useSnapScroll.ts similarity index 100% rename from packages/bolt/app/lib/hooks/useSnapScroll.ts rename to app/lib/hooks/useSnapScroll.ts diff --git a/packages/bolt/app/lib/persistence/ChatDescription.client.tsx b/app/lib/persistence/ChatDescription.client.tsx similarity index 100% rename from packages/bolt/app/lib/persistence/ChatDescription.client.tsx rename to app/lib/persistence/ChatDescription.client.tsx diff --git a/packages/bolt/app/lib/persistence/db.ts b/app/lib/persistence/db.ts similarity index 100% rename from packages/bolt/app/lib/persistence/db.ts rename to app/lib/persistence/db.ts diff --git a/packages/bolt/app/lib/persistence/index.ts b/app/lib/persistence/index.ts similarity index 100% rename from packages/bolt/app/lib/persistence/index.ts rename to app/lib/persistence/index.ts diff --git a/packages/bolt/app/lib/persistence/useChatHistory.ts b/app/lib/persistence/useChatHistory.ts similarity index 90% rename from packages/bolt/app/lib/persistence/useChatHistory.ts rename to app/lib/persistence/useChatHistory.ts index 9d6d324..e562753 100644 --- a/packages/bolt/app/lib/persistence/useChatHistory.ts +++ b/app/lib/persistence/useChatHistory.ts @@ -3,7 +3,6 @@ import { useState, useEffect } from 'react'; import { atom } from 'nanostores'; import type { Message } from 'ai'; import { toast } from 'react-toastify'; -import { AnalyticsAction, sendAnalyticsEvent } from '~/lib/analytics'; import { workbenchStore } from '~/lib/stores/workbench'; import { getMessages, getNextId, getUrlId, openDatabase, setMessages } from './db'; @@ -107,14 +106,4 @@ function navigateChat(nextId: string) { url.pathname = `/chat/${nextId}`; window.history.replaceState({}, '', url); - - // since the `replaceState` call doesn't trigger a page reload, we need to manually log this event - sendAnalyticsEvent({ - action: AnalyticsAction.Page, - payload: { - properties: { - url: url.href, - }, - }, - }); } diff --git a/packages/bolt/app/lib/runtime/__snapshots__/message-parser.spec.ts.snap b/app/lib/runtime/__snapshots__/message-parser.spec.ts.snap similarity index 100% rename from packages/bolt/app/lib/runtime/__snapshots__/message-parser.spec.ts.snap rename to app/lib/runtime/__snapshots__/message-parser.spec.ts.snap diff --git a/packages/bolt/app/lib/runtime/action-runner.ts b/app/lib/runtime/action-runner.ts similarity index 100% rename from packages/bolt/app/lib/runtime/action-runner.ts rename to app/lib/runtime/action-runner.ts diff --git a/packages/bolt/app/lib/runtime/message-parser.spec.ts b/app/lib/runtime/message-parser.spec.ts similarity index 100% rename from packages/bolt/app/lib/runtime/message-parser.spec.ts rename to app/lib/runtime/message-parser.spec.ts diff --git a/packages/bolt/app/lib/runtime/message-parser.ts b/app/lib/runtime/message-parser.ts similarity index 100% rename from packages/bolt/app/lib/runtime/message-parser.ts rename to app/lib/runtime/message-parser.ts diff --git a/packages/bolt/app/lib/stores/chat.ts b/app/lib/stores/chat.ts similarity index 100% rename from packages/bolt/app/lib/stores/chat.ts rename to app/lib/stores/chat.ts diff --git a/packages/bolt/app/lib/stores/editor.ts b/app/lib/stores/editor.ts similarity index 100% rename from packages/bolt/app/lib/stores/editor.ts rename to app/lib/stores/editor.ts diff --git a/packages/bolt/app/lib/stores/files.ts b/app/lib/stores/files.ts similarity index 100% rename from packages/bolt/app/lib/stores/files.ts rename to app/lib/stores/files.ts diff --git a/packages/bolt/app/lib/stores/previews.ts b/app/lib/stores/previews.ts similarity index 100% rename from packages/bolt/app/lib/stores/previews.ts rename to app/lib/stores/previews.ts diff --git a/packages/bolt/app/lib/stores/settings.ts b/app/lib/stores/settings.ts similarity index 100% rename from packages/bolt/app/lib/stores/settings.ts rename to app/lib/stores/settings.ts diff --git a/packages/bolt/app/lib/stores/terminal.ts b/app/lib/stores/terminal.ts similarity index 100% rename from packages/bolt/app/lib/stores/terminal.ts rename to app/lib/stores/terminal.ts diff --git a/packages/bolt/app/lib/stores/theme.ts b/app/lib/stores/theme.ts similarity index 100% rename from packages/bolt/app/lib/stores/theme.ts rename to app/lib/stores/theme.ts diff --git a/packages/bolt/app/lib/stores/workbench.ts b/app/lib/stores/workbench.ts similarity index 100% rename from packages/bolt/app/lib/stores/workbench.ts rename to app/lib/stores/workbench.ts diff --git a/packages/bolt/app/lib/webcontainer/auth.client.ts b/app/lib/webcontainer/auth.client.ts similarity index 100% rename from packages/bolt/app/lib/webcontainer/auth.client.ts rename to app/lib/webcontainer/auth.client.ts diff --git a/packages/bolt/app/lib/webcontainer/index.ts b/app/lib/webcontainer/index.ts similarity index 100% rename from packages/bolt/app/lib/webcontainer/index.ts rename to app/lib/webcontainer/index.ts diff --git a/packages/bolt/app/root.tsx b/app/root.tsx similarity index 80% rename from packages/bolt/app/root.tsx rename to app/root.tsx index e0f0fef..c122bf6 100644 --- a/packages/bolt/app/root.tsx +++ b/app/root.tsx @@ -1,9 +1,7 @@ import { useStore } from '@nanostores/react'; import type { LinksFunction } from '@remix-run/cloudflare'; -import { Links, Meta, Outlet, Scripts, ScrollRestoration, useLocation } from '@remix-run/react'; +import { Links, Meta, Outlet, Scripts, ScrollRestoration } from '@remix-run/react'; import tailwindReset from '@unocss/reset/tailwind-compat.css?url'; -import { useEffect } from 'react'; -import { sendAnalyticsEvent, AnalyticsAction } from './lib/analytics'; import { themeStore } from './lib/stores/theme'; import { stripIndents } from './utils/stripIndent'; @@ -55,20 +53,6 @@ const inlineThemeCode = stripIndents` export function Layout({ children }: { children: React.ReactNode }) { const theme = useStore(themeStore); - const { pathname } = useLocation(); - - // log page events when the window location changes - useEffect(() => { - sendAnalyticsEvent({ - action: AnalyticsAction.Page, - payload: { - properties: { - url: window.location.href, - }, - }, - }); - }, [pathname]); - return ( diff --git a/packages/bolt/app/routes/_index.tsx b/app/routes/_index.tsx similarity index 100% rename from packages/bolt/app/routes/_index.tsx rename to app/routes/_index.tsx diff --git a/packages/bolt/app/routes/api.chat.ts b/app/routes/api.chat.ts similarity index 78% rename from packages/bolt/app/routes/api.chat.ts rename to app/routes/api.chat.ts index 747d1e5..3b614c2 100644 --- a/packages/bolt/app/routes/api.chat.ts +++ b/app/routes/api.chat.ts @@ -4,14 +4,12 @@ import { MAX_RESPONSE_SEGMENTS, MAX_TOKENS } from '~/lib/.server/llm/constants'; import { CONTINUE_PROMPT } from '~/lib/.server/llm/prompts'; import { streamText, type Messages, type StreamingOptions } from '~/lib/.server/llm/stream-text'; import SwitchableStream from '~/lib/.server/llm/switchable-stream'; -import type { Session } from '~/lib/.server/sessions'; -import { AnalyticsAction, AnalyticsTrackEvent, sendEventInternal } from '~/lib/analytics'; export async function action(args: ActionFunctionArgs) { return actionWithAuth(args, chatAction); } -async function chatAction({ context, request }: ActionFunctionArgs, session: Session) { +async function chatAction({ context, request }: ActionFunctionArgs) { const { messages } = await request.json<{ messages: Messages }>(); const stream = new SwitchableStream(); @@ -19,19 +17,8 @@ async function chatAction({ context, request }: ActionFunctionArgs, session: Ses try { const options: StreamingOptions = { toolChoice: 'none', - onFinish: async ({ text: content, finishReason, usage }) => { + onFinish: async ({ text: content, finishReason }) => { if (finishReason !== 'length') { - await sendEventInternal(session, { - action: AnalyticsAction.Track, - payload: { - event: AnalyticsTrackEvent.MessageComplete, - properties: { - usage, - finishReason, - }, - }, - }); - return stream.close(); } diff --git a/packages/bolt/app/routes/api.enhancer.ts b/app/routes/api.enhancer.ts similarity index 100% rename from packages/bolt/app/routes/api.enhancer.ts rename to app/routes/api.enhancer.ts diff --git a/packages/bolt/app/routes/chat.$id.tsx b/app/routes/chat.$id.tsx similarity index 100% rename from packages/bolt/app/routes/chat.$id.tsx rename to app/routes/chat.$id.tsx diff --git a/packages/bolt/app/routes/login.tsx b/app/routes/login.tsx similarity index 100% rename from packages/bolt/app/routes/login.tsx rename to app/routes/login.tsx diff --git a/packages/bolt/app/routes/logout.tsx b/app/routes/logout.tsx similarity index 100% rename from packages/bolt/app/routes/logout.tsx rename to app/routes/logout.tsx diff --git a/packages/bolt/app/styles/animations.scss b/app/styles/animations.scss similarity index 100% rename from packages/bolt/app/styles/animations.scss rename to app/styles/animations.scss diff --git a/packages/bolt/app/styles/components/code.scss b/app/styles/components/code.scss similarity index 100% rename from packages/bolt/app/styles/components/code.scss rename to app/styles/components/code.scss diff --git a/packages/bolt/app/styles/components/editor.scss b/app/styles/components/editor.scss similarity index 100% rename from packages/bolt/app/styles/components/editor.scss rename to app/styles/components/editor.scss diff --git a/packages/bolt/app/styles/components/resize-handle.scss b/app/styles/components/resize-handle.scss similarity index 100% rename from packages/bolt/app/styles/components/resize-handle.scss rename to app/styles/components/resize-handle.scss diff --git a/packages/bolt/app/styles/components/terminal.scss b/app/styles/components/terminal.scss similarity index 100% rename from packages/bolt/app/styles/components/terminal.scss rename to app/styles/components/terminal.scss diff --git a/packages/bolt/app/styles/components/toast.scss b/app/styles/components/toast.scss similarity index 100% rename from packages/bolt/app/styles/components/toast.scss rename to app/styles/components/toast.scss diff --git a/packages/bolt/app/styles/index.scss b/app/styles/index.scss similarity index 100% rename from packages/bolt/app/styles/index.scss rename to app/styles/index.scss diff --git a/packages/bolt/app/styles/variables.scss b/app/styles/variables.scss similarity index 100% rename from packages/bolt/app/styles/variables.scss rename to app/styles/variables.scss diff --git a/packages/bolt/app/styles/z-index.scss b/app/styles/z-index.scss similarity index 100% rename from packages/bolt/app/styles/z-index.scss rename to app/styles/z-index.scss diff --git a/packages/bolt/app/types/actions.ts b/app/types/actions.ts similarity index 100% rename from packages/bolt/app/types/actions.ts rename to app/types/actions.ts diff --git a/packages/bolt/app/types/artifact.ts b/app/types/artifact.ts similarity index 100% rename from packages/bolt/app/types/artifact.ts rename to app/types/artifact.ts diff --git a/packages/bolt/app/types/terminal.ts b/app/types/terminal.ts similarity index 100% rename from packages/bolt/app/types/terminal.ts rename to app/types/terminal.ts diff --git a/packages/bolt/app/types/theme.ts b/app/types/theme.ts similarity index 100% rename from packages/bolt/app/types/theme.ts rename to app/types/theme.ts diff --git a/packages/bolt/app/utils/buffer.ts b/app/utils/buffer.ts similarity index 100% rename from packages/bolt/app/utils/buffer.ts rename to app/utils/buffer.ts diff --git a/packages/bolt/app/utils/classNames.ts b/app/utils/classNames.ts similarity index 100% rename from packages/bolt/app/utils/classNames.ts rename to app/utils/classNames.ts diff --git a/packages/bolt/app/utils/constants.ts b/app/utils/constants.ts similarity index 100% rename from packages/bolt/app/utils/constants.ts rename to app/utils/constants.ts diff --git a/packages/bolt/app/utils/debounce.ts b/app/utils/debounce.ts similarity index 100% rename from packages/bolt/app/utils/debounce.ts rename to app/utils/debounce.ts diff --git a/packages/bolt/app/utils/diff.ts b/app/utils/diff.ts similarity index 100% rename from packages/bolt/app/utils/diff.ts rename to app/utils/diff.ts diff --git a/packages/bolt/app/utils/easings.ts b/app/utils/easings.ts similarity index 100% rename from packages/bolt/app/utils/easings.ts rename to app/utils/easings.ts diff --git a/packages/bolt/app/utils/logger.ts b/app/utils/logger.ts similarity index 100% rename from packages/bolt/app/utils/logger.ts rename to app/utils/logger.ts diff --git a/packages/bolt/app/utils/markdown.ts b/app/utils/markdown.ts similarity index 100% rename from packages/bolt/app/utils/markdown.ts rename to app/utils/markdown.ts diff --git a/packages/bolt/app/utils/mobile.ts b/app/utils/mobile.ts similarity index 100% rename from packages/bolt/app/utils/mobile.ts rename to app/utils/mobile.ts diff --git a/packages/bolt/app/utils/promises.ts b/app/utils/promises.ts similarity index 100% rename from packages/bolt/app/utils/promises.ts rename to app/utils/promises.ts diff --git a/packages/bolt/app/utils/react.ts b/app/utils/react.ts similarity index 100% rename from packages/bolt/app/utils/react.ts rename to app/utils/react.ts diff --git a/packages/bolt/app/utils/shell.ts b/app/utils/shell.ts similarity index 100% rename from packages/bolt/app/utils/shell.ts rename to app/utils/shell.ts diff --git a/packages/bolt/app/utils/stripIndent.ts b/app/utils/stripIndent.ts similarity index 100% rename from packages/bolt/app/utils/stripIndent.ts rename to app/utils/stripIndent.ts diff --git a/packages/bolt/app/utils/terminal.ts b/app/utils/terminal.ts similarity index 100% rename from packages/bolt/app/utils/terminal.ts rename to app/utils/terminal.ts diff --git a/packages/bolt/app/utils/unreachable.ts b/app/utils/unreachable.ts similarity index 100% rename from packages/bolt/app/utils/unreachable.ts rename to app/utils/unreachable.ts diff --git a/packages/bolt/bindings.sh b/bindings.sh similarity index 100% rename from packages/bolt/bindings.sh rename to bindings.sh diff --git a/eslint.config.mjs b/eslint.config.mjs index 8f51a0e..95df41e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -28,7 +28,7 @@ export default [ }, { files: [...tsFileExtensions, ...jsFileExtensions, '**/*.tsx'], - ignores: ['packages/bolt/functions/*'], + ignores: ['functions/*'], rules: { 'no-restricted-imports': [ 'error', diff --git a/packages/bolt/functions/[[path]].ts b/functions/[[path]].ts similarity index 100% rename from packages/bolt/functions/[[path]].ts rename to functions/[[path]].ts diff --git a/packages/bolt/icons/chat.svg b/icons/chat.svg similarity index 100% rename from packages/bolt/icons/chat.svg rename to icons/chat.svg diff --git a/packages/bolt/icons/logo-text.svg b/icons/logo-text.svg similarity index 100% rename from packages/bolt/icons/logo-text.svg rename to icons/logo-text.svg diff --git a/packages/bolt/icons/logo.svg b/icons/logo.svg similarity index 100% rename from packages/bolt/icons/logo.svg rename to icons/logo.svg diff --git a/packages/bolt/icons/stars.svg b/icons/stars.svg similarity index 100% rename from packages/bolt/icons/stars.svg rename to icons/stars.svg diff --git a/packages/bolt/load-context.ts b/load-context.ts similarity index 100% rename from packages/bolt/load-context.ts rename to load-context.ts diff --git a/package.json b/package.json index f57cf9e..ccc0775 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,98 @@ { + "name": "bolt", + "description": "StackBlitz AI Agent", "private": true, "license": "MIT", "packageManager": "pnpm@9.4.0", + "sideEffects": false, + "type": "module", "scripts": { - "playground:dev": "pnpm run --filter=playground dev", + "deploy": "npm run build && wrangler pages deploy", + "build": "remix vite:build", + "dev": "remix vite:dev", + "test": "vitest --run", + "test:watch": "vitest", "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint .", "lint:fix": "npm run lint -- --fix", - "build": "pnpm run -r build", - "test": "pnpm run -r test", - "typecheck": "pnpm run -r typecheck" - }, - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] + "start": "bindings=$(./bindings.sh) && wrangler pages dev ./build/client $bindings", + "typecheck": "tsc", + "typegen": "wrangler types", + "preview": "pnpm run build && pnpm run start" }, "engines": { - "node": "20.15.1", - "pnpm": "9.4.0" + "node": ">=18.18.0" + }, + "dependencies": { + "@ai-sdk/anthropic": "^0.0.39", + "@codemirror/autocomplete": "^6.17.0", + "@codemirror/commands": "^6.6.0", + "@codemirror/lang-cpp": "^6.0.2", + "@codemirror/lang-css": "^6.2.1", + "@codemirror/lang-html": "^6.4.9", + "@codemirror/lang-javascript": "^6.2.2", + "@codemirror/lang-json": "^6.0.1", + "@codemirror/lang-markdown": "^6.2.5", + "@codemirror/lang-python": "^6.1.6", + "@codemirror/lang-sass": "^6.0.2", + "@codemirror/lang-wast": "^6.0.2", + "@codemirror/language": "^6.10.2", + "@codemirror/search": "^6.5.6", + "@codemirror/state": "^6.4.1", + "@codemirror/view": "^6.28.4", + "@iconify-json/ph": "^1.1.13", + "@iconify-json/svg-spinners": "^1.1.2", + "@lezer/highlight": "^1.2.0", + "@nanostores/react": "^0.7.2", + "@radix-ui/react-dialog": "^1.1.1", + "@radix-ui/react-dropdown-menu": "^2.1.1", + "@remix-run/cloudflare": "^2.10.2", + "@remix-run/cloudflare-pages": "^2.10.2", + "@remix-run/react": "^2.10.2", + "@uiw/codemirror-theme-vscode": "^4.23.0", + "@unocss/reset": "^0.61.0", + "@webcontainer/api": "^1.3.0-internal.2", + "@xterm/addon-fit": "^0.10.0", + "@xterm/addon-web-links": "^0.11.0", + "@xterm/xterm": "^5.5.0", + "ai": "^3.3.4", + "date-fns": "^3.6.0", + "diff": "^5.2.0", + "framer-motion": "^11.2.12", + "isbot": "^4.1.0", + "istextorbinary": "^9.5.0", + "jose": "^5.6.3", + "nanostores": "^0.10.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-hotkeys-hook": "^4.5.0", + "react-markdown": "^9.0.1", + "react-resizable-panels": "^2.0.20", + "react-toastify": "^10.0.5", + "rehype-raw": "^7.0.0", + "rehype-sanitize": "^6.0.0", + "remark-gfm": "^4.0.0", + "remix-utils": "^7.6.0", + "shiki": "^1.9.1", + "unist-util-visit": "^5.0.0" }, "devDependencies": { + "@cloudflare/workers-types": "^4.20240620.0", + "@remix-run/dev": "^2.10.0", + "@types/diff": "^5.2.1", + "@types/react": "^18.2.20", + "@types/react-dom": "^18.2.7", + "fast-glob": "^3.3.2", + "node-fetch": "^3.3.2", + "typescript": "^5.5.2", + "unified": "^11.0.5", + "unocss": "^0.61.3", + "vite": "^5.3.1", + "vite-plugin-node-polyfills": "^0.22.0", + "vite-plugin-optimize-css-modules": "^1.1.0", + "vite-tsconfig-paths": "^4.3.2", + "wrangler": "^3.63.2", + "zod": "^3.23.8", "@blitz/eslint-plugin": "0.1.0", - "@commitlint/config-conventional": "^19.2.2", - "commitlint": "^19.3.0", - "husky": "^9.0.11", "is-ci": "^3.0.1", "prettier": "^3.3.2", "vitest": "^2.0.1" diff --git a/packages/bolt/.gitignore b/packages/bolt/.gitignore deleted file mode 100644 index 925370f..0000000 --- a/packages/bolt/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules - -/.cache -/build -.env* -*.vars -.wrangler -_worker.bundle diff --git a/packages/bolt/README.md b/packages/bolt/README.md deleted file mode 100644 index 60ba608..0000000 --- a/packages/bolt/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# Bolt - -Bolt is an AI assistant developed by StackBlitz. This package contains the UI interface for Bolt as well as the server components, built using [Remix Run](https://remix.run/). - -## Prerequisites - -Before you begin, ensure you have the following installed: - -- Node.js (v20.15.1) -- pnpm (v9.4.0) - -## Setup - -1. Clone the repository (if you haven't already): - -```bash -git clone https://github.com/stackblitz/bolt.git -cd bolt -``` - -2. Install dependencies: - -```bash -pnpm install -``` - -3. Create a `.env.local` file in the current `packages/bolt` directory and add your Anthropic API key: - -``` -ANTHROPIC_API_KEY=XXX -``` - -Optionally, you an set the debug level or disable authentication: - -``` -VITE_LOG_LEVEL=debug -VITE_DISABLE_AUTH=1 -``` - -If you want to run authentication against a local StackBlitz instance, add: - -``` -VITE_CLIENT_ORIGIN=https://local.stackblitz.com:3000 -``` - -**Important**: Never commit your `.env.local` file to version control. It's already included in .gitignore. - -## Available Scripts - -- `pnpm run dev`: Starts the development server. -- `pnpm run build`: Builds the project. -- `pnpm run start`: Runs the built application locally using Wrangler Pages. This script uses `bindings.sh` to set up necessary bindings so you don't have to duplicate environment variables. -- `pnpm run preview`: Builds the project and then starts it locally, useful for testing the production build. Note, HTTP streaming currently doesn't work as expected with `wrangler pages dev`. -- `pnpm test:` Runs the test suite using Vitest. -- `pnpm run typecheck`: Runs TypeScript type checking. -- `pnpm run typegen`: Generates TypeScript types using Wrangler. -- `pnpm run deploy`: Builds the project and deploys it to Cloudflare Pages. - -## Development - -To start the development server: - -```bash -pnpm run dev -``` - -This will start the Remix Vite development server. - -## Testing - -Run the test suite with: - -```bash -pnpm test -``` - -## Deployment - -To deploy the application to Cloudflare Pages: - -```bash -pnpm run deploy -``` - -Make sure you have the necessary permissions and Wrangler is correctly configured for your Cloudflare account. diff --git a/packages/bolt/app/components/header/OpenStackBlitz.client.tsx b/packages/bolt/app/components/header/OpenStackBlitz.client.tsx deleted file mode 100644 index 92c5ba3..0000000 --- a/packages/bolt/app/components/header/OpenStackBlitz.client.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { useStore } from '@nanostores/react'; -import sdk from '@stackblitz/sdk'; -import path from 'path'; -import { memo, useCallback, useEffect, useState } from 'react'; -import type { FileMap } from '~/lib/stores/files'; -import { workbenchStore, type ArtifactState } from '~/lib/stores/workbench'; -import { classNames } from '~/utils/classNames'; -import { WORK_DIR } from '~/utils/constants'; - -// extract relative path and content from file, wrapped in array for flatMap use -const extractContent = ([file, value]: [string, FileMap[string]]) => { - // ignore directory entries - if (!value || value.type !== 'file') { - return []; - } - - const relative = path.relative(WORK_DIR, file); - const parts = relative.split(path.sep); - - // ignore hidden files - if (parts.some((part) => part.startsWith('.'))) { - return []; - } - - return [[relative, value.content]]; -}; - -// subscribe to changes in first artifact's runner actions -const useFirstArtifact = (): [boolean, ArtifactState | undefined] => { - const [hasLoaded, setHasLoaded] = useState(false); - - // react to artifact changes - useStore(workbenchStore.artifacts); - - const { firstArtifact } = workbenchStore; - - useEffect(() => { - if (firstArtifact) { - return firstArtifact.runner.actions.subscribe((_) => setHasLoaded(workbenchStore.filesCount > 0)); - } - - return undefined; - }, [firstArtifact]); - - return [hasLoaded, firstArtifact]; -}; - -export const OpenStackBlitz = memo(() => { - const [artifactLoaded, artifact] = useFirstArtifact(); - - const disabled = !artifactLoaded; - - const handleClick = useCallback(() => { - if (!artifact) { - return; - } - - // extract relative path and content from files map - const workbenchFiles = workbenchStore.files.get(); - const files = Object.fromEntries(Object.entries(workbenchFiles).flatMap(extractContent)); - - // we use the first artifact's title for the StackBlitz project - const { title } = artifact; - - sdk.openProject({ - title, - template: 'node', - files, - }); - }, [artifact]); - - return ( - - ); -}); diff --git a/packages/bolt/app/lib/analytics.ts b/packages/bolt/app/lib/analytics.ts deleted file mode 100644 index 883ebde..0000000 --- a/packages/bolt/app/lib/analytics.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { Analytics, type IdentifyParams, type PageParams, type TrackParams } from '@segment/analytics-node'; -import { CLIENT_ORIGIN } from '~/lib/constants'; -import { request as doRequest } from '~/lib/fetch'; -import { logger } from '~/utils/logger'; - -export interface Identity { - userId?: string | null; - guestId?: string | null; - segmentWriteKey?: string | null; - avatar?: string; -} - -const MESSAGE_PREFIX = 'Bolt'; - -export enum AnalyticsTrackEvent { - MessageSent = `${MESSAGE_PREFIX} Message Sent`, - MessageComplete = `${MESSAGE_PREFIX} Message Complete`, - ChatCreated = `${MESSAGE_PREFIX} Chat Created`, -} - -export enum AnalyticsAction { - Identify = 'identify', - Page = 'page', - Track = 'track', -} - -// we can omit the user ID since it's retrieved from the user's session -type OmitUserId = Omit; - -export type AnalyticsEvent = - | { action: AnalyticsAction.Identify; payload: OmitUserId } - | { action: AnalyticsAction.Page; payload: OmitUserId } - | { action: AnalyticsAction.Track; payload: OmitUserId }; - -export async function identifyUser(access: string): Promise { - const response = await doRequest(`${CLIENT_ORIGIN}/api/identify`, { - method: 'GET', - headers: { authorization: `Bearer ${access}` }, - }); - - const body = await response.json(); - - if (!response.ok) { - return undefined; - } - - // convert numerical identity values to strings - const stringified = Object.entries(body).map(([key, value]) => [ - key, - typeof value === 'number' ? value.toString() : value, - ]); - - return Object.fromEntries(stringified) as Identity; -} - -// send an analytics event from the client -export async function sendAnalyticsEvent(event: AnalyticsEvent) { - // don't send analytics events when in dev mode - if (import.meta.env.DEV) { - return; - } - - const request = await fetch('/api/analytics', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(event), - }); - - if (!request.ok) { - logger.error(`Error handling Segment Analytics action: ${event.action}`); - } -} - -// send an analytics event from the server -export async function sendEventInternal(identity: Identity, { action, payload }: AnalyticsEvent) { - const { userId, segmentWriteKey: writeKey } = identity; - - if (!userId || !writeKey) { - logger.warn('Missing user ID or write key when logging analytics'); - return { success: false as const, error: 'missing-data' }; - } - - const analytics = new Analytics({ flushAt: 1, writeKey }).on('error', logger.error); - - try { - await new Promise((resolve, reject) => { - if (action === AnalyticsAction.Identify) { - analytics.identify({ ...payload, userId }, resolve); - } else if (action === AnalyticsAction.Page) { - analytics.page({ ...payload, userId }, resolve); - } else if (action === AnalyticsAction.Track) { - analytics.track({ ...payload, userId }, resolve); - } else { - reject(); - } - }); - } catch { - logger.error(`Error handling Segment Analytics action: ${action}`); - return { success: false as const, error: 'invalid-action' }; - } - - return { success: true as const }; -} diff --git a/packages/bolt/app/routes/api.analytics.ts b/packages/bolt/app/routes/api.analytics.ts deleted file mode 100644 index da61715..0000000 --- a/packages/bolt/app/routes/api.analytics.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { json, type ActionFunctionArgs } from '@remix-run/cloudflare'; -import { actionWithAuth } from '~/lib/.server/auth'; -import type { Session } from '~/lib/.server/sessions'; -import { sendEventInternal, type AnalyticsEvent } from '~/lib/analytics'; - -async function analyticsAction({ request }: ActionFunctionArgs, session: Session) { - const event: AnalyticsEvent = await request.json(); - const { success, error } = await sendEventInternal(session, event); - - if (!success) { - return json({ error }, { status: 500 }); - } - - return json({ success }, { status: 200 }); -} - -export async function action(args: ActionFunctionArgs) { - return actionWithAuth(args, analyticsAction); -} diff --git a/packages/bolt/package.json b/packages/bolt/package.json deleted file mode 100644 index 9a80d54..0000000 --- a/packages/bolt/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "name": "bolt", - "description": "StackBlitz AI Agent", - "private": true, - "sideEffects": false, - "type": "module", - "scripts": { - "deploy": "npm run build && wrangler pages deploy", - "build": "remix vite:build", - "dev": "remix vite:dev", - "test": "vitest --run", - "test:watch": "vitest", - "start": "bindings=$(./bindings.sh) && wrangler pages dev ./build/client $bindings", - "typecheck": "tsc", - "typegen": "wrangler types", - "preview": "pnpm run build && pnpm run start" - }, - "dependencies": { - "@ai-sdk/anthropic": "^0.0.39", - "@codemirror/autocomplete": "^6.17.0", - "@codemirror/commands": "^6.6.0", - "@codemirror/lang-cpp": "^6.0.2", - "@codemirror/lang-css": "^6.2.1", - "@codemirror/lang-html": "^6.4.9", - "@codemirror/lang-javascript": "^6.2.2", - "@codemirror/lang-json": "^6.0.1", - "@codemirror/lang-markdown": "^6.2.5", - "@codemirror/lang-python": "^6.1.6", - "@codemirror/lang-sass": "^6.0.2", - "@codemirror/lang-wast": "^6.0.2", - "@codemirror/language": "^6.10.2", - "@codemirror/search": "^6.5.6", - "@codemirror/state": "^6.4.1", - "@codemirror/view": "^6.28.4", - "@iconify-json/ph": "^1.1.13", - "@iconify-json/svg-spinners": "^1.1.2", - "@lezer/highlight": "^1.2.0", - "@nanostores/react": "^0.7.2", - "@radix-ui/react-dialog": "^1.1.1", - "@radix-ui/react-dropdown-menu": "^2.1.1", - "@remix-run/cloudflare": "^2.10.2", - "@remix-run/cloudflare-pages": "^2.10.2", - "@remix-run/react": "^2.10.2", - "@segment/analytics-node": "^2.1.2", - "@stackblitz/sdk": "^1.11.0", - "@uiw/codemirror-theme-vscode": "^4.23.0", - "@unocss/reset": "^0.61.0", - "@webcontainer/api": "^1.3.0-internal.2", - "@xterm/addon-fit": "^0.10.0", - "@xterm/addon-web-links": "^0.11.0", - "@xterm/xterm": "^5.5.0", - "ai": "^3.3.4", - "date-fns": "^3.6.0", - "diff": "^5.2.0", - "framer-motion": "^11.2.12", - "isbot": "^4.1.0", - "istextorbinary": "^9.5.0", - "jose": "^5.6.3", - "nanostores": "^0.10.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-hotkeys-hook": "^4.5.0", - "react-markdown": "^9.0.1", - "react-resizable-panels": "^2.0.20", - "react-toastify": "^10.0.5", - "rehype-raw": "^7.0.0", - "rehype-sanitize": "^6.0.0", - "remark-gfm": "^4.0.0", - "remix-utils": "^7.6.0", - "shiki": "^1.9.1", - "unist-util-visit": "^5.0.0" - }, - "devDependencies": { - "@cloudflare/workers-types": "^4.20240620.0", - "@remix-run/dev": "^2.10.0", - "@types/diff": "^5.2.1", - "@types/react": "^18.2.20", - "@types/react-dom": "^18.2.7", - "fast-glob": "^3.3.2", - "node-fetch": "^3.3.2", - "typescript": "^5.5.2", - "unified": "^11.0.5", - "unocss": "^0.61.3", - "vite": "^5.3.1", - "vite-plugin-node-polyfills": "^0.22.0", - "vite-plugin-optimize-css-modules": "^1.1.0", - "vite-tsconfig-paths": "^4.3.2", - "wrangler": "^3.63.2", - "zod": "^3.23.8" - }, - "engines": { - "node": ">=18.18.0" - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0084701..6ef296a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,30 +10,6 @@ overrides: importers: .: - devDependencies: - '@blitz/eslint-plugin': - specifier: 0.1.0 - version: 0.1.0(@types/eslint@8.56.10)(prettier@3.3.2)(typescript@5.5.2) - '@commitlint/config-conventional': - specifier: ^19.2.2 - version: 19.2.2 - commitlint: - specifier: ^19.3.0 - version: 19.3.0(@types/node@20.14.9)(typescript@5.5.2) - husky: - specifier: ^9.0.11 - version: 9.0.11 - is-ci: - specifier: ^3.0.1 - version: 3.0.1 - prettier: - specifier: ^3.3.2 - version: 3.3.2 - vitest: - specifier: ^2.0.1 - version: 2.0.1(@types/node@20.14.9)(sass@1.77.6) - - packages/bolt: dependencies: '@ai-sdk/anthropic': specifier: ^0.0.39 @@ -110,18 +86,12 @@ importers: '@remix-run/react': specifier: ^2.10.2 version: 2.10.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) - '@segment/analytics-node': - specifier: ^2.1.2 - version: 2.1.2 - '@stackblitz/sdk': - specifier: ^1.11.0 - version: 1.11.0 '@uiw/codemirror-theme-vscode': specifier: ^4.23.0 version: 4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4) '@unocss/reset': specifier: ^0.61.0 - version: 0.61.0 + version: 0.61.3 '@webcontainer/api': specifier: ^1.3.0-internal.2 version: 1.3.0-internal.2 @@ -195,6 +165,9 @@ importers: specifier: ^5.0.0 version: 5.0.0 devDependencies: + '@blitz/eslint-plugin': + specifier: 0.1.0 + version: 0.1.0(@types/eslint@8.56.10)(prettier@3.3.2)(typescript@5.5.2) '@cloudflare/workers-types': specifier: ^4.20240620.0 version: 4.20240620.0 @@ -213,9 +186,15 @@ importers: fast-glob: specifier: ^3.3.2 version: 3.3.2 + is-ci: + specifier: ^3.0.1 + version: 3.0.1 node-fetch: specifier: ^3.3.2 version: 3.3.2 + prettier: + specifier: ^3.3.2 + version: 3.3.2 typescript: specifier: ^5.5.2 version: 5.5.2 @@ -237,6 +216,9 @@ importers: vite-tsconfig-paths: specifier: ^4.3.2 version: 4.3.2(typescript@5.5.2)(vite@5.3.1(@types/node@20.14.9)(sass@1.77.6)) + vitest: + specifier: ^2.0.1 + version: 2.0.1(@types/node@20.14.9)(sass@1.77.6) wrangler: specifier: ^3.63.2 version: 3.63.2(@cloudflare/workers-types@4.20240620.0) @@ -579,75 +561,6 @@ packages: '@codemirror/view@6.28.4': resolution: {integrity: sha512-QScv95fiviSQ/CaVGflxAvvvDy/9wi0RFyDl4LkHHWiMr/UPebyuTspmYSeN5Nx6eujcPYwsQzA6ZIZucKZVHQ==} - '@commitlint/cli@19.3.0': - resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} - engines: {node: '>=v18'} - hasBin: true - - '@commitlint/config-conventional@19.2.2': - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} - engines: {node: '>=v18'} - - '@commitlint/config-validator@19.0.3': - resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} - engines: {node: '>=v18'} - - '@commitlint/ensure@19.0.3': - resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} - engines: {node: '>=v18'} - - '@commitlint/execute-rule@19.0.0': - resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} - engines: {node: '>=v18'} - - '@commitlint/format@19.3.0': - resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} - engines: {node: '>=v18'} - - '@commitlint/is-ignored@19.2.2': - resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} - engines: {node: '>=v18'} - - '@commitlint/lint@19.2.2': - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} - engines: {node: '>=v18'} - - '@commitlint/load@19.2.0': - resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} - engines: {node: '>=v18'} - - '@commitlint/message@19.0.0': - resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} - engines: {node: '>=v18'} - - '@commitlint/parse@19.0.3': - resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} - engines: {node: '>=v18'} - - '@commitlint/read@19.2.1': - resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} - engines: {node: '>=v18'} - - '@commitlint/resolve-extends@19.1.0': - resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} - engines: {node: '>=v18'} - - '@commitlint/rules@19.0.3': - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} - engines: {node: '>=v18'} - - '@commitlint/to-lines@19.0.0': - resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} - engines: {node: '>=v18'} - - '@commitlint/top-level@19.0.0': - resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} - engines: {node: '>=v18'} - - '@commitlint/types@19.0.3': - resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} - engines: {node: '>=v18'} - '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1197,14 +1110,6 @@ packages: '@lezer/sass@1.0.6': resolution: {integrity: sha512-w/RCO2dIzZH1To8p+xjs8cE+yfgGus8NZ/dXeWl/QzHyr+TeBs71qiE70KPImEwvTsmEjoWh0A5SxMzKd5BWBQ==} - '@lukeed/csprng@1.1.0': - resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} - engines: {node: '>=8'} - - '@lukeed/uuid@2.0.1': - resolution: {integrity: sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==} - engines: {node: '>=8'} - '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -1752,25 +1657,12 @@ packages: cpu: [x64] os: [win32] - '@segment/analytics-core@1.6.0': - resolution: {integrity: sha512-bn9X++IScUfpT7aJGjKU/yJAu/Ko2sYD6HsKA70Z2560E89x30pqgqboVKY8kootvQnT4UKCJiUr5NDMgjmWdQ==} - - '@segment/analytics-generic-utils@1.2.0': - resolution: {integrity: sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==} - - '@segment/analytics-node@2.1.2': - resolution: {integrity: sha512-CIqWH5G0pB/LAFAZEZtntAxujiYIpdk0F+YGhfM6N/qt4/VLWjFcd4VZXVLW7xqaxig64UKWGQhe8bszXDRXXw==} - engines: {node: '>=18'} - '@shikijs/core@1.9.1': resolution: {integrity: sha512-EmUful2MQtY8KgCF1OkBtOuMcvaZEvmdubhW0UHCGXi21O9dRLeADVCj+k6ZS+de7Mz9d2qixOXJ+GLhcK3pXg==} '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@stackblitz/sdk@1.11.0': - resolution: {integrity: sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ==} - '@stylistic/eslint-plugin-js@2.3.0': resolution: {integrity: sha512-lQwoiYb0Fs6Yc5QS3uT8+T9CPKK2Eoxc3H8EnYJgM26v/DgtW+1lvy2WNgyBflU+ThShZaHm3a6CdD9QeKx23w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1786,9 +1678,6 @@ packages: '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - '@types/conventional-commits-parser@5.0.0': - resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} - '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -1978,9 +1867,6 @@ packages: '@unocss/preset-wind@0.61.3': resolution: {integrity: sha512-THdTNAYEtvLz/jhHNgkpLFxC+LNn4W2VqDmpmK/fVMgSlhOYJ8IoQlt8nwgBRbNkEksvgItq8gL/t5+2sHGHhA==} - '@unocss/reset@0.61.0': - resolution: {integrity: sha512-VqemtmzH8Rgu5yNomtv50gIcy4KZ2x1aP+7WZCds9x5ZdTSEjbfCOgUDI9rDrrGSipJkCmJ1yOhUPMC7ND6Hfw==} - '@unocss/reset@0.61.3': resolution: {integrity: sha512-WegQ6Plmr/H0D9wuKCVjhUMzi/xAn55A0mJgUnKl1pJHTZetRdK29u0bnpVQzynmlh/Lh4YtD+X4r8DVkASgPw==} @@ -2089,10 +1975,6 @@ packages: '@zxing/text-encoding@0.9.0': resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -2143,9 +2025,6 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2190,9 +2069,6 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -2310,9 +2186,6 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -2414,10 +2287,6 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -2448,18 +2317,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commitlint@19.3.0: - resolution: {integrity: sha512-B8eUVQCjz+1ZAjR3LC3+vzKg7c4/qN4QhSxkjp0u0v7Pi79t9CsnGAluvveKmFh56e885zgToPL5ax+l8BHTPg==} - engines: {node: '>=v18'} - hasBin: true - common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} - compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -2492,19 +2353,6 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} - - conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} - - conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2526,23 +2374,6 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cosmiconfig-typescript-loader@5.0.0: - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} - engines: {node: '>=v16'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -2581,10 +2412,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dargs@8.1.0: - resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} - engines: {node: '>=12'} - data-uri-to-buffer@2.0.2: resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} @@ -2701,18 +2528,10 @@ packages: resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==} engines: {node: '>=10'} - dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dotenv@16.4.5: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - dset@3.1.3: - resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==} - engines: {node: '>=4'} - duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -2752,16 +2571,9 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -3004,10 +2816,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -3082,10 +2890,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -3112,11 +2916,6 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - git-raw-commits@4.0.0: - resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} - engines: {node: '>=16'} - hasBin: true - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3133,10 +2932,6 @@ packages: engines: {node: '>=16 || 14 >=14.18'} hasBin: true - global-directory@4.0.1: - resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} - engines: {node: '>=18'} - globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -3269,11 +3064,6 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} - engines: {node: '>=18'} - hasBin: true - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -3298,9 +3088,6 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3312,10 +3099,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -3339,9 +3122,6 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -3403,10 +3183,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -3430,10 +3206,6 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} - is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} @@ -3494,9 +3266,6 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-parse-even-better-errors@3.0.2: resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3504,9 +3273,6 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -3530,10 +3296,6 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3552,9 +3314,6 @@ packages: resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - loader-utils@3.3.1: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} @@ -3570,40 +3329,15 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3736,10 +3470,6 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} @@ -4084,15 +3814,6 @@ packages: node-fetch-native@1.6.4: resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4200,18 +3921,10 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -4236,10 +3949,6 @@ packages: parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - parse-ms@2.1.0: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} engines: {node: '>=6'} @@ -4258,10 +3967,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4662,14 +4367,6 @@ packages: zod: optional: true - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - require-like@0.1.2: resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} @@ -4677,10 +4374,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} @@ -4851,10 +4544,6 @@ packages: spdx-license-ids@3.0.18: resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - ssri@10.0.6: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4994,10 +4683,6 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -5008,9 +4693,6 @@ packages: through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - timers-browserify@2.0.12: resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} engines: {node: '>=0.6.0'} @@ -5045,9 +4727,6 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -5129,10 +4808,6 @@ packages: unenv-nightly@1.10.0-1717606461.a117952: resolution: {integrity: sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -5399,12 +5074,6 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -5485,10 +5154,6 @@ packages: xxhash-wasm@1.0.2: resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==} - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -5500,22 +5165,10 @@ packages: engines: {node: '>= 14'} hasBin: true - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - youch@3.3.3: resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} @@ -6003,117 +5656,6 @@ snapshots: style-mod: 4.1.2 w3c-keyname: 2.2.8 - '@commitlint/cli@19.3.0(@types/node@20.14.9)(typescript@5.5.2)': - dependencies: - '@commitlint/format': 19.3.0 - '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.2.0(@types/node@20.14.9)(typescript@5.5.2) - '@commitlint/read': 19.2.1 - '@commitlint/types': 19.0.3 - execa: 8.0.1 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/config-conventional@19.2.2': - dependencies: - '@commitlint/types': 19.0.3 - conventional-changelog-conventionalcommits: 7.0.2 - - '@commitlint/config-validator@19.0.3': - dependencies: - '@commitlint/types': 19.0.3 - ajv: 8.16.0 - - '@commitlint/ensure@19.0.3': - dependencies: - '@commitlint/types': 19.0.3 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 - - '@commitlint/execute-rule@19.0.0': {} - - '@commitlint/format@19.3.0': - dependencies: - '@commitlint/types': 19.0.3 - chalk: 5.3.0 - - '@commitlint/is-ignored@19.2.2': - dependencies: - '@commitlint/types': 19.0.3 - semver: 7.6.2 - - '@commitlint/lint@19.2.2': - dependencies: - '@commitlint/is-ignored': 19.2.2 - '@commitlint/parse': 19.0.3 - '@commitlint/rules': 19.0.3 - '@commitlint/types': 19.0.3 - - '@commitlint/load@19.2.0(@types/node@20.14.9)(typescript@5.5.2)': - dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/execute-rule': 19.0.0 - '@commitlint/resolve-extends': 19.1.0 - '@commitlint/types': 19.0.3 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.5.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.14.9)(cosmiconfig@9.0.0(typescript@5.5.2))(typescript@5.5.2) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/message@19.0.0': {} - - '@commitlint/parse@19.0.3': - dependencies: - '@commitlint/types': 19.0.3 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 - - '@commitlint/read@19.2.1': - dependencies: - '@commitlint/top-level': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 - git-raw-commits: 4.0.0 - minimist: 1.2.8 - - '@commitlint/resolve-extends@19.1.0': - dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/types': 19.0.3 - global-directory: 4.0.1 - import-meta-resolve: 4.1.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - - '@commitlint/rules@19.0.3': - dependencies: - '@commitlint/ensure': 19.0.3 - '@commitlint/message': 19.0.0 - '@commitlint/to-lines': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 - - '@commitlint/to-lines@19.0.0': {} - - '@commitlint/top-level@19.0.0': - dependencies: - find-up: 7.0.0 - - '@commitlint/types@19.0.3': - dependencies: - '@types/conventional-commits-parser': 5.0.0 - chalk: 5.3.0 - '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 @@ -6503,12 +6045,6 @@ snapshots: '@lezer/highlight': 1.2.0 '@lezer/lr': 1.4.1 - '@lukeed/csprng@1.1.0': {} - - '@lukeed/uuid@2.0.1': - dependencies: - '@lukeed/csprng': 1.1.0 - '@mdx-js/mdx@2.3.0': dependencies: '@types/estree-jsx': 1.0.5 @@ -7115,35 +6651,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.18.0': optional: true - '@segment/analytics-core@1.6.0': - dependencies: - '@lukeed/uuid': 2.0.1 - '@segment/analytics-generic-utils': 1.2.0 - dset: 3.1.3 - tslib: 2.6.3 - - '@segment/analytics-generic-utils@1.2.0': - dependencies: - tslib: 2.6.3 - - '@segment/analytics-node@2.1.2': - dependencies: - '@lukeed/uuid': 2.0.1 - '@segment/analytics-core': 1.6.0 - '@segment/analytics-generic-utils': 1.2.0 - buffer: 6.0.3 - jose: 5.6.3 - node-fetch: 2.7.0 - tslib: 2.6.3 - transitivePeerDependencies: - - encoding - '@shikijs/core@1.9.1': {} '@sinclair/typebox@0.27.8': {} - '@stackblitz/sdk@1.11.0': {} - '@stylistic/eslint-plugin-js@2.3.0(eslint@9.5.0)': dependencies: '@types/eslint': 8.56.10 @@ -7166,10 +6677,6 @@ snapshots: dependencies: '@types/estree': 1.0.5 - '@types/conventional-commits-parser@5.0.0': - dependencies: - '@types/node': 20.14.9 - '@types/cookie@0.6.0': {} '@types/debug@4.1.12': @@ -7434,8 +6941,6 @@ snapshots: '@unocss/preset-mini': 0.61.3 '@unocss/rule-utils': 0.61.3 - '@unocss/reset@0.61.0': {} - '@unocss/reset@0.61.3': {} '@unocss/rule-utils@0.61.3': @@ -7637,11 +7142,6 @@ snapshots: '@zxing/text-encoding@0.9.0': optional: true - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -7698,13 +7198,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.16.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -7740,8 +7233,6 @@ snapshots: array-flatten@1.1.1: {} - array-ify@1.0.0: {} - array-union@2.1.0: {} as-table@1.0.55: @@ -7903,11 +7394,6 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - builtin-status-codes@3.0.0: {} bytes@3.0.0: @@ -8017,12 +7503,6 @@ snapshots: client-only@0.0.1: {} - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - clone@1.0.4: {} clsx@2.1.1: {} @@ -8051,21 +7531,8 @@ snapshots: comma-separated-tokens@2.0.3: {} - commitlint@19.3.0(@types/node@20.14.9)(typescript@5.5.2): - dependencies: - '@commitlint/cli': 19.3.0(@types/node@20.14.9)(typescript@5.5.2) - '@commitlint/types': 19.0.3 - transitivePeerDependencies: - - '@types/node' - - typescript - common-tags@1.8.2: {} - compare-func@2.0.0: - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - compressible@2.0.18: dependencies: mime-db: 1.52.0 @@ -8100,21 +7567,6 @@ snapshots: content-type@1.0.5: {} - conventional-changelog-angular@7.0.0: - dependencies: - compare-func: 2.0.0 - - conventional-changelog-conventionalcommits@7.0.2: - dependencies: - compare-func: 2.0.0 - - conventional-commits-parser@5.0.0: - dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 - convert-source-map@2.0.0: {} cookie-signature@1.0.6: {} @@ -8127,22 +7579,6 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@20.14.9)(cosmiconfig@9.0.0(typescript@5.5.2))(typescript@5.5.2): - dependencies: - '@types/node': 20.14.9 - cosmiconfig: 9.0.0(typescript@5.5.2) - jiti: 1.21.6 - typescript: 5.5.2 - - cosmiconfig@9.0.0(typescript@5.5.2): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.5.2 - create-ecdh@4.0.4: dependencies: bn.js: 4.12.0 @@ -8200,8 +7636,6 @@ snapshots: csstype@3.1.3: {} - dargs@8.1.0: {} - data-uri-to-buffer@2.0.2: {} data-uri-to-buffer@3.0.1: {} @@ -8287,14 +7721,8 @@ snapshots: domain-browser@4.23.0: {} - dot-prop@5.3.0: - dependencies: - is-obj: 2.0.0 - dotenv@16.4.5: {} - dset@3.1.3: {} - duplexer@0.1.2: {} duplexify@3.7.1: @@ -8336,14 +7764,8 @@ snapshots: entities@4.5.0: {} - env-paths@2.2.1: {} - err-code@2.0.3: {} - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 @@ -8722,12 +8144,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - flat-cache@4.0.1: dependencies: flatted: 3.3.1 @@ -8788,8 +8204,6 @@ snapshots: gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: {} - get-func-name@2.0.2: {} get-intrinsic@1.2.4: @@ -8813,12 +8227,6 @@ snapshots: get-stream@8.0.1: {} - git-raw-commits@4.0.0: - dependencies: - dargs: 8.1.0 - meow: 12.1.1 - split2: 4.2.0 - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -8838,10 +8246,6 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - global-directory@4.0.1: - dependencies: - ini: 4.1.1 - globals@11.12.0: {} globals@14.0.0: {} @@ -9045,8 +8449,6 @@ snapshots: human-signals@5.0.0: {} - husky@9.0.11: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -9067,16 +8469,12 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-meta-resolve@4.1.0: {} - imurmurhash@0.1.4: {} indent-string@4.0.0: {} inherits@2.0.4: {} - ini@4.1.1: {} - inline-style-parser@0.1.1: {} inline-style-parser@0.2.3: {} @@ -9099,8 +8497,6 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-arrayish@0.2.1: {} - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -9146,8 +8542,6 @@ snapshots: is-number@7.0.0: {} - is-obj@2.0.0: {} - is-path-inside@3.0.3: {} is-plain-obj@3.0.0: {} @@ -9162,10 +8556,6 @@ snapshots: is-stream@3.0.0: {} - is-text-path@2.0.0: - dependencies: - text-extensions: 2.4.0 - is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 @@ -9210,14 +8600,10 @@ snapshots: json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} - json-parse-even-better-errors@3.0.2: {} json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-schema@0.4.0: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -9243,8 +8629,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonparse@1.3.1: {} - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -9260,8 +8644,6 @@ snapshots: lilconfig@3.1.2: {} - lines-and-columns@1.2.4: {} - loader-utils@3.3.1: {} local-pkg@0.5.0: @@ -9275,30 +8657,12 @@ snapshots: dependencies: p-locate: 5.0.0 - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - lodash.camelcase@4.3.0: {} lodash.debounce@4.0.8: {} - lodash.isplainobject@4.0.6: {} - - lodash.kebabcase@4.1.1: {} - lodash.merge@4.6.2: {} - lodash.mergewith@4.6.2: {} - - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - - lodash.uniq@4.5.0: {} - - lodash.upperfirst@4.3.1: {} - lodash@4.17.21: {} log-symbols@4.1.0: @@ -9610,8 +8974,6 @@ snapshots: media-typer@0.3.0: {} - meow@12.1.1: {} - merge-descriptors@1.0.1: {} merge-stream@2.0.0: {} @@ -10160,10 +9522,6 @@ snapshots: node-fetch-native@1.6.4: {} - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -10316,18 +9674,10 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.0.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - p-map@4.0.0: dependencies: aggregate-error: 3.1.0 @@ -10362,13 +9712,6 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.24.7 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - parse-ms@2.1.0: {} parse5@7.1.2: @@ -10381,8 +9724,6 @@ snapshots: path-exists@4.0.0: {} - path-exists@5.0.0: {} - path-key@3.1.1: {} path-key@4.0.0: {} @@ -10803,16 +10144,10 @@ snapshots: react: 18.3.1 zod: 3.23.8 - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - require-like@0.1.2: {} resolve-from@4.0.0: {} - resolve-from@5.0.0: {} - resolve.exports@2.0.2: {} resolve@1.22.8: @@ -11014,8 +10349,6 @@ snapshots: spdx-license-ids@3.0.18: {} - split2@4.2.0: {} - ssri@10.0.6: dependencies: minipass: 7.1.2 @@ -11179,8 +10512,6 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - text-extensions@2.4.0: {} - text-table@0.2.0: {} textextensions@6.11.0: @@ -11192,8 +10523,6 @@ snapshots: readable-stream: 2.3.8 xtend: 4.0.2 - through@2.3.8: {} - timers-browserify@2.0.12: dependencies: setimmediate: 1.0.5 @@ -11216,8 +10545,6 @@ snapshots: totalist@3.0.1: {} - tr46@0.0.3: {} - trim-lines@3.0.1: {} trough@2.2.0: {} @@ -11291,8 +10618,6 @@ snapshots: pathe: 1.1.2 ufo: 1.5.3 - unicorn-magic@0.1.0: {} - unified@10.1.2: dependencies: '@types/unist': 2.0.10 @@ -11634,13 +10959,6 @@ snapshots: web-streams-polyfill@3.3.3: {} - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 @@ -11720,30 +11038,14 @@ snapshots: xxhash-wasm@1.0.2: {} - y18n@5.0.8: {} - yallist@3.1.1: {} yallist@4.0.0: {} yaml@2.4.5: {} - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.1.2 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yocto-queue@0.1.0: {} - yocto-queue@1.0.0: {} - youch@3.3.3: dependencies: cookie: 0.5.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 18ec407..0000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - 'packages/*' diff --git a/packages/bolt/public/favicon.svg b/public/favicon.svg similarity index 100% rename from packages/bolt/public/favicon.svg rename to public/favicon.svg diff --git a/packages/bolt/public/logo.svg b/public/logo.svg similarity index 100% rename from packages/bolt/public/logo.svg rename to public/logo.svg diff --git a/packages/bolt/tsconfig.json b/tsconfig.json similarity index 100% rename from packages/bolt/tsconfig.json rename to tsconfig.json diff --git a/packages/bolt/types/istextorbinary.d.ts b/types/istextorbinary.d.ts similarity index 100% rename from packages/bolt/types/istextorbinary.d.ts rename to types/istextorbinary.d.ts diff --git a/packages/bolt/uno.config.ts b/uno.config.ts similarity index 100% rename from packages/bolt/uno.config.ts rename to uno.config.ts diff --git a/packages/bolt/vite.config.ts b/vite.config.ts similarity index 100% rename from packages/bolt/vite.config.ts rename to vite.config.ts diff --git a/packages/bolt/worker-configuration.d.ts b/worker-configuration.d.ts similarity index 100% rename from packages/bolt/worker-configuration.d.ts rename to worker-configuration.d.ts diff --git a/packages/bolt/wrangler.toml b/wrangler.toml similarity index 100% rename from packages/bolt/wrangler.toml rename to wrangler.toml