From fddbdba12cf6b7b0971165a3305f4b44d061ba85 Mon Sep 17 00:00:00 2001 From: milind-soni Date: Fri, 21 Aug 2026 17:55:04 +0530 Subject: [PATCH 1/2] docs: add Fumadocs documentation site --- .gitignore | 1 + apps/docs/.gitignore | 15 + apps/docs/.oxlintrc.json | 4 + apps/docs/README.md | 36 + apps/docs/app/(home)/layout.tsx | 6 + apps/docs/app/(home)/page.tsx | 77 + apps/docs/app/api/search/route.ts | 8 + apps/docs/app/docs/[[...slug]]/page.tsx | 56 + apps/docs/app/docs/layout.tsx | 11 + apps/docs/app/global.css | 32 + apps/docs/app/layout.tsx | 30 + apps/docs/app/llms-full.txt/route.ts | 8 + .../app/llms.mdx/docs/[[...slug]]/route.ts | 21 + apps/docs/app/llms.txt/route.ts | 8 + apps/docs/app/og/docs/[...slug]/route.tsx | 25 + apps/docs/components/mdx.tsx | 15 + apps/docs/components/provider.tsx | 9 + apps/docs/components/search.tsx | 37 + apps/docs/content/docs/changelog/index.mdx | 51 + apps/docs/content/docs/changelog/meta.json | 5 + .../content/docs/computers/cloud-and-vps.mdx | 26 + apps/docs/content/docs/computers/index.mdx | 26 + .../content/docs/computers/local-computer.mdx | 22 + apps/docs/content/docs/computers/local-vm.mdx | 21 + apps/docs/content/docs/computers/meta.json | 5 + .../content/docs/connected-apps/index.mdx | 33 + .../content/docs/connected-apps/meta.json | 5 + .../docs/connected-apps/multiple-accounts.mdx | 23 + .../connected-apps/self-hosted-composio.mdx | 31 + .../docs/contributing/documentation.mdx | 44 + apps/docs/content/docs/contributing/index.mdx | 29 + apps/docs/content/docs/contributing/meta.json | 5 + .../docs/content/docs/features/automation.mdx | 27 + .../content/docs/features/chat-and-teams.mdx | 27 + apps/docs/content/docs/features/index.mdx | 52 + apps/docs/content/docs/features/meta.json | 5 + .../docs/features/voice-and-memory.mdx | 25 + .../docs/getting-started/configuration.mdx | 37 + .../docs/getting-started/first-bot.mdx | 41 + .../docs/getting-started/installation.mdx | 54 + .../content/docs/getting-started/meta.json | 5 + apps/docs/content/docs/index.mdx | 37 + apps/docs/content/docs/meta.json | 17 + .../content/docs/mobile/android-control.mdx | 16 + .../content/docs/mobile/ios-companion.mdx | 36 + apps/docs/content/docs/mobile/meta.json | 5 + apps/docs/content/docs/providers/index.mdx | 39 + apps/docs/content/docs/providers/meta.json | 5 + .../docs/providers/troubleshooting.mdx | 31 + apps/docs/content/docs/security/index.mdx | 27 + apps/docs/content/docs/security/meta.json | 5 + .../docs/security/permissions-and-secrets.mdx | 27 + .../docs/self-hosting/data-and-backups.mdx | 19 + apps/docs/content/docs/self-hosting/index.mdx | 35 + apps/docs/content/docs/self-hosting/meta.json | 5 + .../content/docs/self-hosting/networking.mdx | 24 + apps/docs/lib/layout.shared.tsx | 16 + apps/docs/lib/shared.ts | 10 + apps/docs/lib/source.ts | 45 + apps/docs/next.config.mjs | 11 + apps/docs/package.json | 35 + apps/docs/postcss.config.mjs | 7 + apps/docs/tsconfig.json | 30 + package.json | 3 + pnpm-lock.yaml | 2257 ++++++++++++++++- pnpm-workspace.yaml | 1 + 66 files changed, 3724 insertions(+), 17 deletions(-) create mode 100644 apps/docs/.gitignore create mode 100644 apps/docs/.oxlintrc.json create mode 100644 apps/docs/README.md create mode 100644 apps/docs/app/(home)/layout.tsx create mode 100644 apps/docs/app/(home)/page.tsx create mode 100644 apps/docs/app/api/search/route.ts create mode 100644 apps/docs/app/docs/[[...slug]]/page.tsx create mode 100644 apps/docs/app/docs/layout.tsx create mode 100644 apps/docs/app/global.css create mode 100644 apps/docs/app/layout.tsx create mode 100644 apps/docs/app/llms-full.txt/route.ts create mode 100644 apps/docs/app/llms.mdx/docs/[[...slug]]/route.ts create mode 100644 apps/docs/app/llms.txt/route.ts create mode 100644 apps/docs/app/og/docs/[...slug]/route.tsx create mode 100644 apps/docs/components/mdx.tsx create mode 100644 apps/docs/components/provider.tsx create mode 100644 apps/docs/components/search.tsx create mode 100644 apps/docs/content/docs/changelog/index.mdx create mode 100644 apps/docs/content/docs/changelog/meta.json create mode 100644 apps/docs/content/docs/computers/cloud-and-vps.mdx create mode 100644 apps/docs/content/docs/computers/index.mdx create mode 100644 apps/docs/content/docs/computers/local-computer.mdx create mode 100644 apps/docs/content/docs/computers/local-vm.mdx create mode 100644 apps/docs/content/docs/computers/meta.json create mode 100644 apps/docs/content/docs/connected-apps/index.mdx create mode 100644 apps/docs/content/docs/connected-apps/meta.json create mode 100644 apps/docs/content/docs/connected-apps/multiple-accounts.mdx create mode 100644 apps/docs/content/docs/connected-apps/self-hosted-composio.mdx create mode 100644 apps/docs/content/docs/contributing/documentation.mdx create mode 100644 apps/docs/content/docs/contributing/index.mdx create mode 100644 apps/docs/content/docs/contributing/meta.json create mode 100644 apps/docs/content/docs/features/automation.mdx create mode 100644 apps/docs/content/docs/features/chat-and-teams.mdx create mode 100644 apps/docs/content/docs/features/index.mdx create mode 100644 apps/docs/content/docs/features/meta.json create mode 100644 apps/docs/content/docs/features/voice-and-memory.mdx create mode 100644 apps/docs/content/docs/getting-started/configuration.mdx create mode 100644 apps/docs/content/docs/getting-started/first-bot.mdx create mode 100644 apps/docs/content/docs/getting-started/installation.mdx create mode 100644 apps/docs/content/docs/getting-started/meta.json create mode 100644 apps/docs/content/docs/index.mdx create mode 100644 apps/docs/content/docs/meta.json create mode 100644 apps/docs/content/docs/mobile/android-control.mdx create mode 100644 apps/docs/content/docs/mobile/ios-companion.mdx create mode 100644 apps/docs/content/docs/mobile/meta.json create mode 100644 apps/docs/content/docs/providers/index.mdx create mode 100644 apps/docs/content/docs/providers/meta.json create mode 100644 apps/docs/content/docs/providers/troubleshooting.mdx create mode 100644 apps/docs/content/docs/security/index.mdx create mode 100644 apps/docs/content/docs/security/meta.json create mode 100644 apps/docs/content/docs/security/permissions-and-secrets.mdx create mode 100644 apps/docs/content/docs/self-hosting/data-and-backups.mdx create mode 100644 apps/docs/content/docs/self-hosting/index.mdx create mode 100644 apps/docs/content/docs/self-hosting/meta.json create mode 100644 apps/docs/content/docs/self-hosting/networking.mdx create mode 100644 apps/docs/lib/layout.shared.tsx create mode 100644 apps/docs/lib/shared.ts create mode 100644 apps/docs/lib/source.ts create mode 100644 apps/docs/next.config.mjs create mode 100644 apps/docs/package.json create mode 100644 apps/docs/postcss.config.mjs create mode 100644 apps/docs/tsconfig.json diff --git a/.gitignore b/.gitignore index cc39fcee5..f915aeedb 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ release .dev.vars.* cloudflare/composio-broker/worker-configuration.d.ts .claude/worktrees/ +.vercel/ diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore new file mode 100644 index 000000000..2253f6f7b --- /dev/null +++ b/apps/docs/.gitignore @@ -0,0 +1,15 @@ +/node_modules +/.source +/coverage +/.next +/.open-next +/out +/build +*.tsbuildinfo +.DS_Store +*.pem +.env*.local +.vercel +next-env.d.ts +cloudflare-env.d.ts +.env* diff --git a/apps/docs/.oxlintrc.json b/apps/docs/.oxlintrc.json new file mode 100644 index 000000000..07401af05 --- /dev/null +++ b/apps/docs/.oxlintrc.json @@ -0,0 +1,4 @@ +{ + "$schema": "../../node_modules/oxlint/configuration_schema.json", + "ignorePatterns": [".next/**", ".open-next/**", ".source/**"] +} diff --git a/apps/docs/README.md b/apps/docs/README.md new file mode 100644 index 000000000..339afc28f --- /dev/null +++ b/apps/docs/README.md @@ -0,0 +1,36 @@ +# OpenMausBot documentation + +The public documentation site is a Next.js 16 + Fumadocs app. User-facing content lives in `content/docs`; the repository's top-level `docs` folder remains available for implementation notes and detailed platform records. + +## Develop + +From the repository root: + +```bash +pnpm install +pnpm docs:dev +``` + +The site opens at `http://localhost:3000`. + +## Verify + +```bash +pnpm docs:build +pnpm --filter @openmausbot/docs types:check +pnpm --filter @openmausbot/docs lint +``` + +## Deploy to Vercel + +This is a fully static site. Deploying it does not deploy the Electron app, local harness, credentials, agents, or user data. + +Create a second Vercel project beside the existing `openmausbot.com` project: + +1. Import the `milind-soni/OpenMausBot` repository. +2. Set **Root Directory** to `apps/docs`. +3. Keep the detected **Next.js** framework settings. +4. Set the production branch to `main` and deploy. +5. Add `docs.openmausbot.com` under **Settings → Domains**. + +Vercel will build the static `out` directory, publish every push to `main`, and create preview URLs for documentation pull requests. Keep `openmausbot.com` on the existing marketing project and add a Docs link there after the new domain is live. diff --git a/apps/docs/app/(home)/layout.tsx b/apps/docs/app/(home)/layout.tsx new file mode 100644 index 000000000..77379fac3 --- /dev/null +++ b/apps/docs/app/(home)/layout.tsx @@ -0,0 +1,6 @@ +import { HomeLayout } from 'fumadocs-ui/layouts/home'; +import { baseOptions } from '@/lib/layout.shared'; + +export default function Layout({ children }: LayoutProps<'/'>) { + return {children}; +} diff --git a/apps/docs/app/(home)/page.tsx b/apps/docs/app/(home)/page.tsx new file mode 100644 index 000000000..3cdbae4bb --- /dev/null +++ b/apps/docs/app/(home)/page.tsx @@ -0,0 +1,77 @@ +import { ArrowRight, Bot, GitBranch, Laptop, PlugZap, ShieldCheck, Sparkles } from 'lucide-react'; +import Link from 'next/link'; + +const features = [ + { + icon: Bot, + title: 'Bring your own agents', + description: 'Run Claude, Codex, Grok, Cursor, Kimi, Droid, Qwen, Hermes, Pi, and more through their native CLIs.', + }, + { + icon: Laptop, + title: 'Give them computers', + description: 'Use this computer, an isolated Local VM, a Box cloud desktop, or your own Linux VPS.', + }, + { + icon: PlugZap, + title: 'Connect the apps you use', + description: 'Authorize Gmail, Slack, GitHub, Notion, and hundreds of other tools with account-aware connections.', + }, + { + icon: ShieldCheck, + title: 'Stay in control', + description: 'Review risky actions in chat. Credentials remain write-only and agent processes stay on your machine.', + }, +]; + +export default function HomePage() { + return ( +
+
+
+
+ + Open source · local first · Apache 2.0 +
+

+ Your own team of AI agents, in a chat app. +

+

+ Learn how to install OpenMausBot, connect your agent CLIs, add computers and apps, automate work, and build on the harness. +

+
+ + Get started + + + View on GitHub + +
+
+ +
+ {features.map(({ icon: Icon, title, description }) => ( +
+
+ +
+

{title}

+

{description}

+
+ ))} +
+ +
+
+
+

Start with one bot

+

Install an agent CLI, sign in once, and OpenMausBot discovers it automatically.

+
+ + Browse all documentation + +
+
+
+ ); +} diff --git a/apps/docs/app/api/search/route.ts b/apps/docs/app/api/search/route.ts new file mode 100644 index 000000000..3393da6fb --- /dev/null +++ b/apps/docs/app/api/search/route.ts @@ -0,0 +1,8 @@ +import { source } from '@/lib/source'; +import { createFromSource } from 'fumadocs-core/search/server'; + +export const revalidate = false; + +export const { staticGET: GET } = createFromSource(source, { + language: 'english', +}); diff --git a/apps/docs/app/docs/[[...slug]]/page.tsx b/apps/docs/app/docs/[[...slug]]/page.tsx new file mode 100644 index 000000000..d3200e048 --- /dev/null +++ b/apps/docs/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,56 @@ +import { getPageImageUrl, getPageMarkdownUrl, source } from '@/lib/source'; +import { + DocsBody, + DocsDescription, + DocsPage, + DocsTitle, + MarkdownCopyButton, + ViewOptionsPopover, +} from 'fumadocs-ui/layouts/docs/page'; +import { notFound } from 'next/navigation'; +import { getMDXComponents } from '@/components/mdx'; +import type { Metadata } from 'next'; +import { createRelativeLink } from 'fumadocs-ui/mdx'; +import { gitConfig } from '@/lib/shared'; + +export default async function Page(props: PageProps<'/docs/[[...slug]]'>) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + const MDX = page.data.body; + const markdownUrl = getPageMarkdownUrl(page).url; + + return ( + + {page.data.title} + {page.data.description} +
+ + +
+ + + +
+ ); +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata(props: PageProps<'/docs/[[...slug]]'>): Promise { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + return { + title: page.data.title, + description: page.data.description, + openGraph: { images: getPageImageUrl(page).url }, + }; +} diff --git a/apps/docs/app/docs/layout.tsx b/apps/docs/app/docs/layout.tsx new file mode 100644 index 000000000..a373143bf --- /dev/null +++ b/apps/docs/app/docs/layout.tsx @@ -0,0 +1,11 @@ +import { source } from '@/lib/source'; +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import { baseOptions } from '@/lib/layout.shared'; + +export default function Layout({ children }: LayoutProps<'/docs'>) { + return ( + + {children} + + ); +} diff --git a/apps/docs/app/global.css b/apps/docs/app/global.css new file mode 100644 index 000000000..ab99e74e5 --- /dev/null +++ b/apps/docs/app/global.css @@ -0,0 +1,32 @@ +@import 'tailwindcss'; +@import 'fumadocs-ui/css/neutral.css'; +@import 'fumadocs-ui/css/preset.css'; + +:root { + --omb-blue: #2389ff; + --omb-cyan: #61d7ff; + --omb-ink: #07111f; +} + +html { + scrollbar-gutter: stable; +} + +html > body[data-scroll-locked] { + margin-right: 0 !important; + --removed-body-scroll-bar-size: 0px !important; +} + +.omb-hero-grid { + background-image: + linear-gradient(to right, color-mix(in srgb, var(--omb-blue) 10%, transparent) 1px, transparent 1px), + linear-gradient(to bottom, color-mix(in srgb, var(--omb-blue) 10%, transparent) 1px, transparent 1px); + background-size: 44px 44px; + mask-image: linear-gradient(to bottom, black, transparent 86%); +} + +.omb-gradient-text { + background: linear-gradient(115deg, var(--omb-blue), var(--omb-cyan)); + background-clip: text; + color: transparent; +} diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx new file mode 100644 index 000000000..8eee27e4c --- /dev/null +++ b/apps/docs/app/layout.tsx @@ -0,0 +1,30 @@ +import type { Metadata } from 'next'; +import { Inter } from 'next/font/google'; +import { Provider } from '@/components/provider'; +import './global.css'; + +const inter = Inter({ subsets: ['latin'] }); + +export const metadata: Metadata = { + metadataBase: new URL('https://docs.openmausbot.com'), + title: { + default: 'OpenMausBot Docs', + template: '%s · OpenMausBot Docs', + }, + description: 'Install, configure, and extend your local-first team of AI agents.', + openGraph: { + title: 'OpenMausBot Docs', + description: 'Your own team of AI agents, in a chat app.', + type: 'website', + }, +}; + +export default function Layout({ children }: LayoutProps<'/'>) { + return ( + + + {children} + + + ); +} diff --git a/apps/docs/app/llms-full.txt/route.ts b/apps/docs/app/llms-full.txt/route.ts new file mode 100644 index 000000000..2eeeb8b4d --- /dev/null +++ b/apps/docs/app/llms-full.txt/route.ts @@ -0,0 +1,8 @@ +import { getLLMText, source } from '@/lib/source'; + +export const revalidate = false; + +export async function GET() { + const scanned = await Promise.all(source.getPages().map(getLLMText)); + return new Response(scanned.join('\n\n')); +} diff --git a/apps/docs/app/llms.mdx/docs/[[...slug]]/route.ts b/apps/docs/app/llms.mdx/docs/[[...slug]]/route.ts new file mode 100644 index 000000000..71ac61bdc --- /dev/null +++ b/apps/docs/app/llms.mdx/docs/[[...slug]]/route.ts @@ -0,0 +1,21 @@ +import { getLLMText, getPageMarkdownUrl, source } from '@/lib/source'; +import { notFound } from 'next/navigation'; + +export const revalidate = false; + +export async function GET(_req: Request, { params }: RouteContext<'/llms.mdx/docs/[[...slug]]'>) { + const { slug } = await params; + const page = source.getPage(slug?.slice(0, -1)); + if (!page) notFound(); + + return new Response(await getLLMText(page), { + headers: { 'Content-Type': 'text/markdown' }, + }); +} + +export function generateStaticParams() { + return source.getPages().map((page) => ({ + lang: page.locale, + slug: getPageMarkdownUrl(page).segments, + })); +} diff --git a/apps/docs/app/llms.txt/route.ts b/apps/docs/app/llms.txt/route.ts new file mode 100644 index 000000000..fc80cb652 --- /dev/null +++ b/apps/docs/app/llms.txt/route.ts @@ -0,0 +1,8 @@ +import { source } from '@/lib/source'; +import { llms } from 'fumadocs-core/source'; + +export const revalidate = false; + +export function GET() { + return new Response(llms(source).index()); +} diff --git a/apps/docs/app/og/docs/[...slug]/route.tsx b/apps/docs/app/og/docs/[...slug]/route.tsx new file mode 100644 index 000000000..6cd5fa950 --- /dev/null +++ b/apps/docs/app/og/docs/[...slug]/route.tsx @@ -0,0 +1,25 @@ +import { getPageImageUrl, source } from '@/lib/source'; +import { notFound } from 'next/navigation'; +import { ImageResponse } from 'next/og'; +import { generate as DefaultImage } from 'fumadocs-ui/og'; +import { appName } from '@/lib/shared'; + +export const revalidate = false; + +export async function GET(_req: Request, { params }: RouteContext<'/og/docs/[...slug]'>) { + const { slug } = await params; + const page = source.getPage(slug.slice(0, -1)); + if (!page) notFound(); + + return new ImageResponse( + , + { width: 1200, height: 630 }, + ); +} + +export function generateStaticParams() { + return source.getPages().map((page) => ({ + lang: page.locale, + slug: getPageImageUrl(page).segments, + })); +} diff --git a/apps/docs/components/mdx.tsx b/apps/docs/components/mdx.tsx new file mode 100644 index 000000000..a640575f0 --- /dev/null +++ b/apps/docs/components/mdx.tsx @@ -0,0 +1,15 @@ +import defaultMdxComponents from 'fumadocs-ui/mdx'; +import type { MDXComponents } from 'mdx/types'; + +export function getMDXComponents(components?: MDXComponents) { + return { + ...defaultMdxComponents, + ...components, + } satisfies MDXComponents; +} + +export const useMDXComponents = getMDXComponents; + +declare global { + type MDXProvidedComponents = ReturnType; +} diff --git a/apps/docs/components/provider.tsx b/apps/docs/components/provider.tsx new file mode 100644 index 000000000..6e2dfc5c9 --- /dev/null +++ b/apps/docs/components/provider.tsx @@ -0,0 +1,9 @@ +'use client'; + +import SearchDialog from '@/components/search'; +import { RootProvider } from 'fumadocs-ui/provider/next'; +import type { ReactNode } from 'react'; + +export function Provider({ children }: { children: ReactNode }) { + return {children}; +} diff --git a/apps/docs/components/search.tsx b/apps/docs/components/search.tsx new file mode 100644 index 000000000..29531f5de --- /dev/null +++ b/apps/docs/components/search.tsx @@ -0,0 +1,37 @@ +'use client'; + +import { + SearchDialog, + SearchDialogClose, + SearchDialogContent, + SearchDialogHeader, + SearchDialogIcon, + SearchDialogInput, + SearchDialogList, + SearchDialogOverlay, + type SharedProps, +} from 'fumadocs-ui/components/dialog/search'; +import { useDocsSearch } from 'fumadocs-core/search/client'; +import { staticClient } from 'fumadocs-core/search/client/orama-static'; +import { useI18n } from 'fumadocs-ui/contexts/i18n'; + +export default function DefaultSearchDialog(props: SharedProps) { + const { locale } = useI18n(); + const { search, setSearch, query } = useDocsSearch({ + client: staticClient({ locale }), + }); + + return ( + + + + + + + + + + + + ); +} diff --git a/apps/docs/content/docs/changelog/index.mdx b/apps/docs/content/docs/changelog/index.mdx new file mode 100644 index 000000000..90a3ffda5 --- /dev/null +++ b/apps/docs/content/docs/changelog/index.mdx @@ -0,0 +1,51 @@ +--- +title: Changelog +description: Highlights from recent OpenMausBot desktop releases. +icon: Clock +--- + +The changelog tracks published desktop builds. Changes merged into `main` after a release are not listed as shipped until a new build is published. + +## 0.1.27 — August 20, 2026 + +- Added the Cursor Agent CLI engine with ACP model discovery. +- Added pasted screenshot attachments and labeled sidebar sections. +- Repaired the macOS update restart path and made browser join links resilient to popup blocking. +- Added approval audit records, credential hardening, pinned messages, more reactions, room timeouts, and temporary computer takeover. +- Adopted Apache License 2.0. + +[Full 0.1.27 release notes](https://github.com/milind-soni/openmausbot-releases/releases/tag/v0.1.27) + +## 0.1.25 — August 20, 2026 + +- Added a signed and notarized Intel macOS build. +- Shipped the first Ubuntu 24.04 x64 `.deb` and AppImage beta packages. +- Added four themes, spoiler text, safer additive team import, and several approval and model-routing fixes. + +[Full 0.1.25 release notes](https://github.com/milind-soni/openmausbot-releases/releases/tag/v0.1.25) + +## 0.1.24 — August 19, 2026 + +- Added the native iOS companion and USB Android control. +- Added readable bot memory, working folders, cost tracking, message search, and a raw event inspector. +- Added Bring Your Own VPS computers and major harness reliability fixes. + +[Full 0.1.24 release notes](https://github.com/milind-soni/openmausbot-releases/releases/tag/v0.1.24) + +## 0.1.23 — August 17, 2026 + +- Fixed the Composio OAuth completion flow. +- Added clear updater states, a new app icon, and correct delegated-turn terminal status. + +[Full 0.1.23 release notes](https://github.com/milind-soni/openmausbot-releases/releases/tag/v0.1.23) + +## 0.1.22 — August 17, 2026 + +- Replaced the legacy two-key connector setup with one validated Composio project key. +- Moved connector lifecycle to Composio Sessions and added true upstream revocation. + +[Full 0.1.22 release notes](https://github.com/milind-soni/openmausbot-releases/releases/tag/v0.1.22) + + + Browse checksums, installers, and older notes in the [OpenMausBot releases repository](https://github.com/milind-soni/openmausbot-releases/releases). + diff --git a/apps/docs/content/docs/changelog/meta.json b/apps/docs/content/docs/changelog/meta.json new file mode 100644 index 000000000..e73d9f2a5 --- /dev/null +++ b/apps/docs/content/docs/changelog/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Changelog", + "icon": "Clock", + "pages": ["index"] +} diff --git a/apps/docs/content/docs/computers/cloud-and-vps.mdx b/apps/docs/content/docs/computers/cloud-and-vps.mdx new file mode 100644 index 000000000..7d5df28d2 --- /dev/null +++ b/apps/docs/content/docs/computers/cloud-and-vps.mdx @@ -0,0 +1,26 @@ +--- +title: Cloud computer and your own VPS +description: Choose a managed Box desktop or a hardened container on a Linux server you own. +icon: Cloud +--- + +## Box cloud computer + +Add a Box API key in App Settings to provision an isolated hosted Linux desktop. The computer can sleep and wake, and supported sessions provide a live viewer for temporary human control. + +Box is a third-party paid service after its trial. OpenMausBot stores the configured credential locally and does not expose it to the renderer. + +## Bring your own VPS + +OpenMausBot can control Docker on an x86_64 Linux server through an SSH config alias. The agent process stays on your local machine; only Docker commands and the managed desktop container run on the VPS. + +Your SSH alias should include connection multiplexing, keepalives, and a connect timeout. Connect manually once to approve the host key, then verify: + +```bash +ssh my-vps true +docker -H ssh://my-vps info +``` + +The SSH user needs Docker access, which is root-equivalent on that server. Use a dedicated VPS and firewall inbound traffic to SSH only. + +The managed container publishes no ports, has no host mounts, and is checked before every attach. Its filesystem should be treated as disposable; move important results out before deleting or upgrading the container. diff --git a/apps/docs/content/docs/computers/index.mdx b/apps/docs/content/docs/computers/index.mdx new file mode 100644 index 000000000..a03dbfa38 --- /dev/null +++ b/apps/docs/content/docs/computers/index.mdx @@ -0,0 +1,26 @@ +--- +title: Give a bot a computer +description: Choose the right desktop or isolated environment for a task. +icon: Monitor +--- + +A bot can work without a computer, use the computer running OpenMausBot, or work inside an isolated desktop. + +| Backend | Isolation | Best for | +|---|---|---| +| This computer | None | Working with local apps and files you explicitly approve | +| Local VM | Containerized desktop | Repeatable browser and desktop work on your machine | +| Box cloud computer | Hosted remote desktop | Always-available isolated Linux work | +| Self-hosted VPS | Hardened container over SSH | Using infrastructure you own | + +## Auto, local, and cloud selection + +Computer selection is explicit per bot. Auto may reuse a ready, verified backend, but it does not silently provision every backend or turn on host control. + +## Preview and takeover + +The Computer panel can show live frames while an agent works. Supported cloud desktops also provide an interactive viewer. OpenMausBot opens that viewer in the app when possible, with a browser fallback for external join flows. + + + Starting a screen preview does not grant the bot control. Local input requires a separate opt-in and remains subject to the computer-use safety boundary. + diff --git a/apps/docs/content/docs/computers/local-computer.mdx b/apps/docs/content/docs/computers/local-computer.mdx new file mode 100644 index 000000000..8cb062d62 --- /dev/null +++ b/apps/docs/content/docs/computers/local-computer.mdx @@ -0,0 +1,22 @@ +--- +title: This computer +description: Let a supported agent control the local desktop through the bundled CUA boundary. +icon: MousePointer2 +--- + +Local control is off by default. The Electron main process owns the bundled CUA driver lifecycle so operating-system permissions are attributed to OpenMausBot rather than a background helper. + +## macOS + +The packaged app can request Accessibility and Screen Recording permission. After granting either permission, restart the control session when prompted so macOS applies the new grant. + +## Ubuntu + +Ubuntu 24.04 GNOME local control is beta. Packaged builds include a pinned CUA runtime. Xorg is supported with explicit opt-in; guarded Wayland support also requires its validated GNOME helper and health checks. + +## Safety model + +- Enabling local control globally does not assign it to a bot. +- Choose **This computer** for each bot that should receive the capability. +- Risky actions still surface through the approval flow. +- Missing permissions, unexpected binaries, unsupported desktop sessions, and failed health checks fail closed. diff --git a/apps/docs/content/docs/computers/local-vm.mdx b/apps/docs/content/docs/computers/local-vm.mdx new file mode 100644 index 000000000..1be2194c8 --- /dev/null +++ b/apps/docs/content/docs/computers/local-vm.mdx @@ -0,0 +1,21 @@ +--- +title: Local VM +description: Run desktop work inside an isolated Docker or Podman environment. +icon: Box +--- + +The Local VM gives each bot a containerized Linux desktop on the same machine as OpenMausBot. It is useful for browser work, downloads, and repeatable automation that should not run directly on your host desktop. + +## Requirements + +- Docker Desktop, Docker Engine, or a supported Podman setup +- Enough local memory and disk for the desktop image +- A healthy container runtime available to the OpenMausBot process + +## Persistence + +The bot's workspace and browser profile live in a durable mounted directory. Recreating the desktop can repair stale runtime state without deleting the durable workspace. + +## Ownership and reuse + +Local VM ownership uses a renewable lease. OpenMausBot validates the resolved image and container safety contract before reuse instead of trusting only a mutable image tag. diff --git a/apps/docs/content/docs/computers/meta.json b/apps/docs/content/docs/computers/meta.json new file mode 100644 index 000000000..3e0b36eaa --- /dev/null +++ b/apps/docs/content/docs/computers/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Computers", + "icon": "Monitor", + "pages": ["index", "local-computer", "local-vm", "cloud-and-vps"] +} diff --git a/apps/docs/content/docs/connected-apps/index.mdx b/apps/docs/content/docs/connected-apps/index.mdx new file mode 100644 index 000000000..84fc0d995 --- /dev/null +++ b/apps/docs/content/docs/connected-apps/index.mdx @@ -0,0 +1,33 @@ +--- +title: Connected apps +description: Authorize Gmail, Slack, GitHub, Notion, and hundreds of other tools through Composio. +icon: PlugZap +--- + +OpenMausBot uses Composio Sessions for connected apps. You provide one Composio project key, authorize services in your normal browser, and the resulting tools become available to bots. + +### 1. Create or choose a Composio project + +Open the [Composio dashboard](https://dashboard.composio.dev), then go to **Platform → Settings → API Keys**. + +### 2. Save the project key + +Copy the key beginning with `ak_` and save it under **App Settings → Connections**. OpenMausBot validates it before saving. + +### 3. Authorize an app + +Open **Connected apps**, choose a toolkit such as Gmail or GitHub, and finish authorization in your browser. + +### 4. Use it in chat + +Ask a bot to use the connected service. The session exposes the service's tools to supported agents. + +## Credential boundary + +Provider OAuth tokens stay with Composio. OpenMausBot stores its project key and non-secret session identifiers. In packaged desktop builds, the project key is protected with Electron's operating-system-backed secure storage. + +Disconnecting an account revokes the upstream grant rather than only hiding it locally. + + + Current OpenMausBot builds use one Composio project key. The older two-key Connect setup has been removed. + diff --git a/apps/docs/content/docs/connected-apps/meta.json b/apps/docs/content/docs/connected-apps/meta.json new file mode 100644 index 000000000..e33017237 --- /dev/null +++ b/apps/docs/content/docs/connected-apps/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Connected apps", + "icon": "PlugZap", + "pages": ["index", "multiple-accounts", "self-hosted-composio"] +} diff --git a/apps/docs/content/docs/connected-apps/multiple-accounts.mdx b/apps/docs/content/docs/connected-apps/multiple-accounts.mdx new file mode 100644 index 000000000..986e417ce --- /dev/null +++ b/apps/docs/content/docs/connected-apps/multiple-accounts.mdx @@ -0,0 +1,23 @@ +--- +title: Multiple accounts +description: Connect work and personal accounts without silently replacing either one. +icon: UsersRound +--- + +OpenMausBot supports several labeled accounts for the same toolkit. This is useful for two Gmail inboxes, several Slack workspaces, or separate personal and work services. + +## Add another account + +1. Open **Connected apps**. +2. Find an already connected toolkit. +3. Choose **Add account**. +4. Enter a unique label such as `work`, `personal`, or the workspace name. +5. Complete authorization in your browser. + +When more than one account could execute a tool, the Composio session requires explicit account selection. A new authorization does not silently become the default for the old one. + +## Disconnect safely + +Each connected account appears separately with its alias and status. Disconnect removes only the chosen account and leaves the others active. + +OpenMausBot caps each toolkit at five usable accounts. If a provider or Composio project policy prevents another authorization, use a separate OpenMausBot installation or configuration rather than reauthorizing over a working account. diff --git a/apps/docs/content/docs/connected-apps/self-hosted-composio.mdx b/apps/docs/content/docs/connected-apps/self-hosted-composio.mdx new file mode 100644 index 000000000..397af1e34 --- /dev/null +++ b/apps/docs/content/docs/connected-apps/self-hosted-composio.mdx @@ -0,0 +1,31 @@ +--- +title: Composio for self-hosters +description: Configure project-key access, scoped permissions, and headless development. +icon: KeyRound +--- + +The simplest open-source setup is for each installation owner to create a Composio project and paste that project's key into OpenMausBot. This avoids operating a shared credential broker and keeps usage attached to the user's own Composio account. + +## Least-privilege scoped key + +If you use a scoped Composio project key, grant: + +- Sessions: read and write +- Toolkits: read +- Connected accounts: read and write + +Connected-account write access is required for upstream revocation during disconnect. + +## Source and headless runs + +Set the key on the harness process: + +```bash +COMPOSIO_API_KEY=ak_your_project_key pnpm dev:server +``` + +OpenMausBot creates a stable random Composio user identifier and reuses the returned Session. It does not store raw Gmail, Slack, GitHub, or other provider tokens. + +## Managed broker + +The repository also contains a Cloudflare Worker broker for managed deployments. It returns the same account-aware inventory shape while keeping broker credentials out of the renderer. Use it only when you intentionally operate a hosted connection service; it is not required for ordinary self-hosting. diff --git a/apps/docs/content/docs/contributing/documentation.mdx b/apps/docs/content/docs/contributing/documentation.mdx new file mode 100644 index 000000000..30222ac12 --- /dev/null +++ b/apps/docs/content/docs/contributing/documentation.mdx @@ -0,0 +1,44 @@ +--- +title: Writing documentation +description: Add and review Fumadocs pages in the same pull request as the feature. +icon: FilePenLine +--- + +Public documentation lives in `apps/docs/content/docs`. Internal design notes and implementation plans can remain in the repository's top-level `docs` folder. + +## Add a page + +Create a `.mdx` file with a title and description: + +```mdx +--- +title: Feature name +description: One sentence that says what the reader will learn. +--- + +Explain the user outcome first. +``` + +Add the page filename to the nearest `meta.json` so it appears in navigation. + +## Preview locally + +From the repository root: + +```bash +pnpm docs:dev +``` + +Open `http://localhost:3000`. Before submitting: + +```bash +pnpm docs:build +``` + +## Documentation standard + +- Describe shipped behavior, not an open PR as though it has been released. +- Lead with user outcomes and include exact recovery steps for known failure modes. +- State platform and security boundaries plainly. +- Prefer links to stable public docs over duplicating long internal design records. +- Update the changelog only when a release is actually published. diff --git a/apps/docs/content/docs/contributing/index.mdx b/apps/docs/content/docs/contributing/index.mdx new file mode 100644 index 000000000..ae7e22a87 --- /dev/null +++ b/apps/docs/content/docs/contributing/index.mdx @@ -0,0 +1,29 @@ +--- +title: Contributing +description: Work with the project architecture and keep changes reviewable. +icon: GitPullRequest +--- + +OpenMausBot welcomes focused fixes and features. Read the repository's [CONTRIBUTING.md](https://github.com/milind-soni/OpenMausBot/blob/main/CONTRIBUTING.md) before opening a pull request. + +## Before building + +- Search open and recently merged issues and pull requests. +- Link overlapping work and coordinate with the current contributor. +- Extend the existing harness, renderer, companion, and provider boundaries instead of adding a parallel system. +- Open an issue before a large cross-platform change. + +## Local checks + +```bash +pnpm typecheck +pnpm test +pnpm build +pnpm check:electron +``` + +Run the platform-specific package or native tests when your change touches macOS, Windows, Ubuntu, Cloudflare, or iOS. + +## Keep PRs narrow + +One concern per pull request is easier to review, test, revert, and release. Large prototypes are useful integration branches, but upstream submissions should be split into independently green slices. diff --git a/apps/docs/content/docs/contributing/meta.json b/apps/docs/content/docs/contributing/meta.json new file mode 100644 index 000000000..e85a75254 --- /dev/null +++ b/apps/docs/content/docs/contributing/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Contributing", + "icon": "GitPullRequest", + "pages": ["index", "documentation"] +} diff --git a/apps/docs/content/docs/features/automation.mdx b/apps/docs/content/docs/features/automation.mdx new file mode 100644 index 000000000..1996071df --- /dev/null +++ b/apps/docs/content/docs/features/automation.mdx @@ -0,0 +1,27 @@ +--- +title: Routines and webhooks +description: Start fresh agent tasks on a schedule or from an external event. +icon: CalendarClock +--- + +## Routines + +A routine runs once or on selected weekdays. Each run starts a fresh task using the selected bot's model, permissions, tools, and computer configuration. + +Run receipts distinguish queued, active, waiting, completed, missed, failed, and cancelled work. OpenMausBot must be running when a local routine becomes due. + +## Webhook triggers + +Webhooks start the same queued task executor from an external HTTP request. They are independent from schedules and use a dedicated receiver on `127.0.0.1:8800` by default. + +The receiver exposes only health and secret hook routes. It does not expose the broader OpenMausBot API. + +Bearer authentication is preferred because it keeps the secret out of URLs and most access logs. A capability URL is available for senders that cannot set headers. + +## Reaching a local webhook + +To accept events from the public internet, proxy only the webhook receiver through a narrowly configured relay or tunnel. Do not expose the main harness port. + + + Local routines and webhook deliveries are not hosted jobs. Closing the desktop app stops the local executor and receiver. + diff --git a/apps/docs/content/docs/features/chat-and-teams.mdx b/apps/docs/content/docs/features/chat-and-teams.mdx new file mode 100644 index 000000000..0370f3aa9 --- /dev/null +++ b/apps/docs/content/docs/features/chat-and-teams.mdx @@ -0,0 +1,27 @@ +--- +title: Chat, tasks, rooms, and teams +description: Organize agents like contacts and let them collaborate without losing control of each task. +icon: MessagesSquare +--- + +## Bots and tasks + +A bot is a durable agent identity. A task is one conversation with that bot and has its own transcript, provider session, approvals, costs, and state. + +Use separate tasks when you want fresh context without duplicating the bot. Messages sent while a bot is busy are queued, and supported providers can be steered while they work. + +## Rooms + +Rooms bring several bots into one conversation. Each participant keeps its own agent process and provider state. Room timeouts prevent a participant from blocking the whole group indefinitely. + +## Delegation + +Bots can hand work to other bots. Delegated runs carry explicit status back into the parent conversation, including completion, failure, and cancellation. + +## Rewind and branches + +Editing an earlier message creates a new conversation path. OpenMausBot avoids resuming stale provider sessions after a rewind, so the next turn follows the visible branch rather than hidden abandoned state. + +## Memory and working folders + +Bot memory is visible and editable. A bot may also have a dedicated working folder; rooms can use a shared working folder. Cloud workspaces use a stable default so generated files remain discoverable across tasks. diff --git a/apps/docs/content/docs/features/index.mdx b/apps/docs/content/docs/features/index.mdx new file mode 100644 index 000000000..f77013465 --- /dev/null +++ b/apps/docs/content/docs/features/index.mdx @@ -0,0 +1,52 @@ +--- +title: Feature overview +description: A map of the capabilities currently available in OpenMausBot. +icon: Sparkles +--- + +OpenMausBot turns agent CLIs into a messaging-style workspace. The harness normalizes each provider into one event stream, so the interface can treat different agents consistently while preserving their native strengths. + +## Agents and conversations + +- A separate bot for each role, model, personality, and working folder +- Streaming responses with live tool activity +- Multiple tasks per bot, with searchable, persistent transcript history +- Edit, branch, rewind, pin, react, export, and share conversation content +- Rooms for multi-agent collaboration and explicit bot-to-bot delegation +- Queueing and steering while an agent is already working +- Per-task token and cost visibility +- Readable, editable bot memory + +## Computers and tools + +- Local computer control with explicit opt-in and approval boundaries +- Isolated Local VM desktops through Docker or Podman +- Hosted Box cloud computers +- A self-hosted Linux VPS backend over Docker's SSH transport +- Live previews and in-app desktop takeover where the backend supports it +- USB Android control through the Phone Harness skill +- Connected apps through Composio, including multiple labeled accounts per toolkit + +## Automation + +- One-time and weekday routines +- Webhook-triggered tasks with dedicated secret endpoints +- Fresh task context and durable run receipts for each automated run +- Notifications for work that needs attention + +## Voice and access + +- Spoken replies and per-bot ElevenLabs voices +- Native macOS dictation and half-duplex call mode +- Paired iOS companion with chat, approvals, search, transcript controls, and opt-in computer viewing + +## Desktop experience + +- macOS, Windows, and Ubuntu packages +- Theme switching and accessible contrast +- Sidebar sections, compact headers, pinned messages, spoilers, and image attachments +- Automatic updates on macOS and Windows + + + macOS has the broadest native integration. Ubuntu local control is a guarded beta, Windows installers are not yet signed, and the iOS companion keeps sensitive workspace configuration on the computer. + diff --git a/apps/docs/content/docs/features/meta.json b/apps/docs/content/docs/features/meta.json new file mode 100644 index 000000000..ffc2817aa --- /dev/null +++ b/apps/docs/content/docs/features/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Features", + "icon": "Sparkles", + "pages": ["index", "chat-and-teams", "automation", "voice-and-memory"] +} diff --git a/apps/docs/content/docs/features/voice-and-memory.mdx b/apps/docs/content/docs/features/voice-and-memory.mdx new file mode 100644 index 000000000..d63b6c0dc --- /dev/null +++ b/apps/docs/content/docs/features/voice-and-memory.mdx @@ -0,0 +1,25 @@ +--- +title: Voice, dictation, and memory +description: Listen to agents, talk to them, and inspect what they remember. +icon: AudioLines +--- + +## Spoken replies + +Add an ElevenLabs key in App Settings, choose a voice, and use the speaker control on a response. Auto-speak can read new replies as they arrive. + +The harness rewrites code-heavy Markdown into speech-friendly text before synthesis. Keys remain on the harness and never reach the renderer. + +## Call mode + +On macOS, call mode combines native on-device speech recognition with the configured ElevenLabs voice. It is deliberately half-duplex: the microphone pauses while the bot speaks to prevent the app from transcribing its own audio. + +Tool progress and approval requests can be narrated during a call so long-running work does not sound disconnected. + +## Dictation + +The composer microphone uses Apple's local speech recognition in the macOS desktop build. Linux and Windows dictation are not currently shipped. + +## Memory + +Each bot can keep plain-text memory that you can inspect, correct, or delete. Memory is not a hidden remote profile; it lives with the local OpenMausBot data. diff --git a/apps/docs/content/docs/getting-started/configuration.mdx b/apps/docs/content/docs/getting-started/configuration.mdx new file mode 100644 index 000000000..bb425e9dd --- /dev/null +++ b/apps/docs/content/docs/getting-started/configuration.mdx @@ -0,0 +1,37 @@ +--- +title: Configuration +description: Understand engine paths, credentials, and the local configuration boundary. +icon: Settings +--- + +Most users configure OpenMausBot from the app. The packaged desktop validates credentials before saving them and stores supported secrets with the operating system's secure storage. + +## Engine discovery + +OpenMausBot checks the inherited process path, common install locations, and the login shell. If an engine is installed somewhere unusual, open **Settings → Engines** and choose its executable explicitly. + +Explicit paths are useful when you: + +- keep multiple CLI versions; +- use a wrapper script; +- installed an engine in a directory desktop apps cannot discover; or +- launch OpenMausBot from a Windows shortcut or Linux application menu with a different environment from your terminal. + +## Optional credentials + +| Credential | Enables | +|---|---| +| Composio project key | Connected apps and OAuth sessions | +| Box API key | Hosted Linux computers | +| ElevenLabs API key | Spoken replies and voice mode | +| OpenCode Go API key | OpenCode Go engine | + +Local agent chat works without these credentials. + +## Environment configuration + +Source and headless runs can set supported environment variables before starting the harness. The app-level settings are preferable for normal packaged use because they validate inputs and keep secret values out of the renderer. + + + A prompt becomes conversation history and may be sent to an agent provider. Use App Settings or environment configuration for credentials. + diff --git a/apps/docs/content/docs/getting-started/first-bot.mdx b/apps/docs/content/docs/getting-started/first-bot.mdx new file mode 100644 index 000000000..807404305 --- /dev/null +++ b/apps/docs/content/docs/getting-started/first-bot.mdx @@ -0,0 +1,41 @@ +--- +title: Your first bot +description: Create a bot, choose its model, and send a useful first task. +icon: Bot +--- + +## Before you begin + +Confirm that at least one engine is available in the model picker. If every engine is dimmed, finish the provider's CLI sign-in and restart OpenMausBot. + +### 1. Create a bot + +Use the add button in the sidebar, give the bot a clear name, and describe the role you want it to play. + +### 2. Pick an engine and model + +Open the model picker in the conversation header. Choose an available provider and model. You can change this later without creating another bot. + +### 3. Decide where it can work + +Start with no computer for research and coding on your local workspace. Choose a computer only when the task needs a desktop, browser, or isolated environment. + +### 4. Send a concrete task + +Include the outcome, relevant files or services, and any constraints. OpenMausBot streams progress and shows approvals or questions in the chat. + +## A good first message + +```text +Review this repository, explain its architecture in plain language, +and list the three highest-impact improvements. Do not edit anything yet. +``` + +This tests model access, streaming, workspace visibility, and approval behavior without making changes. + +## Add more capability later + +- [Connect apps](../connected-apps/index.mdx) when the bot needs Gmail, Slack, GitHub, Notion, or another service. +- [Choose a computer](../computers/index.mdx) when it needs a browser or desktop. +- Create a room when several specialized bots should work together. +- Turn a repeatable request into a routine or webhook trigger. diff --git a/apps/docs/content/docs/getting-started/installation.mdx b/apps/docs/content/docs/getting-started/installation.mdx new file mode 100644 index 000000000..75651dbec --- /dev/null +++ b/apps/docs/content/docs/getting-started/installation.mdx @@ -0,0 +1,54 @@ +--- +title: Installation +description: Install OpenMausBot on macOS, Windows, or Ubuntu. +icon: Download +--- + +## Download a released build + +Choose the package for your computer from the [latest release](https://github.com/milind-soni/openmausbot-releases/releases/latest). + +| Platform | Recommended package | Notes | +|---|---|---| +| macOS Apple silicon | `OpenMausBot.dmg` | Signed and notarized. Drag to Applications. | +| macOS Intel | `OpenMausBot-intel.dmg` | Signed and notarized. | +| Windows x64 | `OpenMausBot-setup.exe` | Per-user installer; Windows signing is not yet available. | +| Ubuntu 24.04 x64 | `OpenMausBot-amd64.deb` | Recommended Ubuntu package; the AppImage is portable. | + + + The Windows installer is not code-signed yet. Windows may show “Unknown publisher.” Verify that you downloaded it from the official OpenMausBot releases repository before choosing **More info → Run anyway**. + + +## Install an agent CLI + +OpenMausBot needs at least one supported agent engine installed and signed in. Claude and Codex are the most common starting points. + +1. Install the CLI from its official provider. +2. Run it once in a terminal and complete sign-in. +3. Restart OpenMausBot. +4. Open the model picker. Available engines appear normally; unavailable engines explain what is missing. + +See [Agent engines](../providers/index.mdx) for the complete list and explicit path overrides. + +## Build from source + +Requirements: Node.js 24 or newer, pnpm 10.33.0, and at least one authenticated agent CLI. + +```bash +git clone https://github.com/milind-soni/OpenMausBot.git +cd OpenMausBot +corepack enable +pnpm install --frozen-lockfile +``` + +Run the harness, web UI, and Electron shell in separate terminals: + +```bash +pnpm dev:server +pnpm dev +pnpm dev:desktop +``` + +## Where data lives + +OpenMausBot stores its application data under `~/.openmausbot`. Electron window and browser data use the normal per-platform application data directory. diff --git a/apps/docs/content/docs/getting-started/meta.json b/apps/docs/content/docs/getting-started/meta.json new file mode 100644 index 000000000..6996e0964 --- /dev/null +++ b/apps/docs/content/docs/getting-started/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Getting started", + "icon": "Rocket", + "pages": ["installation", "first-bot", "configuration"] +} diff --git a/apps/docs/content/docs/index.mdx b/apps/docs/content/docs/index.mdx new file mode 100644 index 000000000..22d9547fa --- /dev/null +++ b/apps/docs/content/docs/index.mdx @@ -0,0 +1,37 @@ +--- +title: OpenMausBot documentation +description: Everything you need to run, configure, and contribute to your local-first team of AI agents. +icon: BookOpen +--- + +OpenMausBot is a desktop chat app where every contact is a real AI agent. Each bot can have its own model, personality, tasks, connected apps, and computer. + + + + + + + + +## The short version + +- **Bring your own agents.** OpenMausBot runs supported agent CLIs installed and authenticated on your machine. +- **Local first.** Conversations, credentials, configuration, and agent processes stay on your computer by default. +- **Agents with hands.** Give a bot a local computer, an isolated VM, a cloud desktop, or a hardened VPS container. +- **Approval aware.** Risky actions and questions appear as cards in the conversation. +- **Open source.** The source is available under Apache License 2.0. + + + OpenMausBot is moving quickly. Use the changelog for release-level changes and the GitHub repository for work that has not shipped yet. + + +## Choose your path + +| I want to… | Start here | +|---|---| +| Install the desktop app | [Installation](./getting-started/installation.mdx) | +| Use Claude, Codex, Cursor, Grok, or another engine | [Agent engines](./providers/index.mdx) | +| Let a bot use a computer | [Computers](./computers/index.mdx) | +| Connect Gmail, Slack, GitHub, or Notion | [Connected apps](./connected-apps/index.mdx) | +| Reach my bots from iPhone | [iOS companion](./mobile/ios-companion.mdx) | +| Build from source or contribute | [Contributing](./contributing/index.mdx) | diff --git a/apps/docs/content/docs/meta.json b/apps/docs/content/docs/meta.json new file mode 100644 index 000000000..1169632b5 --- /dev/null +++ b/apps/docs/content/docs/meta.json @@ -0,0 +1,17 @@ +{ + "title": "OpenMausBot", + "root": true, + "pages": [ + "index", + "getting-started", + "features", + "providers", + "computers", + "connected-apps", + "mobile", + "self-hosting", + "security", + "changelog", + "contributing" + ] +} diff --git a/apps/docs/content/docs/mobile/android-control.mdx b/apps/docs/content/docs/mobile/android-control.mdx new file mode 100644 index 000000000..9a9b46264 --- /dev/null +++ b/apps/docs/content/docs/mobile/android-control.mdx @@ -0,0 +1,16 @@ +--- +title: USB Android control +description: Let a bot inspect and operate a physically connected Android phone. +icon: Cable +--- + +OpenMausBot can expose a USB-connected Android device through its Phone Harness skill. A supported agent can inspect the screen, open apps, tap, type, swipe, scroll, and capture screenshots. + +## Requirements + +- A physical Android device connected over USB +- USB debugging enabled on the device +- The computer trusted from the device's debugging prompt +- The packaged Android platform tools or a compatible local ADB installation + +Phone access is a separate capability from desktop computer use. Keep the device unlocked and visible while testing, and review actions that may send messages, change accounts, or expose private content. diff --git a/apps/docs/content/docs/mobile/ios-companion.mdx b/apps/docs/content/docs/mobile/ios-companion.mdx new file mode 100644 index 000000000..97ff0994d --- /dev/null +++ b/apps/docs/content/docs/mobile/ios-companion.mdx @@ -0,0 +1,36 @@ +--- +title: iOS companion +description: Pair an iPhone directly with the OpenMausBot instance running on your computer. +icon: Smartphone +--- + +The native iOS companion is a thin client. Your computer remains the only machine that owns agent processes, credentials, transcripts, SQLite data, and computers. + +## What it can do + +- Discover and pair on the same LAN, or connect through Tailscale +- List bots and rooms, read paged transcripts, send messages, and interrupt work +- Answer approvals and questions, including narrow always-allow grants +- Search, manage tasks, react, share, and navigate message versions +- Follow resumable live updates and optionally view a bot's cloud computer + +## Pairing + +The desktop opens a two-minute pairing window with a high-entropy QR credential and a six-digit manual fallback. Redeeming either closes the window and returns a separate per-device token stored in iOS Keychain. + +The computer stores only a digest of the device token. Revoking the phone from desktop Settings invalidates future requests. + +## Network options + +- **Same trusted Wi-Fi:** Bonjour discovery and direct HTTP. +- **Away from home:** Tailscale on both devices with the computer's MagicDNS name. + +There is no hosted OpenMausBot relay. Bonjour does not cross Tailscale, so remote connections use manual address entry. + +## Security boundary + +The companion sidecar uses a default-deny route allowlist. Provider keys, pairing administration, Local VM lifecycle, webhook secrets, team import/export, and internal peer-agent routes remain unreachable from the phone. + + + Live and replayed events can produce alerts while the companion is connected, but a terminated iOS app cannot be awakened without a future APNs relay. + diff --git a/apps/docs/content/docs/mobile/meta.json b/apps/docs/content/docs/mobile/meta.json new file mode 100644 index 000000000..9889ac83c --- /dev/null +++ b/apps/docs/content/docs/mobile/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Mobile", + "icon": "Smartphone", + "pages": ["ios-companion", "android-control"] +} diff --git a/apps/docs/content/docs/providers/index.mdx b/apps/docs/content/docs/providers/index.mdx new file mode 100644 index 000000000..75599762c --- /dev/null +++ b/apps/docs/content/docs/providers/index.mdx @@ -0,0 +1,39 @@ +--- +title: Agent engines +description: Use the agent subscriptions and CLIs you already have. +icon: BrainCircuit +--- + +OpenMausBot does not proxy every message through its own model account. It starts supported agent CLIs on your computer and normalizes their output through the local harness. + +## Built-in engines + +| Engine | Authentication shape | Notes | +|---|---|---| +| Claude | Claude CLI login | Strong support for tools, approvals, sessions, and local computer use | +| Codex | Codex CLI login | Model discovery, approvals, steering, and computer tools | +| Grok | Grok CLI login | ACP-based local model catalog and session support | +| Cursor | Cursor Agent CLI login or API key | ACP driver with live model discovery | +| Kimi | Kimi CLI login | ACP integration | +| Droid | Factory Droid CLI login | ACP integration | +| Antigravity | Google Antigravity CLI login | Default Google consumer engine | +| OpenCode Go | API key | ACP integration | +| Qwen | Qwen CLI login | ACP integration | +| Hermes | Hermes CLI login | ACP integration | +| Pi | Pi CLI login | Native driver | + +Additional driver instances can be declared in local configuration. Unavailable engines remain visible with a reason instead of crashing the provider fleet. + +## Detection + +OpenMausBot checks common installation directories and the login shell in the background. Restart the app after installing or authenticating a CLI. + +If detection fails, use **Settings → Engines** to set an explicit executable path. This is supported for every engine and is the most reliable solution for version managers, wrappers, custom builds, and Windows installations outside the normal path. + +## Model selection + +The model picker groups models by provider and marks defaults. Supported engines can refresh their model catalog from the installed CLI. Changing the model affects future turns; it does not rewrite earlier transcript history. + + + Your existing CLI login or provider API key determines access and billing. OpenMausBot does not turn one subscription into access to another provider. + diff --git a/apps/docs/content/docs/providers/meta.json b/apps/docs/content/docs/providers/meta.json new file mode 100644 index 000000000..4c763775c --- /dev/null +++ b/apps/docs/content/docs/providers/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Agent engines", + "icon": "BrainCircuit", + "pages": ["index", "troubleshooting"] +} diff --git a/apps/docs/content/docs/providers/troubleshooting.mdx b/apps/docs/content/docs/providers/troubleshooting.mdx new file mode 100644 index 000000000..8e25b0747 --- /dev/null +++ b/apps/docs/content/docs/providers/troubleshooting.mdx @@ -0,0 +1,31 @@ +--- +title: Engine troubleshooting +description: Fix missing CLIs, failed authentication, model errors, and path differences. +icon: Wrench +--- + +## “CLI not found” + +1. Open a terminal and run the CLI directly. +2. Confirm the command is an executable, not only a shell alias or function. +3. Restart OpenMausBot after installation. +4. Set the exact executable in **Settings → Engines** if automatic detection still fails. + +Desktop applications often inherit a different environment than a terminal. This is common on Windows shortcuts, macOS Finder launches, and Linux application menus. + +## Authentication failures + +Run the provider's own status or login command in a terminal. OpenMausBot uses the CLI's authenticated session; installing the binary alone is not enough. + +A `401 Unauthorized` response from `api.openai.com` means the launched Codex process did not receive valid authentication. Confirm `codex login status`, sign in again if needed, then restart OpenMausBot. Do not paste a ChatGPT password into OpenMausBot. + +## A selected model fails + +- Refresh the model picker after updating the CLI. +- Choose a model actually available to that provider account. +- Confirm a custom wrapper forwards the model argument and preserves the provider's expected environment. +- Try the provider CLI directly with the same model to separate an account problem from an OpenMausBot integration problem. + +## Windows notes + +Use a real `.exe`, `.cmd`, or resolvable command path in the engine override. If a CLI was installed in WSL, the Windows desktop app cannot treat that Linux binary as a native Windows executable without an explicit bridge or wrapper. diff --git a/apps/docs/content/docs/security/index.mdx b/apps/docs/content/docs/security/index.mdx new file mode 100644 index 000000000..7b223321e --- /dev/null +++ b/apps/docs/content/docs/security/index.mdx @@ -0,0 +1,27 @@ +--- +title: Security model +description: The boundaries that keep agents, credentials, computers, and paired devices scoped. +icon: ShieldCheck +--- + +OpenMausBot is designed around a local owner, explicit capabilities, and narrow process boundaries. Local-first does not mean risk-free: an agent with tool or computer access can still act on the resources you grant it. + +## Core boundaries + +- The harness owns agent processes and listens on loopback. +- The renderer receives configured-or-not credential state, not secret values. +- Provider-specific credentials are injected only into the process that needs them. +- Risky actions become approval cards rather than implicit permission. +- Local computer control is a separate opt-in and per-bot selection. +- Paired phones use a default-deny API allowlist and per-device bearer tokens. +- Cloud and VPS backends are validated before reuse. + +## Your responsibility + +- Review approvals, especially shell commands, file writes, and actions in connected services. +- Use dedicated environments for untrusted or destructive work. +- Keep provider accounts and connected apps scoped to what a bot needs. +- Revoke lost companion devices immediately. +- Keep OpenMausBot and agent CLIs updated. + +Security reports should be filed through the repository's documented security channel rather than disclosed in a public issue before a fix is available. diff --git a/apps/docs/content/docs/security/meta.json b/apps/docs/content/docs/security/meta.json new file mode 100644 index 000000000..7966c0272 --- /dev/null +++ b/apps/docs/content/docs/security/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Security", + "icon": "ShieldCheck", + "pages": ["index", "permissions-and-secrets"] +} diff --git a/apps/docs/content/docs/security/permissions-and-secrets.mdx b/apps/docs/content/docs/security/permissions-and-secrets.mdx new file mode 100644 index 000000000..800275826 --- /dev/null +++ b/apps/docs/content/docs/security/permissions-and-secrets.mdx @@ -0,0 +1,27 @@ +--- +title: Permissions and secrets +description: How approvals, operating-system grants, and provider credentials are handled. +icon: KeyRound +--- + +## Approval cards + +Supported providers emit permission requests and questions through the local harness. OpenMausBot displays these inline and records the outcome. Cancellation closes outstanding requests so stale approvals cannot be answered after a turn has ended. + +“Always allow” is narrow: it is tied to a server-issued key and a pending request rather than granting arbitrary execution from a paired device. + +## Operating-system permissions + +Screen Recording and Accessibility permissions are controlled by the operating system. The desktop process owns local CUA lifecycle so grants are attributed to OpenMausBot. + +## Secret handling + +- Do not paste API keys into chat. +- Packaged builds use write-only settings and operating-system-backed encryption where supported. +- Secret values are scrubbed from public configuration responses and mobile APIs. +- Per-provider environment injection prevents unrelated agent processes from inheriting credentials they do not use. +- OAuth provider tokens for connected apps stay with Composio. + +## Shared machines + +OpenMausBot assumes the logged-in operating-system user is the workspace owner. On a shared machine, other administrators may be able to read application data or inspect processes. Use a dedicated OS account for stronger separation. diff --git a/apps/docs/content/docs/self-hosting/data-and-backups.mdx b/apps/docs/content/docs/self-hosting/data-and-backups.mdx new file mode 100644 index 000000000..f0e96cdba --- /dev/null +++ b/apps/docs/content/docs/self-hosting/data-and-backups.mdx @@ -0,0 +1,19 @@ +--- +title: Data and backups +description: Know what OpenMausBot stores locally and what to preserve. +icon: DatabaseBackup +--- + +OpenMausBot keeps its application state under `~/.openmausbot`, including configuration, transcripts, message attachments, device pairing state, and the SQLite message store. + +## Back up + +Close OpenMausBot before taking a filesystem-level backup so SQLite and configuration files are captured consistently. Preserve the entire `.openmausbot` directory rather than selecting individual database files. + +## Do not copy secrets casually + +Packaged desktop builds may protect credentials using operating-system secure storage. Copying the JSON directory to another machine does not necessarily make protected credentials usable there, and it should not be treated as a portable credential export. + +## Disposable computer filesystems + +Local VM workspaces are mounted durably, but a self-hosted VPS container filesystem is intentionally disposable. Move important artifacts to a durable workspace, repository, or connected app before removing or upgrading a container. diff --git a/apps/docs/content/docs/self-hosting/index.mdx b/apps/docs/content/docs/self-hosting/index.mdx new file mode 100644 index 000000000..4315025e9 --- /dev/null +++ b/apps/docs/content/docs/self-hosting/index.mdx @@ -0,0 +1,35 @@ +--- +title: Self-hosting OpenMausBot +description: Run the harness and desktop app on infrastructure you control. +icon: Server +--- + +OpenMausBot is local-first by default: the harness listens on loopback, agent CLIs run on your machine, and application state lives under `~/.openmausbot`. + +## Typical self-hosted setup + +1. Run OpenMausBot on your personal macOS, Windows, or Ubuntu computer. +2. Install and authenticate the agent CLIs you want to use. +3. Add optional third-party keys only for the services you need. +4. Keep the harness on loopback. +5. Use the paired companion sidecar or Tailscale when another device needs access. + +## What is still third party + +Self-hosting OpenMausBot does not self-host every optional provider: + +- Agent providers authenticate and bill through their own CLI or API. +- Composio owns connected-app OAuth grants unless you replace that integration. +- Box owns managed cloud computers. +- ElevenLabs synthesizes speech when voice is enabled. + +These services are optional. Local chat through a locally installed agent CLI does not require them. + +## Run headless during development + +```bash +pnpm install --frozen-lockfile +pnpm dev:server +``` + +The main harness listens on `127.0.0.1:8799` by default. Keep it private; it owns agent processes, approvals, computers, and workspace configuration. diff --git a/apps/docs/content/docs/self-hosting/meta.json b/apps/docs/content/docs/self-hosting/meta.json new file mode 100644 index 000000000..3161a3d1a --- /dev/null +++ b/apps/docs/content/docs/self-hosting/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Self-hosting", + "icon": "Server", + "pages": ["index", "networking", "data-and-backups"] +} diff --git a/apps/docs/content/docs/self-hosting/networking.mdx b/apps/docs/content/docs/self-hosting/networking.mdx new file mode 100644 index 000000000..06ba34a1f --- /dev/null +++ b/apps/docs/content/docs/self-hosting/networking.mdx @@ -0,0 +1,24 @@ +--- +title: Networking +description: Understand the harness, webhook, and companion network boundaries. +icon: Network +--- + +OpenMausBot separates its network surfaces by trust level. + +| Surface | Default bind | Purpose | +|---|---|---| +| Harness | `127.0.0.1:8799` | Full app API and event stream | +| Webhook receiver | `127.0.0.1:8800` | Health and secret hook endpoints only | +| Companion sidecar | `0.0.0.0:8810` when enabled | Paired-device, token-authenticated allowlist | +| Companion control | `127.0.0.1:8811` | Pairing and device administration | + +## Remote access + +Use the companion sidecar rather than exposing the harness. Tailscale is the recommended remote route because it encrypts and authenticates the network path without making the machine public. + +For webhook delivery, proxy only the dedicated webhook receiver. Never forward the main harness port to the public internet. + +## Port overrides + +Source and advanced deployments can change documented ports with the relevant environment settings. When the default harness port is occupied, packaged builds may fall back to another local port and communicate the selected address internally. diff --git a/apps/docs/lib/layout.shared.tsx b/apps/docs/lib/layout.shared.tsx new file mode 100644 index 000000000..18c13fd9a --- /dev/null +++ b/apps/docs/lib/layout.shared.tsx @@ -0,0 +1,16 @@ +import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared'; +import { appName, gitConfig } from './shared'; + +export function baseOptions(): BaseLayoutProps { + return { + nav: { + title: appName, + transparentMode: 'top', + }, + links: [ + { text: 'Changelog', url: '/docs/changelog' }, + { text: 'Download', url: 'https://github.com/milind-soni/openmausbot-releases/releases/latest', external: true }, + ], + githubUrl: `https://github.com/${gitConfig.user}/${gitConfig.repo}`, + }; +} diff --git a/apps/docs/lib/shared.ts b/apps/docs/lib/shared.ts new file mode 100644 index 000000000..359ea2611 --- /dev/null +++ b/apps/docs/lib/shared.ts @@ -0,0 +1,10 @@ +export const appName = 'OpenMausBot'; +export const docsRoute = '/docs'; +export const docsImageRoute = '/og/docs'; +export const docsContentRoute = '/llms.mdx/docs'; + +export const gitConfig = { + user: 'milind-soni', + repo: 'OpenMausBot', + branch: 'main', +}; diff --git a/apps/docs/lib/source.ts b/apps/docs/lib/source.ts new file mode 100644 index 000000000..1c4878ec0 --- /dev/null +++ b/apps/docs/lib/source.ts @@ -0,0 +1,45 @@ +import { loader } from 'fumadocs-core/source'; +import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons'; +import { docsContentRoute, docsImageRoute, docsRoute } from './shared'; +import { defineDocs } from 'fumadocs-mdx/macro'; +import { metaSchema, pageSchema } from 'fumadocs-core/source/schema'; + +const docs = defineDocs({ + dir: 'content/docs', + docs: { + schema: pageSchema, + postprocess: { + includeProcessedMarkdown: true, + }, + }, + meta: { + schema: metaSchema, + }, +}); + +export const source = loader({ + baseUrl: docsRoute, + source: docs.toFumadocsSource(), + plugins: [lucideIconsPlugin()], +}); + +export function getPageImageUrl(page: (typeof source)['$inferPage']) { + const segments = [...page.slugs, 'image.png']; + return { + segments, + url: '/' + [page.locale, ...docsImageRoute.split('/'), ...segments].filter(Boolean).join('/'), + }; +} + +export function getPageMarkdownUrl(page: (typeof source)['$inferPage']) { + const segments = [...page.slugs, 'content.md']; + return { + segments, + url: '/' + [page.locale, ...docsContentRoute.split('/'), ...segments].filter(Boolean).join('/'), + }; +} + +export async function getLLMText(page: (typeof source)['$inferPage']) { + const processed = await page.data.getText('processed'); + return `# ${page.data.title} (${page.url})\n\n${processed}`; +} diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs new file mode 100644 index 000000000..219f24dee --- /dev/null +++ b/apps/docs/next.config.mjs @@ -0,0 +1,11 @@ +import { createMDX } from 'fumadocs-mdx/next'; + +const withMDX = createMDX(); + +/** @type {import('next').NextConfig} */ +const config = { + output: 'export', + reactStrictMode: true, +}; + +export default withMDX(config); diff --git a/apps/docs/package.json b/apps/docs/package.json new file mode 100644 index 000000000..7fd5a4ced --- /dev/null +++ b/apps/docs/package.json @@ -0,0 +1,35 @@ +{ + "name": "@openmausbot/docs", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "next build", + "dev": "next dev", + "start": "serve out", + "types:check": "next typegen && tsc --noEmit", + "lint": "oxlint .", + "preview": "serve out" + }, + "dependencies": { + "cnfast": "^0.1.0", + "fumadocs-core": "16.14.5", + "fumadocs-mdx": "15.3.0", + "fumadocs-ui": "npm:@fumadocs/base-ui@16.14.5", + "lucide-react": "^1.31.0", + "next": "16.3.2", + "react": "^19.2.8", + "react-dom": "^19.2.8" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.3.3", + "@types/mdx": "^2.0.14", + "@types/node": "^26.2.0", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.4", + "oxlint": "^1.78.0", + "postcss": "^8.5.26", + "serve": "^14.2.6", + "tailwindcss": "^4.3.3", + "typescript": "^6.0.3" + } +} diff --git a/apps/docs/postcss.config.mjs b/apps/docs/postcss.config.mjs new file mode 100644 index 000000000..297374d80 --- /dev/null +++ b/apps/docs/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; + +export default config; diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json new file mode 100644 index 000000000..d1006d700 --- /dev/null +++ b/apps/docs/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "paths": { + "@/*": ["./*"] + }, + "plugins": [{ "name": "next" }] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": ["node_modules"] +} diff --git a/package.json b/package.json index 38f940417..29d66525e 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,9 @@ "lint": "oxlint .", "check:contrast": "node scripts/check-contrast.mjs", "dev": "vite", + "docs:dev": "pnpm --filter @openmausbot/docs dev", + "docs:build": "pnpm --filter @openmausbot/docs build", + "docs:preview": "pnpm --filter @openmausbot/docs preview", "companion": "node --experimental-strip-types companion/src/index.ts", "dev:server": "node --experimental-strip-types server/index.ts", "dev:desktop": "electron .", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c87fc3ddc..4ec265276 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,7 +50,7 @@ importers: version: 1.78.0 '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.3.3(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + version: 4.3.3(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0)) '@types/node': specifier: ^26.2.0 version: 26.2.0 @@ -62,7 +62,7 @@ importers: version: 19.2.4(@types/react@19.2.18) '@vitejs/plugin-react': specifier: ^4.7.0 - version: 4.7.0(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + version: 4.7.0(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0)) electron: specifier: ^43.4.0 version: 43.4.0 @@ -86,16 +86,78 @@ importers: version: 5.9.3 vite: specifier: ^7.1.0 - version: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + version: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0) vitest: specifier: ^4.1.10 - version: 4.1.10(@types/node@26.2.0)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + version: 4.1.10(@types/node@26.2.0)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0)) wrangler: specifier: 4.123.0 version: 4.123.0(@cloudflare/workers-types@5.20260818.1) + apps/docs: + dependencies: + cnfast: + specifier: ^0.1.0 + version: 0.1.0 + fumadocs-core: + specifier: 16.14.5 + version: 16.14.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.33.0(react@19.2.8))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3) + fumadocs-mdx: + specifier: 15.3.0 + version: 15.3.0(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.33.0(react@19.2.8))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0)) + fumadocs-ui: + specifier: npm:@fumadocs/base-ui@16.14.5 + version: '@fumadocs/base-ui@16.14.5(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.33.0(react@19.2.8))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)' + lucide-react: + specifier: ^1.31.0 + version: 1.33.0(react@19.2.8) + next: + specifier: 16.3.2 + version: 16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: + specifier: ^19.2.8 + version: 19.2.8 + react-dom: + specifier: ^19.2.8 + version: 19.2.8(react@19.2.8) + devDependencies: + '@tailwindcss/postcss': + specifier: ^4.3.3 + version: 4.3.3 + '@types/mdx': + specifier: ^2.0.14 + version: 2.0.14 + '@types/node': + specifier: ^26.2.0 + version: 26.2.0 + '@types/react': + specifier: ^19.2.18 + version: 19.2.18 + '@types/react-dom': + specifier: ^19.2.4 + version: 19.2.4(@types/react@19.2.18) + oxlint: + specifier: ^1.78.0 + version: 1.78.0 + postcss: + specifier: ^8.5.26 + version: 8.5.26 + serve: + specifier: ^14.2.6 + version: 14.2.6 + tailwindcss: + specifier: ^4.3.3 + version: 4.3.3 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + packages: + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -167,6 +229,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.29.7': resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} @@ -179,6 +245,33 @@ packages: resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} engines: {node: '>=6.9.0'} + '@base-ui/react@1.7.0': + resolution: {integrity: sha512-j+8QjX44C32jrXD/qyEAGpFr70FRpGL2CY61mQd9nBPWN737CK0xxD1ceJ055rW4RtdvFDT1e7otzdlfxvsYug==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@date-fns/tz': ^1.2.0 + '@types/react': ^17 || ^18 || ^19 + date-fns: ^4.0.0 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@date-fns/tz': + optional: true + '@types/react': + optional: true + date-fns: + optional: true + + '@base-ui/utils@0.3.2': + resolution: {integrity: sha512-oWy1aq/I2GmYjpl4PhEAhzflF8VPGKgZeq0xAWTbfD5KBWyxcN0ZP2+WHSUm/5Z6lVMBDLReLcoXwSYoRc/zNQ==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + '@cloudflare/kv-asset-handler@0.5.0': resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} engines: {node: '>=22.0.0'} @@ -588,6 +681,62 @@ packages: cpu: [x64] os: [win32] + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + + '@floating-ui/react-dom@2.1.9': + resolution: {integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + + '@fuma-translate/react@1.0.2': + resolution: {integrity: sha512-uOiOtBx3nRXR8Nu1GzBf1tApgF1FErDBTHxRIAQeyQdyOoZbrNRN6H4kDCWObY4qyGeGbHydG0DHzgeUgFDMIw==} + peerDependencies: + '@types/react': '*' + react: ^19.2.0 + react-dom: ^19.2.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@fumadocs/base-ui@16.14.5': + resolution: {integrity: sha512-QDKcfAWpR3x5C3PDkU+MV6o5rsFdhh8lc12cFVixcFAEecUjPatNfWf/ShDXBls27z32E0PfaYJi0Sg53zPJRg==} + peerDependencies: + '@types/mdx': '*' + '@types/react': '*' + fumadocs-core: 16.14.5 + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + takumi-js: '*' + peerDependenciesMeta: + '@types/mdx': + optional: true + '@types/react': + optional: true + next: + optional: true + takumi-js: + optional: true + + '@fumadocs/tailwind@0.1.1': + resolution: {integrity: sha512-BnPe52UxSaG8yKlHMKBxXw8h6GpK5qO55ci6+Qd5JnquTvIw6SpfbC1P+qAi82PuPWv1KZAWY8bxRk4+x9ctXw==} + peerDependencies: + tailwindcss: ^4.0.0 + peerDependenciesMeta: + tailwindcss: + optional: true + + '@fumari/image-size@0.1.0': + resolution: {integrity: sha512-x2o9u6P8uKUK15B8XgEoRhR3PgLoLSbQKK6FUCd14JzumEw+e8FXZPelij/dZ4VQVMp4r61VD3DcvSo3aEhLAA==} + '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} @@ -598,75 +747,150 @@ packages: cpu: [arm64] os: [darwin] + '@img/sharp-darwin-arm64@0.35.3': + resolution: {integrity: sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + '@img/sharp-darwin-x64@0.35.2': resolution: {integrity: sha512-BaktuGPCeHJMARpodR8jK4uKiZrPAy9WrfQW0sdI37clracq8Bp01AYS3SZgi5FS/y5twa9t4+LIuuxQjqRrWw==} engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] + '@img/sharp-darwin-x64@0.35.3': + resolution: {integrity: sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + '@img/sharp-freebsd-wasm32@0.35.2': resolution: {integrity: sha512-YoAxdnd8hPUkvLHd3bWY+YA8nw3xM/RyRopYucNsWHVSan8NLVM3X2volsfoRDcXdUJPg6tXahSd7HXPK7lRnw==} engines: {node: '>=20.9.0'} os: [freebsd] + '@img/sharp-freebsd-wasm32@0.35.3': + resolution: {integrity: sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==} + engines: {node: '>=20.9.0'} + os: [freebsd] + '@img/sharp-libvips-darwin-arm64@1.3.1': resolution: {integrity: sha512-4V/M3roRMTYjiwZY9IOVQOE8OyeCxFAkYmyZDrZl51uOKjibm3oeEJ4WAmLxutAfzFbC9jqUiPs2gbnGflH+7g==} cpu: [arm64] os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.3.2': + resolution: {integrity: sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==} + cpu: [arm64] + os: [darwin] + '@img/sharp-libvips-darwin-x64@1.3.1': resolution: {integrity: sha512-c0/DxItpJv2+dGhgycJBBgotdqruGYDvA79drdh0MD1dFpy7JzJ/PlXwi1H4rFf0eTy8tgbI91aHDnZIceY3jQ==} cpu: [x64] os: [darwin] + '@img/sharp-libvips-darwin-x64@1.3.2': + resolution: {integrity: sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-linux-arm64@1.3.1': resolution: {integrity: sha512-JznefmcK9j1JKPz8AkQDh89kjojubyfOasWBPKfzMIhPwsgDy9evpE/naJTXXXmghS1iFwR8u/kTwh/I2/+GCw==} cpu: [arm64] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-arm64@1.3.2': + resolution: {integrity: sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-arm@1.3.1': resolution: {integrity: sha512-aGGy9aWzXgHBG7HNyQPWorZthlp7+x6fDRoPAQbGO3ThcttuTyKIx3NuSHb6zb4gBNq6/yNn9f1cy9nFKS/Vmg==} cpu: [arm] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-arm@1.3.2': + resolution: {integrity: sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==} + cpu: [arm] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-ppc64@1.3.1': resolution: {integrity: sha512-1EkwGNCZk6iWNCMWqrvdJ+r1j0PT1zIz60CNPhYnJlK/zyeWqlsPZIe+ocBVqPF8k/Ssee/NCk+tE9Ryrko6ng==} cpu: [ppc64] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-ppc64@1.3.2': + resolution: {integrity: sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-riscv64@1.3.1': resolution: {integrity: sha512-Ilays+w2bXdnxzxtQdmXR62u8o8GYa3eL4+Gr+1KiE4xperMZUslRaVPJwwPkzlHEjGfXAfRVAa/7CYCtSqsBw==} cpu: [riscv64] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-riscv64@1.3.2': + resolution: {integrity: sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-s390x@1.3.1': resolution: {integrity: sha512-VfBwVHQTbRoj4XlpA/KLZ7ltgMpz+4WSejFzQ+GnoImjo1PtEJ59QB2qR1xQEeRPYIkNrPIm2L4cICMvz4C2ew==} cpu: [s390x] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-s390x@1.3.2': + resolution: {integrity: sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linux-x64@1.3.1': resolution: {integrity: sha512-+c8ukgwU62DS54nCAjw7keOfHUkmr0B5QHEdcOqRnodF/MNXJbVI8Eopoj4B/0H8Asr65I+A4Amrn7a85/md6A==} cpu: [x64] os: [linux] libc: [glibc] + '@img/sharp-libvips-linux-x64@1.3.2': + resolution: {integrity: sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@img/sharp-libvips-linuxmusl-arm64@1.3.1': resolution: {integrity: sha512-qlKb/pwbkAi1WMsJrYHk7CuDrd12s27U2QnRhFYUoJNrRCmkosMTttuRFat/DDB3IlDm5qE1TJgZ4JDnHX8Ldw==} cpu: [arm64] os: [linux] libc: [musl] + '@img/sharp-libvips-linuxmusl-arm64@1.3.2': + resolution: {integrity: sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==} + cpu: [arm64] + os: [linux] + libc: [musl] + '@img/sharp-libvips-linuxmusl-x64@1.3.1': resolution: {integrity: sha512-yO21HwoUVLN8Qa+/SBjQLMYwBWAVJjeGPNe+hc0OUeMeifEtJqu5a1c4HayE1nNpDih9y3/KkoltfkDodmKAlg==} cpu: [x64] os: [linux] libc: [musl] + '@img/sharp-libvips-linuxmusl-x64@1.3.2': + resolution: {integrity: sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==} + cpu: [x64] + os: [linux] + libc: [musl] + '@img/sharp-linux-arm64@0.35.2': resolution: {integrity: sha512-af12Pnd0ZGu2HfP8NayB0kk6eC/lrfbQE6HlR4jD+34wdJ1Vw9TF6TMn6ZvffT+WgqVsl0hRbmNvz2u/23VmwA==} engines: {node: '>=20.9.0'} @@ -674,6 +898,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-arm64@0.35.3': + resolution: {integrity: sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@img/sharp-linux-arm@0.35.2': resolution: {integrity: sha512-SE4kzF2mepn6z+6E7L6lsV8FzuLL6IPQdyX8ZiwROAG/G8td+hP/m7FsFPwidtrF19gvajuC9l6TxAVcsA4S7A==} engines: {node: '>=20.9.0'} @@ -681,6 +912,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-arm@0.35.3': + resolution: {integrity: sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==} + engines: {node: '>=20.9.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + '@img/sharp-linux-ppc64@0.35.2': resolution: {integrity: sha512-hYSBm7zcNtDCozCxQHYZJiu63b/bXsgRZuOxCIBZsStMM9Vap47iFHdbX4kCvQsblPB/k+clhELpdQJHQLSHvg==} engines: {node: '>=20.9.0'} @@ -688,6 +926,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-ppc64@0.35.3': + resolution: {integrity: sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@img/sharp-linux-riscv64@0.35.2': resolution: {integrity: sha512-qQt0Kc13+Hoan/Awq/qMSQw3L+RI1NCRPgD5cUJ/1WSSmIoysLOc72jlRM3E0OHN9Yr313jgeQ2T+zW+F03QFA==} engines: {node: '>=20.9.0'} @@ -695,6 +940,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-riscv64@0.35.3': + resolution: {integrity: sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@img/sharp-linux-s390x@0.35.2': resolution: {integrity: sha512-E4fLLfRPzDLlEeDaTzI98OFLcv++WL5ChLLMwPoVd0CIoZQqupBSNbOisPL5am9XsbQ9T84+iiMpUvbFtkunbA==} engines: {node: '>=20.9.0'} @@ -702,6 +954,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-s390x@0.35.3': + resolution: {integrity: sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==} + engines: {node: '>=20.9.0'} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@img/sharp-linux-x64@0.35.2': resolution: {integrity: sha512-gi0zFJJRLswfCZmHtJdikXPOc5u7qamSOS3NHedLqLd4W8Q0NqjdBr6TTRIgsfFjqfTsHFgdfvJ9LwqSgcHiAA==} engines: {node: '>=20.9.0'} @@ -709,6 +968,13 @@ packages: os: [linux] libc: [glibc] + '@img/sharp-linux-x64@0.35.3': + resolution: {integrity: sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + '@img/sharp-linuxmusl-arm64@0.35.2': resolution: {integrity: sha512-siWbOW1u6HFnFLrp0waKyW7VEf7jYvcDWdrXEFa8AkdAQgEvuu5Fz8/Y70w9EeqAdwDtfU012BhEHHaDqvQNzg==} engines: {node: '>=20.9.0'} @@ -716,6 +982,13 @@ packages: os: [linux] libc: [musl] + '@img/sharp-linuxmusl-arm64@0.35.3': + resolution: {integrity: sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + '@img/sharp-linuxmusl-x64@0.35.2': resolution: {integrity: sha512-YBqMMcjDi4QGYiSn4vNOYBhmlC4z5AXqkOUUqI2e0AFA4urNv4ESgOgwNl3K+4etQhha0twXlzeF20bbULm9Yg==} engines: {node: '>=20.9.0'} @@ -723,33 +996,67 @@ packages: os: [linux] libc: [musl] + '@img/sharp-linuxmusl-x64@0.35.3': + resolution: {integrity: sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [musl] + '@img/sharp-wasm32@0.35.2': resolution: {integrity: sha512-Mrv4JQNYVQ94xH+jzZ9r+gowleN8mv2FTgKT+PI6bx5C0G8TdNYndu161pg2i7uoBwxy2ImPMHrJOM2LZef7Bw==} engines: {node: '>=20.9.0'} + '@img/sharp-wasm32@0.35.3': + resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==} + engines: {node: '>=20.9.0'} + '@img/sharp-webcontainers-wasm32@0.35.2': resolution: {integrity: sha512-QNV27pxs9wpApEiCfvHM1RDoP1w1+2KrUWWDPEhEwg+latvOrfuhWrHWZKwdSFwU6jh3myjw/yOCRsUIuOft3g==} engines: {node: '>=20.9.0'} cpu: [wasm32] + '@img/sharp-webcontainers-wasm32@0.35.3': + resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] + '@img/sharp-win32-arm64@0.35.2': resolution: {integrity: sha512-BiVRYc/t6/Vl3e1hBx0hugG4oN9Pydf4fgMSpxTQJmwGUg/YoXTWHiFeRymHfCZzifxu4F4rpk/I67D0LQ20wQ==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [win32] + '@img/sharp-win32-arm64@0.35.3': + resolution: {integrity: sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + '@img/sharp-win32-ia32@0.35.2': resolution: {integrity: sha512-YYEhx9PImCC7T0tI8JDMi4DB9LwLCXCU5OWNYEXAxh5Q1ShKkyC6byxzoBJ3gEFDnH2lQckWuDe70G7mB2XJog==} engines: {node: ^20.9.0} cpu: [ia32] os: [win32] + '@img/sharp-win32-ia32@0.35.3': + resolution: {integrity: sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] + '@img/sharp-win32-x64@0.35.2': resolution: {integrity: sha512-imoOyBcoM/iiUr4J6VPpCNjPnjvP/Gks95898yB8YqoGGYmHYbOyCuNv9FMhFgtaiHFGbHW8bxKqRV6VjtXThQ==} engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] + '@img/sharp-win32-x64@0.35.3': + resolution: {integrity: sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [win32] + '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -764,6 +1071,9 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -781,6 +1091,9 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@napi-rs/lzma-linux-x64-gnu@1.5.1': resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} engines: {node: ^22.20 || ^24.12 || >=25} @@ -788,6 +1101,61 @@ packages: os: [linux] libc: [glibc] + '@next/env@16.3.2': + resolution: {integrity: sha512-8k4YoG8cM7LWlkfzGNYCRBbFNlernLiMw4s0btVl+CmmWqn3VpYypA72/5Feb1UWdxe6tHqr5KHP4p4Y4m9luA==} + + '@next/swc-darwin-arm64@16.3.2': + resolution: {integrity: sha512-ib5Llm93YCKoKWDh6ZaHq6QWTuOZ2bRkSnUwMmX8dsRIOkBNL1vVlSiUKSfixPL9SSh9pvukzqajk/klkn5vqg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.3.2': + resolution: {integrity: sha512-qd98fX2+I5nYJDioW2o7nSjoxM5KvWdeDefM80igia4+C/qSIEhH4MhTE+hO/7qKM7W37/Mq+dOWp8UePSyLHw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.3.2': + resolution: {integrity: sha512-vqsgb6FAOzcrCccsLXiKtAy5t8EzO+uOazuFaSkQxeY0tNONG3vpHYy8pyBafcI5SNFPTeyard6yTr6SzNGo2A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@16.3.2': + resolution: {integrity: sha512-xIe1eujfHUB2XcxHGddxJyu6TJRPjC5NpIkQYB/32ESkt5VkQyIAjmLRS38c+s6QY+qjtY/4KarVDzXRuD7lZQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@16.3.2': + resolution: {integrity: sha512-Fe0SA2j8X0kmc3aveuHD7UktO3AE2+mH3LguP60vGbz7u0z+MrDXbeb5iZFYAwR7EzzzXJ2Yk966w9mGTFMqfA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@16.3.2': + resolution: {integrity: sha512-TFBipb+gyesI/2Ve4zVu7kGltBWN/R466G5/1gtt2lECfc22G1pjkTxu68Q9aFcOaXiRGTQfvDbQQFe7mYgxiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@16.3.2': + resolution: {integrity: sha512-rVtmnNpBYIosDnKD/96dKxFsJnwnn1WRGG/HioSe8XCm2ksSHNrd2R6+hSjvTBxeMNhJ9pYeu/90cWB1nQLuNA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.3.2': + resolution: {integrity: sha512-H4Y2o2/JcHu8LtwzD5CXfHhwxwz8gfsx2HXDEw46Mtev5xHnEmB7HNtZtmriw5ReUOjRtcDqo7XSbU01FT9NlA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@noble/hashes@1.4.0': resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} @@ -1140,6 +1508,9 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -1233,6 +1604,9 @@ packages: resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} engines: {node: '>= 20'} + '@tailwindcss/postcss@4.3.3': + resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} + '@tailwindcss/vite@4.3.3': resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} peerDependencies: @@ -1318,6 +1692,9 @@ packages: '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -1439,25 +1816,121 @@ packages: resolution: {integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==} engines: {node: '>=10.0.0'} + '@yuku-analyzer/binding-android-arm64@0.8.7': + resolution: {integrity: sha512-pzJ++UMCZEV4s6SP3Ryvj+snWP8s7aTXFkSXRyeBF4RSALftPzfqYssHdGOmOH2QnRAtyOhhg64tdjeSGJvYRg==} + cpu: [arm64] + os: [android] + + '@yuku-analyzer/binding-darwin-arm64@0.8.7': + resolution: {integrity: sha512-vymR7Us3i/HJvUxA1N5sKCrrn2mXw/Xvzbt66zlRyGPDmkUzFCrn34OqodR/zctmD1JhaFlv+Ur6xNNPRIid/w==} + cpu: [arm64] + os: [darwin] + + '@yuku-analyzer/binding-darwin-x64@0.8.7': + resolution: {integrity: sha512-aX1xy6wJeI2QN/ipu9B6/dzz6RmHQ5+Ty6uyf9csqYZDnY4/U2GsDskYQIRysc2Cuh+GNnvuO5xCXxiqkmVEcw==} + cpu: [x64] + os: [darwin] + + '@yuku-analyzer/binding-freebsd-x64@0.8.7': + resolution: {integrity: sha512-5LT2KkjK0zBI2s3VoSyGPSs9Ey7rWPxWkCyFgZXoszQOkAk2z0biP+DLzb9zw6flmwwCCiyeZRqM65srfo8l1Q==} + cpu: [x64] + os: [freebsd] + + '@yuku-analyzer/binding-linux-arm-gnu@0.8.7': + resolution: {integrity: sha512-4haNlVk624QoNSKIneoH9JKu5SvfD+Hkxg490HUS5pfFuWwoXT3zOmAdfwPMsSH0bNIkFO7GqtwDZ9EVpyzepw==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-arm-musl@0.8.7': + resolution: {integrity: sha512-7HwJHVFtrufB5qHHL1PSDPr/j6uoNLwbwxa04QzsbpcbbzfDUbT37loHPu5u0NuetRUlV+TqXDlX6OpXcM8hKQ==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-linux-arm64-gnu@0.8.7': + resolution: {integrity: sha512-yUEgxEPuDVBO+nkDw8qbssYA8oHu82Q0da+C7rGyVplmjlKa5DhBnMMagTEjFZx4jNDVWnGHJreUCSeGL0x/gQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-arm64-musl@0.8.7': + resolution: {integrity: sha512-2X7EwxPbgdNRqgMwtxOnNOGEmdm1RS8PD2Q5cOxj8cEZD4fy7yHHeSDoEdBOyrJtHzbG6jQB6CeReO1okb/S7Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-linux-x64-gnu@0.8.7': + resolution: {integrity: sha512-k/iQFK1gAvaHLzXXZ3/+g48wT5YB6MfikPb+juGCd9HzyPMUSBCy44rz6nT+xoWnnxmBoeBUywA4CvWCWZFTtg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@yuku-analyzer/binding-linux-x64-musl@0.8.7': + resolution: {integrity: sha512-gTfYHx3cg8FERTYsg1dQrQFTutcWJ7wTp8YToyAJnZMbUCkcyuwUiWNYaEHyF0xIb+PsG7HfD+BLWhRRom5qKg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@yuku-analyzer/binding-win32-arm64@0.8.7': + resolution: {integrity: sha512-XDCWZZztOvdTtPNaU5EzrrV0dmMugdZ+Qdq5INeiGhGW5hD0TuCBIIXK7wTmRM6NcKarGlyBP5SYkiAuw6+slg==} + cpu: [arm64] + os: [win32] + + '@yuku-analyzer/binding-win32-x64@0.8.7': + resolution: {integrity: sha512-VtSH1pWuk3bo+BiUAtzYa4Ku1r/10CO14QvkGpRhDcFck8sIf7ox+wiucyKNKcf+srWCYxR1hO+wn5N3BdtFdw==} + cpu: [x64] + os: [win32] + + '@yuku-toolchain/types@0.8.7': + resolution: {integrity: sha512-2Z53dNxAJL6UvFoIrDZvYf3zlO8s4VJK4O2hhaB4mXVwwpX/7ajtss3cmfqKvamlNLWyt9FSWs4eoYdlbxpnHA==} + + '@zeit/schemas@2.36.0': + resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} + abbrev@4.0.0: resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} engines: {node: ^20.17.0 || >=22.9.0} + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.3.0: + resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + app-builder-lib@26.15.3: resolution: {integrity: sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==} engines: {node: '>=14.0.0'} @@ -1465,6 +1938,12 @@ packages: dmg-builder: 26.15.3 electron-builder-squirrel-windows: 26.15.3 + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1476,6 +1955,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + async-exit-hook@2.0.1: resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} engines: {node: '>=0.12.0'} @@ -1521,6 +2004,10 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + boxen@7.0.0: + resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + engines: {node: '>=14.16'} + brace-expansion@1.1.18: resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} @@ -1547,6 +2034,14 @@ packages: resolution: {integrity: sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==} engines: {node: '>=14.0.0'} + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + bytestreamjs@2.0.1: resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} @@ -1563,6 +2058,10 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + caniuse-lite@1.0.30001809: resolution: {integrity: sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==} @@ -1573,10 +2072,22 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -1589,6 +2100,10 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -1604,6 +2119,20 @@ packages: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1615,6 +2144,13 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cnfast@0.1.0: + resolution: {integrity: sha512-rH0jBKeLkVrK7NsZ5Ba2l7WdMBmm1k0FMpABeXUU1PgTUxbz3261gEuCSsrYuXo4BwAe3yCcIbQ93YyS52lOGQ==} + hasBin: true + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1629,6 +2165,9 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} @@ -1641,9 +2180,24 @@ packages: resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} engines: {node: '>=0.10.0'} + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1667,6 +2221,14 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1683,6 +2245,10 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -1707,6 +2273,9 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} @@ -1737,6 +2306,9 @@ packages: duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} @@ -1771,6 +2343,9 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -1778,6 +2353,10 @@ packages: resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==} engines: {node: '>=10.13.0'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -1814,6 +2393,12 @@ packages: es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + esbuild@0.28.1: resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} @@ -1836,12 +2421,34 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + expect-type@1.4.0: resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} @@ -1877,6 +2484,17 @@ packages: resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} + framer-motion@13.1.1: + resolution: {integrity: sha512-B/xn2TPS4f61cEBLFjiYlQFnBZUW1YVj/LM+C+N4OP8Rs95VLEI2ot/RlfBg111la/EiyECFaJJi/A3FWA8MUA==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -1909,6 +2527,102 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + fumadocs-core@16.14.5: + resolution: {integrity: sha512-II6BqBO0A/KBYqCBgs1cBB/etyQbv1Qi+f0L29Br/CUbKWlHGRFFksfbcMW5HUitoIWDzOXJldxk9z6nvdZe4w==} + peerDependencies: + '@mdx-js/mdx': '*' + '@mixedbread/sdk': 0.x.x + '@orama/core': 1.x.x + '@oramacloud/client': 2.x.x + '@tanstack/react-router': 1.x.x + '@types/estree-jsx': '*' + '@types/hast': '*' + '@types/mdast': '*' + '@types/react': '*' + algoliasearch: 5.x.x + flexsearch: '*' + lucide-react: '*' + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + react-router: 7.x.x || 8.x.x + waku: '*' + zod: 4.x.x + peerDependenciesMeta: + '@mdx-js/mdx': + optional: true + '@mixedbread/sdk': + optional: true + '@orama/core': + optional: true + '@oramacloud/client': + optional: true + '@tanstack/react-router': + optional: true + '@types/estree-jsx': + optional: true + '@types/hast': + optional: true + '@types/mdast': + optional: true + '@types/react': + optional: true + algoliasearch: + optional: true + flexsearch: + optional: true + lucide-react: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + react-router: + optional: true + waku: + optional: true + zod: + optional: true + + fumadocs-mdx@15.3.0: + resolution: {integrity: sha512-ZzfM4O15SDfqvgsOzifNYu3ZlV23tOI6cP5emTrdCTV3Jhj1xHU+74RckkPnAvGo+ee2hRyM0vksCjvUYff+bA==} + hasBin: true + peerDependencies: + '@fumadocs/satteri': 0.x.x + '@types/mdast': '*' + '@types/mdx': '*' + '@types/react': '*' + fumadocs-core: ^16.7.0 + mdast-util-directive: '*' + next: ^15.3.0 || ^16.0.0 + react: ^19.2.0 + rolldown: '*' + satteri: ^0.10.0 + vite: 7.x.x || 8.x.x + peerDependenciesMeta: + '@fumadocs/satteri': + optional: true + '@types/mdast': + optional: true + '@types/mdx': + optional: true + '@types/react': + optional: true + mdast-util-directive: + optional: true + next: + optional: true + react: + optional: true + rolldown: + optional: true + satteri: + optional: true + vite: + optional: true + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -1924,6 +2638,10 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -1932,6 +2650,13 @@ packages: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -1974,15 +2699,33 @@ packages: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + hast-util-to-html@9.0.5: resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -2008,6 +2751,10 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -2015,6 +2762,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -2027,6 +2777,11 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -2038,6 +2793,18 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-port-reachable@4.0.0: + resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -2214,9 +2981,21 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lucide-react@1.33.0: + resolution: {integrity: sha512-MTRwMy0ZlL8Ur/vOAiJ9XGHE+kFPC7brq6MxAm0GiGXEBj0qy0jA/pG4N675oSzciO/UCdX8T+5yUQdmDeTLxg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.2.2: + resolution: {integrity: sha512-veT/+7iXrXzT39XnEN4lOxtNl72dMgJ8Lp+5Bd6YcMSWpb0n0MjBM8Uuooi6jgJr8dhUW2swQgBmoZVMni5SVg==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -2258,6 +3037,9 @@ packages: mdast-util-mdx-jsx@3.2.0: resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + mdast-util-mdxjs-esm@2.0.1: resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} @@ -2273,6 +3055,9 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -2297,12 +3082,30 @@ packages: micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + micromark-factory-destination@2.0.1: resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} micromark-factory-label@2.0.1: resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + micromark-factory-space@2.0.1: resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} @@ -2333,6 +3136,9 @@ packages: micromark-util-encode@2.0.1: resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + micromark-util-html-tag-name@2.0.1: resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} @@ -2357,10 +3163,22 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -2370,6 +3188,10 @@ packages: engines: {node: '>=4.0.0'} hasBin: true + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -2412,6 +3234,26 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true + motion-dom@13.1.1: + resolution: {integrity: sha512-XSf8VYWSB6G/0IY3rWVbyLcxWXtAVHkN1PQE2agTaCv3u8RGvbwu56TyyR/MNzBqqNavEBTZzErcxI1TxBrjcA==} + + motion-utils@13.0.0: + resolution: {integrity: sha512-7DnN7TmbLcYXcG4RVadXIihWlyuM9afoUww8Y5Agg431kGKiuL2/OMyP4mJ5wLz+pvN3t5ySClLOaVXJ+wekRQ==} + + motion@13.1.1: + resolution: {integrity: sha512-WNZoK6xiF+kkTqkZ5K7FDDh6A8BG4i5Hc7KXtW8gtTxkpJFds+hIOrDaQGKjQj/AE/i4hJqAaUHEqp/Qo02y6Q==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -2420,6 +3262,37 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@16.3.2: + resolution: {integrity: sha512-/ZCaubUy17Lld1SiPWxuPbCk2ihqAxF2QNQaPZeEaEb7t1I58qhsJN187D7AfpapHAqUPXH0f/thtdW9dWgWFg==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + node-abi@4.33.0: resolution: {integrity: sha512-vLBWCKb+7LWsX+TbfzWOkw0W81m377tyx3hOweBTjO43CXZnRGS1/JPWs20fr0PgZyDXk6ROYrylsEycK8raDA==} engines: {node: '>=22.12.0'} @@ -2448,6 +3321,14 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-to-yarn@3.2.0: + resolution: {integrity: sha512-K1HmQeZT2HrjpsR6KgqbN2FAXL2NrJJmNUSD9ck7HGTVu1JKXox8n9SB+tjbU8m8JGLF4OscrroPepew/L7/Xw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -2456,9 +3337,17 @@ packages: resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} engines: {node: '>=12.20.0'} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + oniguruma-parser@0.12.2: resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} @@ -2489,14 +3378,23 @@ packages: parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -2522,6 +3420,10 @@ packages: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.26: resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} @@ -2585,6 +3487,14 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + react-dom@19.2.8: resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} peerDependencies: @@ -2600,6 +3510,36 @@ packages: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + react@19.2.8: resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} engines: {node: '>=0.10.0'} @@ -2611,6 +3551,24 @@ packages: readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readdirp@5.1.1: + resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} + engines: {node: '>= 20.19.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -2620,9 +3578,25 @@ packages: regex@6.1.0: resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} @@ -2632,6 +3606,9 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -2644,6 +3621,9 @@ packages: resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} engines: {node: '>=12', npm: '>=6'} + reselect@5.2.0: + resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -2671,6 +3651,9 @@ packages: safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} @@ -2681,6 +3664,9 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -2706,10 +3692,27 @@ packages: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} + serve-handler@6.1.7: + resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} + + serve@14.2.6: + resolution: {integrity: sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==} + engines: {node: '>= 14'} + hasBin: true + sharp@0.35.2: resolution: {integrity: sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==} engines: {node: '>=20.9.0'} + sharp@0.35.3: + resolution: {integrity: sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2743,6 +3746,10 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -2763,6 +3770,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -2773,12 +3784,37 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} style-to-object@1.0.14: resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + sumchecker@3.0.1: resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} @@ -2812,6 +3848,11 @@ packages: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} engines: {node: '>=6.0.0'} + terser@5.16.9: + resolution: {integrity: sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==} + engines: {node: '>=10'} + hasBin: true + tiny-async-pool@1.3.0: resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} @@ -2856,11 +3897,20 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} @@ -2884,9 +3934,15 @@ packages: unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -2913,12 +3969,47 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + utf8-byte-length@1.0.5: resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} @@ -3006,6 +4097,9 @@ packages: jsdom: optional: true + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-vitals@5.3.0: resolution: {integrity: sha512-q6LWsLatGYZp5VGBIOvbTj6JBV2nOmC8KvWztXBmwJcfFAzhwKwbOxhUH306XY3CcaZDUlSmSuNPBsCn0bFu+g==} @@ -3035,6 +4129,10 @@ packages: engines: {node: '>=8'} hasBin: true + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + workerd@1.20260811.1: resolution: {integrity: sha512-kh+FFm55JQ4ssxhHZV9VPdMQq3D1nHxNJgwxMtWGD4dGppJvLySdguTRDKgeNTvgq6heSz+6TTXyPSDGj8Yllw==} engines: {node: '>=16'} @@ -3054,6 +4152,10 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -3087,6 +4189,11 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -3105,6 +4212,16 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + yuku-analyzer@0.8.7: + resolution: {integrity: sha512-nyPXcwwRPEggJqxIP28GeLKPjk9oGUuBlS4I0KfFrezNe93Ie9WIlOYRI42bo+MmZoxH238XHoPy0IZdwZIBxA==} + + yuku-ast@0.8.7: + resolution: {integrity: sha512-h6+4bDfyootiMB9vckk5uKo5r5j0GHrkr17FQTDNfEsFT3DWlN9uu1HJwQwc64pgmLCI945fWM3lbTIqxjT3GQ==} + + zbsearch@4.0.0: + resolution: {integrity: sha512-gm4zfO31n2ZdruTTRQoWVWO4Q2+zrDt2GlrvIc+5JulRQNAm4IanCxER82vQ7Ug96FYkGqWUJBXFe1kGAcDWaQ==} + engines: {node: '>= 20.0.0'} + zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} @@ -3113,6 +4230,8 @@ packages: snapshots: + '@alloc/quick-lru@5.2.0': {} + '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -3202,6 +4321,8 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 + '@babel/runtime@7.29.7': {} + '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 @@ -3225,6 +4346,29 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@base-ui/react@1.7.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@babel/runtime': 7.29.7 + '@base-ui/utils': 0.3.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@floating-ui/utils': 0.2.12 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + use-sync-external-store: 1.6.0(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + '@base-ui/utils@0.3.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@babel/runtime': 7.29.7 + '@floating-ui/utils': 0.2.12 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + reselect: 5.2.0 + use-sync-external-store: 1.6.0(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + '@cloudflare/kv-asset-handler@0.5.0': {} '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260811.1)': @@ -3510,6 +4654,63 @@ snapshots: '@esbuild/win32-x64@0.28.2': optional: true + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/react-dom@2.1.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + '@floating-ui/dom': 1.8.0 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + '@floating-ui/utils@0.2.12': {} + + '@fuma-translate/react@1.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + '@fumadocs/base-ui@16.14.5(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.33.0(react@19.2.8))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3)': + dependencies: + '@base-ui/react': 1.7.0(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@fuma-translate/react': 1.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@fumadocs/tailwind': 0.1.1(tailwindcss@4.3.3) + class-variance-authority: 0.7.1 + cnfast: 0.1.0 + fumadocs-core: 16.14.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.33.0(react@19.2.8))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3) + lucide-react: 1.33.0(react@19.2.8) + motion: 13.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + next-themes: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + react-remove-scroll: 2.7.2(@types/react@19.2.18)(react@19.2.8) + rehype-raw: 7.0.0 + scroll-into-view-if-needed: 3.1.0 + shiki: 4.4.3 + unist-util-visit: 5.1.0 + optionalDependencies: + '@types/mdx': 2.0.14 + '@types/react': 19.2.18 + next: 16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + transitivePeerDependencies: + - '@date-fns/tz' + - date-fns + - tailwindcss + + '@fumadocs/tailwind@0.1.1(tailwindcss@4.3.3)': + optionalDependencies: + tailwindcss: 4.3.3 + + '@fumari/image-size@0.1.0': {} + '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.35.2': @@ -3517,105 +4718,209 @@ snapshots: '@img/sharp-libvips-darwin-arm64': 1.3.1 optional: true + '@img/sharp-darwin-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.2 + optional: true + '@img/sharp-darwin-x64@0.35.2': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.3.1 optional: true + '@img/sharp-darwin-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.2 + optional: true + '@img/sharp-freebsd-wasm32@0.35.2': dependencies: '@img/sharp-wasm32': 0.35.2 optional: true + '@img/sharp-freebsd-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 + optional: true + '@img/sharp-libvips-darwin-arm64@1.3.1': optional: true + '@img/sharp-libvips-darwin-arm64@1.3.2': + optional: true + '@img/sharp-libvips-darwin-x64@1.3.1': optional: true + '@img/sharp-libvips-darwin-x64@1.3.2': + optional: true + '@img/sharp-libvips-linux-arm64@1.3.1': optional: true + '@img/sharp-libvips-linux-arm64@1.3.2': + optional: true + '@img/sharp-libvips-linux-arm@1.3.1': optional: true + '@img/sharp-libvips-linux-arm@1.3.2': + optional: true + '@img/sharp-libvips-linux-ppc64@1.3.1': optional: true + '@img/sharp-libvips-linux-ppc64@1.3.2': + optional: true + '@img/sharp-libvips-linux-riscv64@1.3.1': optional: true + '@img/sharp-libvips-linux-riscv64@1.3.2': + optional: true + '@img/sharp-libvips-linux-s390x@1.3.1': optional: true + '@img/sharp-libvips-linux-s390x@1.3.2': + optional: true + '@img/sharp-libvips-linux-x64@1.3.1': optional: true + '@img/sharp-libvips-linux-x64@1.3.2': + optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.3.1': optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.3.2': + optional: true + '@img/sharp-libvips-linuxmusl-x64@1.3.1': optional: true + '@img/sharp-libvips-linuxmusl-x64@1.3.2': + optional: true + '@img/sharp-linux-arm64@0.35.2': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.3.1 optional: true + '@img/sharp-linux-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.2 + optional: true + '@img/sharp-linux-arm@0.35.2': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.3.1 optional: true + '@img/sharp-linux-arm@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.2 + optional: true + '@img/sharp-linux-ppc64@0.35.2': optionalDependencies: '@img/sharp-libvips-linux-ppc64': 1.3.1 optional: true + '@img/sharp-linux-ppc64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.2 + optional: true + '@img/sharp-linux-riscv64@0.35.2': optionalDependencies: '@img/sharp-libvips-linux-riscv64': 1.3.1 optional: true + '@img/sharp-linux-riscv64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.2 + optional: true + '@img/sharp-linux-s390x@0.35.2': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.3.1 optional: true + '@img/sharp-linux-s390x@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.2 + optional: true + '@img/sharp-linux-x64@0.35.2': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.3.1 optional: true + '@img/sharp-linux-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.2 + optional: true + '@img/sharp-linuxmusl-arm64@0.35.2': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.3.1 optional: true + '@img/sharp-linuxmusl-arm64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 + optional: true + '@img/sharp-linuxmusl-x64@0.35.2': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.3.1 optional: true + '@img/sharp-linuxmusl-x64@0.35.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.2 + optional: true + '@img/sharp-wasm32@0.35.2': dependencies: '@emnapi/runtime': 1.11.3 optional: true + '@img/sharp-wasm32@0.35.3': + dependencies: + '@emnapi/runtime': 1.11.3 + optional: true + '@img/sharp-webcontainers-wasm32@0.35.2': dependencies: '@img/sharp-wasm32': 0.35.2 optional: true + '@img/sharp-webcontainers-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 + optional: true + '@img/sharp-win32-arm64@0.35.2': optional: true + '@img/sharp-win32-arm64@0.35.3': + optional: true + '@img/sharp-win32-ia32@0.35.2': optional: true + '@img/sharp-win32-ia32@0.35.3': + optional: true + '@img/sharp-win32-x64@0.35.2': optional: true + '@img/sharp-win32-x64@0.35.3': + optional: true + '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.3 @@ -3632,6 +4937,12 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + optional: true + '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.31': @@ -3657,9 +4968,65 @@ snapshots: transitivePeerDependencies: - supports-color + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdx': 2.0.14 + acorn: 8.18.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.18.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + '@napi-rs/lzma-linux-x64-gnu@1.5.1': optional: true + '@next/env@16.3.2': {} + + '@next/swc-darwin-arm64@16.3.2': + optional: true + + '@next/swc-darwin-x64@16.3.2': + optional: true + + '@next/swc-linux-arm64-gnu@16.3.2': + optional: true + + '@next/swc-linux-arm64-musl@16.3.2': + optional: true + + '@next/swc-linux-x64-gnu@16.3.2': + optional: true + + '@next/swc-linux-x64-musl@16.3.2': + optional: true + + '@next/swc-win32-arm64-msvc@16.3.2': + optional: true + + '@next/swc-win32-x64-msvc@16.3.2': + optional: true + '@noble/hashes@1.4.0': {} '@noble/hashes@2.3.0': {} @@ -3893,6 +5260,10 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@swc/helpers@0.5.23': + dependencies: + tslib: 2.8.1 + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 @@ -3958,12 +5329,20 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 - '@tailwindcss/vite@4.3.3(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))': + '@tailwindcss/postcss@4.3.3': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + postcss: 8.5.26 + tailwindcss: 4.3.3 + + '@tailwindcss/vite@4.3.3(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.3.3 '@tailwindcss/oxide': 4.3.3 tailwindcss: 4.3.3 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0) '@trycua/cua-driver-darwin-arm64@0.20.0': optional: true @@ -4058,6 +5437,8 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/mdx@2.0.14': {} + '@types/ms@2.1.0': {} '@types/node@24.13.3': @@ -4126,7 +5507,7 @@ snapshots: '@ungap/structured-clone@1.3.3': {} - '@vitejs/plugin-react@4.7.0(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))': + '@vitejs/plugin-react@4.7.0(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) @@ -4134,7 +5515,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -4147,13 +5528,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.10(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0))': + '@vitest/mocker@4.1.10(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -4181,10 +5562,63 @@ snapshots: '@xmldom/xmldom@0.8.13': {} + '@yuku-analyzer/binding-android-arm64@0.8.7': + optional: true + + '@yuku-analyzer/binding-darwin-arm64@0.8.7': + optional: true + + '@yuku-analyzer/binding-darwin-x64@0.8.7': + optional: true + + '@yuku-analyzer/binding-freebsd-x64@0.8.7': + optional: true + + '@yuku-analyzer/binding-linux-arm-gnu@0.8.7': + optional: true + + '@yuku-analyzer/binding-linux-arm-musl@0.8.7': + optional: true + + '@yuku-analyzer/binding-linux-arm64-gnu@0.8.7': + optional: true + + '@yuku-analyzer/binding-linux-arm64-musl@0.8.7': + optional: true + + '@yuku-analyzer/binding-linux-x64-gnu@0.8.7': + optional: true + + '@yuku-analyzer/binding-linux-x64-musl@0.8.7': + optional: true + + '@yuku-analyzer/binding-win32-arm64@0.8.7': + optional: true + + '@yuku-analyzer/binding-win32-x64@0.8.7': + optional: true + + '@yuku-toolchain/types@0.8.7': {} + + '@zeit/schemas@2.36.0': {} + abbrev@4.0.0: {} + acorn-jsx@5.3.2(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + + acorn@8.18.0: {} + agent-base@7.1.4: {} + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.5 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -4192,12 +5626,20 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + ansi-regex@5.0.1: {} + ansi-regex@6.3.0: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.3: {} + app-builder-lib@26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3): dependencies: '@electron/asar': 3.4.1 @@ -4246,6 +5688,10 @@ snapshots: transitivePeerDependencies: - supports-color + arch@2.2.0: {} + + arg@5.0.2: {} + argparse@2.0.1: {} asn1js@3.0.10: @@ -4256,6 +5702,8 @@ snapshots: assertion-error@2.0.1: {} + astring@1.9.0: {} + async-exit-hook@2.0.1: {} async@3.2.6: {} @@ -4283,6 +5731,17 @@ snapshots: boolean@3.2.0: optional: true + boxen@7.0.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + brace-expansion@1.1.18: dependencies: balanced-match: 1.0.2 @@ -4332,6 +5791,10 @@ snapshots: transitivePeerDependencies: - supports-color + bytes@3.0.0: {} + + bytes@3.1.2: {} + bytestreamjs@2.0.1: {} cacheable-lookup@5.0.4: {} @@ -4351,17 +5814,27 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 + camelcase@7.0.1: {} + caniuse-lite@1.0.30001809: {} ccount@2.0.1: {} chai@6.2.2: {} + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.0.1: {} + + chalk@5.6.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -4370,6 +5843,10 @@ snapshots: character-reference-invalid@2.0.1: {} + chokidar@5.0.0: + dependencies: + readdirp: 5.1.1 + chownr@3.0.0: {} chromium-pickle-js@0.2.0: {} @@ -4378,6 +5855,20 @@ snapshots: ci-info@4.4.0: {} + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + cli-boxes@3.0.0: {} + + client-only@0.0.1: {} + + clipboardy@3.0.0: + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -4390,6 +5881,10 @@ snapshots: clsx@2.1.1: {} + cnfast@0.1.0: {} + + collapse-white-space@2.1.0: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -4402,6 +5897,9 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@2.20.3: + optional: true + commander@5.1.0: {} commander@9.5.0: @@ -4409,11 +5907,31 @@ snapshots: compare-version@0.1.2: {} - concat-map@0.0.1: {} + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 - convert-source-map@2.0.0: {} + compression@1.8.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color - cookie@1.1.1: {} + compute-scroll-into-view@3.1.1: {} + + concat-map@0.0.1: {} + + content-disposition@0.5.2: {} + + convert-source-map@2.0.0: {} + + cookie@1.1.1: {} core-js@3.50.0: {} @@ -4430,6 +5948,10 @@ snapshots: csstype@3.2.3: {} + debug@2.6.9: + dependencies: + ms: 2.0.0 + debug@4.4.3: dependencies: ms: 2.1.3 @@ -4442,6 +5964,8 @@ snapshots: dependencies: mimic-response: 3.1.0 + deep-extend@0.6.0: {} + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -4464,6 +5988,8 @@ snapshots: detect-libc@2.1.2: {} + detect-node-es@1.1.0: {} + detect-node@2.1.0: optional: true @@ -4506,6 +6032,8 @@ snapshots: dependencies: readable-stream: 2.3.8 + eastasianwidth@0.2.0: {} + ejs@3.1.10: dependencies: jake: 10.9.4 @@ -4586,6 +6114,8 @@ snapshots: emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -4595,6 +6125,8 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.3 + entities@6.0.1: {} + env-paths@2.2.1: {} env-paths@3.0.0: {} @@ -4623,6 +6155,20 @@ snapshots: es6-error@4.1.1: optional: true + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.18.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + esbuild@0.28.1: optionalDependencies: '@esbuild/aix-ppc64': 0.28.1 @@ -4688,12 +6234,55 @@ snapshots: escape-string-regexp@5.0.0: {} + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + estree-util-is-identifier-name@3.0.0: {} + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-value-to-estree@3.5.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + expect-type@1.4.0: {} exponential-backoff@3.1.3: {} @@ -4722,6 +6311,15 @@ snapshots: hasown: 2.0.4 mime-types: 2.1.35 + framer-motion@13.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + motion-dom: 13.1.1 + motion-utils: 13.0.0 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -4764,6 +6362,73 @@ snapshots: fsevents@2.3.3: optional: true + fumadocs-core@16.14.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.33.0(react@19.2.8))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3): + dependencies: + '@fumari/image-size': 0.1.0 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + mdast-util-mdx: 3.0.0 + mdast-util-to-markdown: 2.1.2 + npm-to-yarn: 3.2.0 + remark: 15.0.1 + remark-gfm: 4.0.1 + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 4.4.3 + tinyglobby: 0.2.17 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + yaml: 2.9.0 + zbsearch: 4.0.0 + optionalDependencies: + '@mdx-js/mdx': 3.1.1 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + '@types/mdast': 4.0.4 + '@types/react': 19.2.18 + lucide-react: 1.33.0(react@19.2.8) + next: 16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + zod: 4.4.3 + transitivePeerDependencies: + - supports-color + + fumadocs-mdx@15.3.0(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.14.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.33.0(react@19.2.8))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0)): + dependencies: + '@mdx-js/mdx': 3.1.1 + '@standard-schema/spec': 1.1.0 + chokidar: 5.0.0 + esbuild: 0.28.2 + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 16.14.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.33.0(react@19.2.8))(next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(zod@4.4.3) + github-slugger: 2.0.0 + magic-string: 1.2.2 + mdast-util-mdx: 3.0.0 + picocolors: 1.1.1 + picomatch: 4.0.5 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + yaml: 2.9.0 + yuku-analyzer: 0.8.7 + zod: 4.4.3 + optionalDependencies: + '@types/mdast': 4.0.4 + '@types/mdx': 2.0.14 + '@types/react': 19.2.18 + next: 16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: 19.2.8 + vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0) + transitivePeerDependencies: + - supports-color + function-bind@1.1.2: {} gensync@1.0.0-beta.2: {} @@ -4783,6 +6448,8 @@ snapshots: hasown: 2.0.4 math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -4792,6 +6459,10 @@ snapshots: dependencies: pump: 3.0.4 + get-stream@6.0.1: {} + + github-slugger@2.0.0: {} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -4852,6 +6523,58 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.2.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.5 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.5 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.3 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + hast-util-to-html@9.0.5: dependencies: '@types/hast': 3.0.5 @@ -4886,10 +6609,28 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.5 + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.5 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 @@ -4919,6 +6660,8 @@ snapshots: transitivePeerDependencies: - supports-color + human-signals@2.1.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -4926,6 +6669,8 @@ snapshots: inherits@2.0.4: {} + ini@1.3.8: {} + inline-style-parser@0.2.7: {} is-alphabetical@2.0.1: {} @@ -4937,12 +6682,22 @@ snapshots: is-decimal@2.0.1: {} + is-docker@2.2.1: {} + is-fullwidth-code-point@3.0.0: {} is-hexadecimal@2.0.1: {} is-plain-obj@4.1.0: {} + is-port-reachable@4.0.0: {} + + is-stream@2.0.1: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + isarray@1.0.0: {} isbinaryfile@4.0.10: {} @@ -5069,10 +6824,20 @@ snapshots: dependencies: react: 19.2.8 + lucide-react@1.33.0(react@19.2.8): + dependencies: + react: 19.2.8 + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@1.2.2: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + markdown-extensions@2.0.0: {} + markdown-table@3.0.4: {} matcher@3.0.0: @@ -5191,6 +6956,16 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdxjs-esm@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 @@ -5235,6 +7010,8 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + merge-stream@2.0.0: {} + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -5312,6 +7089,57 @@ snapshots: micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.2 + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + micromark-factory-destination@2.0.1: dependencies: micromark-util-character: 2.1.1 @@ -5325,6 +7153,18 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + micromark-factory-space@2.0.1: dependencies: micromark-util-character: 2.1.1 @@ -5377,6 +7217,16 @@ snapshots: micromark-util-encode@2.0.1: {} + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + micromark-util-html-tag-name@2.0.1: {} micromark-util-normalize-identifier@2.0.1: @@ -5426,14 +7276,24 @@ snapshots: transitivePeerDependencies: - supports-color + mime-db@1.33.0: {} + mime-db@1.52.0: {} + mime-db@1.54.0: {} + + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + mime-types@2.1.35: dependencies: mime-db: 1.52.0 mime@2.6.0: {} + mimic-fn@2.1.0: {} + mimic-response@1.0.1: {} mimic-response@3.1.0: {} @@ -5478,10 +7338,58 @@ snapshots: dependencies: minimist: 1.2.8 + motion-dom@13.1.1: + dependencies: + motion-utils: 13.0.0 + + motion-utils@13.0.0: {} + + motion@13.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + framer-motion: 13.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + tslib: 2.8.1 + optionalDependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + ms@2.0.0: {} + ms@2.1.3: {} nanoid@3.3.18: {} + negotiator@0.6.4: {} + + next-themes@0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + + next@16.3.2(@babel/core@7.29.7)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + '@next/env': 16.3.2 + '@swc/helpers': 0.5.23 + baseline-browser-mapping: 2.11.13 + caniuse-lite: 1.0.30001809 + postcss: 8.5.23 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.8) + optionalDependencies: + '@next/swc-darwin-arm64': 16.3.2 + '@next/swc-darwin-x64': 16.3.2 + '@next/swc-linux-arm64-gnu': 16.3.2 + '@next/swc-linux-arm64-musl': 16.3.2 + '@next/swc-linux-x64-gnu': 16.3.2 + '@next/swc-linux-x64-musl': 16.3.2 + '@next/swc-win32-arm64-msvc': 16.3.2 + '@next/swc-win32-x64-msvc': 16.3.2 + sharp: 0.35.3(@types/node@26.2.0) + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - babel-plugin-macros + node-abi@4.33.0: dependencies: semver: 7.8.5 @@ -5513,15 +7421,27 @@ snapshots: normalize-url@6.1.0: {} + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-to-yarn@3.2.0: {} + object-keys@1.1.1: optional: true obug@2.1.4: {} + on-headers@1.1.0: {} + once@1.4.0: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + oniguruma-parser@0.12.2: {} oniguruma-to-es@4.3.6: @@ -5568,10 +7488,18 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse5@7.3.0: + dependencies: + entities: 6.0.1 + path-is-absolute@1.0.1: {} + path-is-inside@1.0.2: {} + path-key@3.1.1: {} + path-to-regexp@3.3.0: {} + path-to-regexp@6.3.0: {} pathe@2.0.3: {} @@ -5597,6 +7525,12 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 + postcss@8.5.23: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.26: dependencies: nanoid: 3.3.18 @@ -5663,6 +7597,15 @@ snapshots: quick-lru@5.1.1: {} + range-parser@1.2.0: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + react-dom@19.2.8(react@19.2.8): dependencies: react: 19.2.8 @@ -5688,6 +7631,33 @@ snapshots: react-refresh@0.17.0: {} + react-remove-scroll-bar@2.3.8(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.2.8) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + react-remove-scroll@2.7.2(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.18)(react@19.2.8) + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.2.8) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.18)(react@19.2.8) + use-sidecar: 1.1.3(@types/react@19.2.18)(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 + + react-style-singleton@2.2.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + get-nonce: 1.0.1 + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + react@19.2.8: {} read-binary-file-arch@1.0.6: @@ -5706,6 +7676,37 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 + readdirp@5.1.1: {} + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + regex-recursion@6.0.2: dependencies: regex-utilities: 2.3.0 @@ -5716,6 +7717,29 @@ snapshots: dependencies: regex-utilities: 2.3.0 + registry-auth-token@3.3.2: + dependencies: + rc: 1.2.8 + safe-buffer: 5.1.2 + + registry-url@3.1.0: + dependencies: + rc: 1.2.8 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.5 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.5 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + remark-gfm@4.0.1: dependencies: '@types/mdast': 4.0.4 @@ -5727,6 +7751,13 @@ snapshots: transitivePeerDependencies: - supports-color + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 @@ -5750,6 +7781,15 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -5758,6 +7798,8 @@ snapshots: dependencies: pe-library: 0.4.1 + reselect@5.2.0: {} + resolve-alpn@1.2.1: {} responselike@2.0.1: @@ -5814,6 +7856,8 @@ snapshots: safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} + sanitize-filename@1.6.4: dependencies: truncate-utf8-bytes: 1.0.2 @@ -5822,6 +7866,10 @@ snapshots: scheduler@0.27.0: {} + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + semver-compare@1.0.0: optional: true @@ -5838,6 +7886,32 @@ snapshots: type-fest: 0.13.1 optional: true + serve-handler@6.1.7: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.5 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + + serve@14.2.6: + dependencies: + '@zeit/schemas': 2.36.0 + ajv: 8.18.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.8.1 + is-port-reachable: 4.0.0 + serve-handler: 6.1.7 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color + sharp@0.35.2: dependencies: '@img/colour': 1.1.0 @@ -5870,6 +7944,40 @@ snapshots: '@img/sharp-win32-ia32': 0.35.2 '@img/sharp-win32-x64': 0.35.2 + sharp@0.35.3(@types/node@26.2.0): + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.3 + '@img/sharp-darwin-x64': 0.35.3 + '@img/sharp-freebsd-wasm32': 0.35.3 + '@img/sharp-libvips-darwin-arm64': 1.3.2 + '@img/sharp-libvips-darwin-x64': 1.3.2 + '@img/sharp-libvips-linux-arm': 1.3.2 + '@img/sharp-libvips-linux-arm64': 1.3.2 + '@img/sharp-libvips-linux-ppc64': 1.3.2 + '@img/sharp-libvips-linux-riscv64': 1.3.2 + '@img/sharp-libvips-linux-s390x': 1.3.2 + '@img/sharp-libvips-linux-x64': 1.3.2 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.2 + '@img/sharp-libvips-linuxmusl-x64': 1.3.2 + '@img/sharp-linux-arm': 0.35.3 + '@img/sharp-linux-arm64': 0.35.3 + '@img/sharp-linux-ppc64': 0.35.3 + '@img/sharp-linux-riscv64': 0.35.3 + '@img/sharp-linux-s390x': 0.35.3 + '@img/sharp-linux-x64': 0.35.3 + '@img/sharp-linuxmusl-arm64': 0.35.3 + '@img/sharp-linuxmusl-x64': 0.35.3 + '@img/sharp-webcontainers-wasm32': 0.35.3 + '@img/sharp-win32-arm64': 0.35.3 + '@img/sharp-win32-ia32': 0.35.3 + '@img/sharp-win32-x64': 0.35.3 + '@types/node': 26.2.0 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -5904,6 +8012,8 @@ snapshots: source-map@0.6.1: {} + source-map@0.7.6: {} + space-separated-tokens@2.0.2: {} sprintf-js@1.1.3: @@ -5921,6 +8031,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -5934,6 +8050,14 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.3.0 + + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -5942,6 +8066,13 @@ snapshots: dependencies: inline-style-parser: 0.2.7 + styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.8): + dependencies: + client-only: 0.0.1 + react: 19.2.8 + optionalDependencies: + '@babel/core': 7.29.7 + sumchecker@3.0.1: dependencies: debug: 4.4.3 @@ -5978,6 +8109,14 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.6.3 + terser@5.16.9: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.18.0 + commander: 2.20.3 + source-map-support: 0.5.21 + optional: true + tiny-async-pool@1.3.0: dependencies: semver: 5.7.2 @@ -6014,8 +8153,12 @@ snapshots: type-fest@0.13.1: optional: true + type-fest@2.19.0: {} + typescript@5.9.3: {} + typescript@6.0.3: {} + undici-types@7.18.2: {} undici-types@8.3.0: {} @@ -6042,10 +8185,19 @@ snapshots: dependencies: '@types/unist': 3.0.3 + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-position@5.0.0: dependencies: '@types/unist': 3.0.3 + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -6079,10 +8231,41 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-check@1.5.4: + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + + use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + use-sidecar@1.1.3(@types/react@19.2.18)(react@19.2.8): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.8 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.18 + + use-sync-external-store@1.6.0(react@19.2.8): + dependencies: + react: 19.2.8 + utf8-byte-length@1.0.5: {} util-deprecate@1.0.2: {} + vary@1.1.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 @@ -6093,7 +8276,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0): + vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0): dependencies: esbuild: 0.28.2 fdir: 6.5.0(picomatch@4.0.5) @@ -6106,11 +8289,13 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 lightningcss: 1.32.0 + terser: 5.16.9 + yaml: 2.9.0 - vitest@4.1.10(@types/node@26.2.0)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)): + vitest@4.1.10(@types/node@26.2.0)(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)) + '@vitest/mocker': 4.1.10(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -6127,13 +8312,15 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0) + vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.16.9)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.2.0 transitivePeerDependencies: - msw + web-namespaces@2.0.1: {} + web-vitals@5.3.0: {} web-vitals@6.0.0: {} @@ -6163,6 +8350,10 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + workerd@1.20260811.1: optionalDependencies: '@cloudflare/workerd-darwin-64': 1.20260811.1 @@ -6194,6 +8385,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + wrappy@1.0.2: {} ws@8.21.0: {} @@ -6208,6 +8405,8 @@ snapshots: yallist@5.0.0: {} + yaml@2.9.0: {} + yargs-parser@21.1.1: {} yargs@17.7.3: @@ -6235,6 +8434,30 @@ snapshots: cookie: 1.1.1 youch-core: 0.3.3 + yuku-analyzer@0.8.7: + dependencies: + '@yuku-toolchain/types': 0.8.7 + yuku-ast: 0.8.7 + optionalDependencies: + '@yuku-analyzer/binding-android-arm64': 0.8.7 + '@yuku-analyzer/binding-darwin-arm64': 0.8.7 + '@yuku-analyzer/binding-darwin-x64': 0.8.7 + '@yuku-analyzer/binding-freebsd-x64': 0.8.7 + '@yuku-analyzer/binding-linux-arm-gnu': 0.8.7 + '@yuku-analyzer/binding-linux-arm-musl': 0.8.7 + '@yuku-analyzer/binding-linux-arm64-gnu': 0.8.7 + '@yuku-analyzer/binding-linux-arm64-musl': 0.8.7 + '@yuku-analyzer/binding-linux-x64-gnu': 0.8.7 + '@yuku-analyzer/binding-linux-x64-musl': 0.8.7 + '@yuku-analyzer/binding-win32-arm64': 0.8.7 + '@yuku-analyzer/binding-win32-x64': 0.8.7 + + yuku-ast@0.8.7: + dependencies: + '@yuku-toolchain/types': 0.8.7 + + zbsearch@4.0.0: {} + zod@4.4.3: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a591e2239..013ee40ef 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,6 +3,7 @@ # A packages list is required for `pnpm list` (electron-builder's collector). packages: - "." + - "apps/docs" allowBuilds: electron: true # postinstall downloads the Electron dist esbuild: true # postinstall validates the platform binary From 592007feb08e7851cbf5a8d49a04f0515bfae205 Mon Sep 17 00:00:00 2001 From: milind-soni Date: Fri, 21 Aug 2026 18:12:01 +0530 Subject: [PATCH 2/2] docs: align site with OpenMausBot and expand guides --- apps/docs/.gitignore | 2 + apps/docs/AGENTS.md | 9 + apps/docs/CLAUDE.md | 1 + apps/docs/app/(home)/layout.tsx | 6 - apps/docs/app/(home)/page.tsx | 77 --- apps/docs/app/global.css | 194 +++++++- apps/docs/app/layout.tsx | 4 + apps/docs/app/page.tsx | 5 + apps/docs/components/brand-title.tsx | 11 + apps/docs/components/mdx.tsx | 2 + apps/docs/components/product-screenshot.tsx | 46 ++ apps/docs/content/docs/computers/index.mdx | 2 + .../content/docs/connected-apps/index.mdx | 34 +- .../docs/features/approvals-and-inspector.mdx | 21 + .../docs/features/attachments-and-search.mdx | 25 + .../docs/content/docs/features/automation.mdx | 2 + .../content/docs/features/bots-and-tasks.mdx | 34 ++ apps/docs/content/docs/features/meta.json | 2 +- .../docs/getting-started/first-bot.mdx | 53 ++- .../content/docs/getting-started/meta.json | 2 +- .../docs/getting-started/quick-tour.mdx | 36 ++ apps/docs/content/docs/index.mdx | 57 ++- apps/docs/content/docs/meta.json | 1 + apps/docs/content/docs/providers/index.mdx | 6 +- .../docs/troubleshooting/connected-apps.mdx | 26 + .../content/docs/troubleshooting/index.mdx | 26 + .../content/docs/troubleshooting/meta.json | 5 + .../troubleshooting/startup-and-ports.mdx | 24 + .../content/docs/troubleshooting/updates.mdx | 23 + apps/docs/lib/layout.shared.tsx | 11 +- apps/docs/lib/shared.ts | 2 +- apps/docs/next.config.mjs | 1 - apps/docs/package.json | 8 +- apps/docs/scripts/sync-assets.mjs | 16 + docs/screenshots/docs-automations.png | Bin 0 -> 36598 bytes docs/screenshots/docs-computer-panel.png | Bin 0 -> 64283 bytes docs/screenshots/docs-connected-apps.png | Bin 0 -> 52677 bytes docs/screenshots/docs-engine-detection.png | Bin 0 -> 40759 bytes docs/screenshots/docs-fresh-bot.png | Bin 0 -> 40753 bytes docs/screenshots/docs-model-picker.png | Bin 0 -> 54231 bytes docs/screenshots/docs-onboarding.png | Bin 0 -> 20771 bytes pnpm-lock.yaml | 448 ------------------ 42 files changed, 607 insertions(+), 615 deletions(-) create mode 100644 apps/docs/AGENTS.md create mode 100644 apps/docs/CLAUDE.md delete mode 100644 apps/docs/app/(home)/layout.tsx delete mode 100644 apps/docs/app/(home)/page.tsx create mode 100644 apps/docs/app/page.tsx create mode 100644 apps/docs/components/brand-title.tsx create mode 100644 apps/docs/components/product-screenshot.tsx create mode 100644 apps/docs/content/docs/features/approvals-and-inspector.mdx create mode 100644 apps/docs/content/docs/features/attachments-and-search.mdx create mode 100644 apps/docs/content/docs/features/bots-and-tasks.mdx create mode 100644 apps/docs/content/docs/getting-started/quick-tour.mdx create mode 100644 apps/docs/content/docs/troubleshooting/connected-apps.mdx create mode 100644 apps/docs/content/docs/troubleshooting/index.mdx create mode 100644 apps/docs/content/docs/troubleshooting/meta.json create mode 100644 apps/docs/content/docs/troubleshooting/startup-and-ports.mdx create mode 100644 apps/docs/content/docs/troubleshooting/updates.mdx create mode 100644 apps/docs/scripts/sync-assets.mjs create mode 100644 docs/screenshots/docs-automations.png create mode 100644 docs/screenshots/docs-computer-panel.png create mode 100644 docs/screenshots/docs-connected-apps.png create mode 100644 docs/screenshots/docs-engine-detection.png create mode 100644 docs/screenshots/docs-fresh-bot.png create mode 100644 docs/screenshots/docs-model-picker.png create mode 100644 docs/screenshots/docs-onboarding.png diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore index 2253f6f7b..b7b57197a 100644 --- a/apps/docs/.gitignore +++ b/apps/docs/.gitignore @@ -5,6 +5,8 @@ /.open-next /out /build +/public/app-icon.svg +/public/screenshots *.tsbuildinfo .DS_Store *.pem diff --git a/apps/docs/AGENTS.md b/apps/docs/AGENTS.md new file mode 100644 index 000000000..643577dfa --- /dev/null +++ b/apps/docs/AGENTS.md @@ -0,0 +1,9 @@ + + +# This is NOT the Next.js you know + +This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices. + +This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean. + + diff --git a/apps/docs/CLAUDE.md b/apps/docs/CLAUDE.md new file mode 100644 index 000000000..43c994c2d --- /dev/null +++ b/apps/docs/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/apps/docs/app/(home)/layout.tsx b/apps/docs/app/(home)/layout.tsx deleted file mode 100644 index 77379fac3..000000000 --- a/apps/docs/app/(home)/layout.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { HomeLayout } from 'fumadocs-ui/layouts/home'; -import { baseOptions } from '@/lib/layout.shared'; - -export default function Layout({ children }: LayoutProps<'/'>) { - return {children}; -} diff --git a/apps/docs/app/(home)/page.tsx b/apps/docs/app/(home)/page.tsx deleted file mode 100644 index 3cdbae4bb..000000000 --- a/apps/docs/app/(home)/page.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { ArrowRight, Bot, GitBranch, Laptop, PlugZap, ShieldCheck, Sparkles } from 'lucide-react'; -import Link from 'next/link'; - -const features = [ - { - icon: Bot, - title: 'Bring your own agents', - description: 'Run Claude, Codex, Grok, Cursor, Kimi, Droid, Qwen, Hermes, Pi, and more through their native CLIs.', - }, - { - icon: Laptop, - title: 'Give them computers', - description: 'Use this computer, an isolated Local VM, a Box cloud desktop, or your own Linux VPS.', - }, - { - icon: PlugZap, - title: 'Connect the apps you use', - description: 'Authorize Gmail, Slack, GitHub, Notion, and hundreds of other tools with account-aware connections.', - }, - { - icon: ShieldCheck, - title: 'Stay in control', - description: 'Review risky actions in chat. Credentials remain write-only and agent processes stay on your machine.', - }, -]; - -export default function HomePage() { - return ( -
-
-
-
- - Open source · local first · Apache 2.0 -
-

- Your own team of AI agents, in a chat app. -

-

- Learn how to install OpenMausBot, connect your agent CLIs, add computers and apps, automate work, and build on the harness. -

-
- - Get started - - - View on GitHub - -
-
- -
- {features.map(({ icon: Icon, title, description }) => ( -
-
- -
-

{title}

-

{description}

-
- ))} -
- -
-
-
-

Start with one bot

-

Install an agent CLI, sign in once, and OpenMausBot discovers it automatically.

-
- - Browse all documentation - -
-
-
- ); -} diff --git a/apps/docs/app/global.css b/apps/docs/app/global.css index ab99e74e5..4a5c3ad49 100644 --- a/apps/docs/app/global.css +++ b/apps/docs/app/global.css @@ -3,13 +3,45 @@ @import 'fumadocs-ui/css/preset.css'; :root { - --omb-blue: #2389ff; - --omb-cyan: #61d7ff; - --omb-ink: #07111f; + --omb-bg: #ffffff; + --omb-raised: #f7f8f8; + --omb-ink: #0a0a0b; + --omb-muted: #5f6570; + --omb-line: #e5e7ea; + --omb-accent: #009957; + --omb-accent-soft: #eaf8f1; + + --color-fd-background: var(--omb-bg); + --color-fd-foreground: var(--omb-ink); + --color-fd-muted: var(--omb-raised); + --color-fd-muted-foreground: var(--omb-muted); + --color-fd-border: var(--omb-line); + --color-fd-primary: var(--omb-accent); + --color-fd-primary-foreground: #ffffff; + --color-fd-card: var(--omb-bg); + --color-fd-card-foreground: var(--omb-ink); + --color-fd-secondary: var(--omb-raised); + --color-fd-secondary-foreground: var(--omb-ink); + --color-fd-accent: var(--omb-accent-soft); + --color-fd-accent-foreground: #006b3d; +} + +.dark { + --omb-bg: #070708; + --omb-raised: #131315; + --omb-ink: #f4f4f5; + --omb-muted: #9a9aa4; + --omb-line: #232327; + --omb-accent: #3fae6e; + --omb-accent-soft: #10271a; + + --color-fd-primary-foreground: #07130c; + --color-fd-accent-foreground: #7bd69e; } html { scrollbar-gutter: stable; + background: var(--omb-bg); } html > body[data-scroll-locked] { @@ -17,16 +49,152 @@ html > body[data-scroll-locked] { --removed-body-scroll-bar-size: 0px !important; } -.omb-hero-grid { - background-image: - linear-gradient(to right, color-mix(in srgb, var(--omb-blue) 10%, transparent) 1px, transparent 1px), - linear-gradient(to bottom, color-mix(in srgb, var(--omb-blue) 10%, transparent) 1px, transparent 1px); - background-size: 44px 44px; - mask-image: linear-gradient(to bottom, black, transparent 86%); +body { + background: + radial-gradient(circle at 75% -20%, color-mix(in srgb, var(--omb-accent) 8%, transparent), transparent 32rem), + var(--omb-bg); + color: var(--omb-ink); + letter-spacing: -0.012em; +} + +::selection { + background: color-mix(in srgb, var(--omb-accent) 24%, transparent); +} + +.omb-brand { + display: flex; + align-items: center; + gap: 0.65rem; + font-size: 0.9rem; + font-weight: 660; + letter-spacing: -0.02em; +} + +.omb-brand img { + width: 1.65rem; + height: 1.65rem; + border-radius: 0.5rem; +} + +.omb-brand-docs { + border-left: 1px solid var(--omb-line); + color: var(--omb-muted); + font-size: 0.78rem; + font-weight: 520; + letter-spacing: 0; + margin-left: 0.1rem; + padding-left: 0.7rem; +} + +.omb-product-shot { + margin: 2rem 0; +} + +.omb-product-shot-frame { + overflow: hidden; + border: 1px solid color-mix(in srgb, var(--omb-line) 88%, transparent); + border-radius: 1.25rem; + background: #0a0a0b; + box-shadow: + 0 1px 1px color-mix(in srgb, var(--omb-ink) 5%, transparent), + 0 22px 60px color-mix(in srgb, var(--omb-ink) 10%, transparent); +} + +.omb-product-shot img { + display: block; + width: 100%; + max-height: 38rem; + object-fit: cover; +} + +.omb-product-shot figcaption { + color: var(--omb-muted); + font-size: 0.78rem; + line-height: 1.5; + margin-top: 0.65rem; + text-align: center; +} + +.omb-kicker { + color: var(--omb-accent); + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.omb-lede { + color: var(--omb-muted); + font-size: 1.08rem; + line-height: 1.75; + max-width: 44rem; } -.omb-gradient-text { - background: linear-gradient(115deg, var(--omb-blue), var(--omb-cyan)); - background-clip: text; - color: transparent; +.omb-stat-row { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 0.75rem; + margin: 1.75rem 0; +} + +.omb-stat { + border: 1px solid var(--omb-line); + border-radius: 1rem; + background: color-mix(in srgb, var(--omb-raised) 78%, transparent); + padding: 1rem; +} + +.omb-stat strong, +.omb-stat span { + display: block; +} + +.omb-stat strong { + font-size: 1rem; + letter-spacing: -0.02em; +} + +.omb-stat span { + color: var(--omb-muted); + font-size: 0.78rem; + margin-top: 0.2rem; +} + +#nd-sidebar, +#nd-subnav { + background: color-mix(in srgb, var(--omb-bg) 92%, transparent); + backdrop-filter: blur(18px); +} + +#nd-sidebar { + border-right-color: var(--omb-line); +} + +#nd-subnav { + border-bottom-color: var(--omb-line); +} + +.prose :where(h2, h3, h4) { + letter-spacing: -0.035em; +} + +.prose :where(a:not([data-card])) { + text-decoration-color: color-mix(in srgb, var(--omb-accent) 45%, transparent); + text-underline-offset: 0.2em; +} + +.prose :where(table) { + overflow: hidden; + border: 1px solid var(--omb-line); + border-radius: 0.9rem; +} + +@media (max-width: 640px) { + .omb-stat-row { + grid-template-columns: 1fr; + } + + .omb-product-shot-frame { + border-radius: 0.9rem; + } } diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx index 8eee27e4c..561aa5739 100644 --- a/apps/docs/app/layout.tsx +++ b/apps/docs/app/layout.tsx @@ -17,6 +17,10 @@ export const metadata: Metadata = { description: 'Your own team of AI agents, in a chat app.', type: 'website', }, + icons: { + icon: '/app-icon.svg', + apple: '/app-icon.svg', + }, }; export default function Layout({ children }: LayoutProps<'/'>) { diff --git a/apps/docs/app/page.tsx b/apps/docs/app/page.tsx new file mode 100644 index 000000000..89a88707f --- /dev/null +++ b/apps/docs/app/page.tsx @@ -0,0 +1,5 @@ +import { permanentRedirect } from 'next/navigation'; + +export default function HomePage() { + permanentRedirect('/docs'); +} diff --git a/apps/docs/components/brand-title.tsx b/apps/docs/components/brand-title.tsx new file mode 100644 index 000000000..cd922c261 --- /dev/null +++ b/apps/docs/components/brand-title.tsx @@ -0,0 +1,11 @@ +export function BrandTitle() { + return ( + + + OpenMausBot + + Docs + + + ); +} diff --git a/apps/docs/components/mdx.tsx b/apps/docs/components/mdx.tsx index a640575f0..a6dd8aa01 100644 --- a/apps/docs/components/mdx.tsx +++ b/apps/docs/components/mdx.tsx @@ -1,9 +1,11 @@ import defaultMdxComponents from 'fumadocs-ui/mdx'; import type { MDXComponents } from 'mdx/types'; +import { ProductScreenshot } from './product-screenshot'; export function getMDXComponents(components?: MDXComponents) { return { ...defaultMdxComponents, + ProductScreenshot, ...components, } satisfies MDXComponents; } diff --git a/apps/docs/components/product-screenshot.tsx b/apps/docs/components/product-screenshot.tsx new file mode 100644 index 000000000..dc84232cf --- /dev/null +++ b/apps/docs/components/product-screenshot.tsx @@ -0,0 +1,46 @@ +const screenshotNames = [ + 'hero', + 'model-picker', + 'computer-panel', + 'approval-card', + 'marketplace', + 'composio-multi-account', + 'context-menu', + 'app-settings', + 'ubuntu-computer-panel', + 'docs-onboarding', + 'docs-engine-detection', + 'docs-fresh-bot', + 'docs-model-picker', + 'docs-computer-panel', + 'docs-connected-apps', + 'docs-automations', +] as const; + +type ScreenshotName = (typeof screenshotNames)[number]; + +export function ProductScreenshot({ + name, + alt, + caption, + position = 'center', +}: { + name: ScreenshotName; + alt: string; + caption?: string; + position?: 'center' | 'top'; +}) { + return ( +
+
+ {alt} +
+ {caption ?
{caption}
: null} +
+ ); +} diff --git a/apps/docs/content/docs/computers/index.mdx b/apps/docs/content/docs/computers/index.mdx index a03dbfa38..e181de00a 100644 --- a/apps/docs/content/docs/computers/index.mdx +++ b/apps/docs/content/docs/computers/index.mdx @@ -6,6 +6,8 @@ icon: Monitor A bot can work without a computer, use the computer running OpenMausBot, or work inside an isolated desktop. + + | Backend | Isolation | Best for | |---|---|---| | This computer | None | Working with local apps and files you explicitly approve | diff --git a/apps/docs/content/docs/connected-apps/index.mdx b/apps/docs/content/docs/connected-apps/index.mdx index 84fc0d995..60942d1ab 100644 --- a/apps/docs/content/docs/connected-apps/index.mdx +++ b/apps/docs/content/docs/connected-apps/index.mdx @@ -1,33 +1,37 @@ --- title: Connected apps -description: Authorize Gmail, Slack, GitHub, Notion, and hundreds of other tools through Composio. +description: Give bots secure, user-authorized tools for Gmail, GitHub, Slack, Notion, and hundreds more. icon: PlugZap --- -OpenMausBot uses Composio Sessions for connected apps. You provide one Composio project key, authorize services in your normal browser, and the resulting tools become available to bots. +Open **Connected apps** from the sidebar, choose a service, and complete its authorization in your normal browser. OpenMausBot turns the resulting connection into tools that supported agent engines can use. -### 1. Create or choose a Composio project + -Open the [Composio dashboard](https://dashboard.composio.dev), then go to **Platform → Settings → API Keys**. +## Official packaged app -### 2. Save the project key +The signed desktop app registers its own installation with OpenMausBot's managed connected-apps service. You do **not** need to find or paste a Composio key. -Copy the key beginning with `ak_` and save it under **App Settings → Connections**. OpenMausBot validates it before saving. +1. Open **Connected apps**. +2. Search for Gmail, GitHub, Slack, Notion, or another toolkit. +3. Select **Connect**. +4. Finish OAuth in the browser window that opens. +5. Return to the app and ask a bot to use the service. -### 3. Authorize an app +The installation identity is stored using Electron's operating-system-backed secure storage. Provider OAuth tokens remain with Composio and are not written into bot prompts or the renderer. -Open **Connected apps**, choose a toolkit such as Gmail or GitHub, and finish authorization in your browser. +## Self-hosted or source builds -### 4. Use it in chat +The managed service is a convenience for official packaged builds. A source build can use your own Composio project and `COMPOSIO_API_KEY`; see [Self-hosted Composio](./self-hosted-composio.mdx). -Ask a bot to use the connected service. The session exposes the service's tools to supported agents. +## Multiple accounts -## Credential boundary +Connect more than one account for the same toolkit and give each a clear alias such as `work`, `personal`, or `client-acme`. When several accounts could perform an action, OpenMausBot requires explicit selection instead of silently replacing the first connection. -Provider OAuth tokens stay with Composio. OpenMausBot stores its project key and non-secret session identifiers. In packaged desktop builds, the project key is protected with Electron's operating-system-backed secure storage. +## Disconnecting -Disconnecting an account revokes the upstream grant rather than only hiding it locally. +Disconnecting an account revokes the upstream grant. It does not only hide the account in the local UI. Other accounts for the same toolkit remain connected. - - Current OpenMausBot builds use one Composio project key. The older two-key Connect setup has been removed. + + Current official builds provision connected apps automatically. A Composio project key is only needed when you deliberately run the integration yourself. diff --git a/apps/docs/content/docs/features/approvals-and-inspector.mdx b/apps/docs/content/docs/features/approvals-and-inspector.mdx new file mode 100644 index 000000000..3ad152069 --- /dev/null +++ b/apps/docs/content/docs/features/approvals-and-inspector.mdx @@ -0,0 +1,21 @@ +--- +title: Approvals and inspector +description: Stay in control when agents ask questions, request access, or perform risky work. +icon: ShieldCheck +--- + +OpenMausBot renders structured agent events as native conversation cards. Questions, choices, permission requests, tool activity, and failures remain attached to the task that produced them. + +## Approval cards + +When an engine supports approvals, OpenMausBot surfaces the request instead of hiding it in terminal output. Read the requested action and scope before approving it. Denying an action sends control back to the agent so it can choose a safer path. + + + +## Inspector + +Use **Inspector** when you need more detail than the conversation provides. It is useful for following tool calls, reconnect attempts, engine output, and long-running work. + +## When a run disconnects + +OpenMausBot retries transient streaming failures. If retries end in an authentication or configuration error, fix the underlying engine rather than repeatedly retrying the task. See [Agent engine troubleshooting](../providers/troubleshooting.mdx). diff --git a/apps/docs/content/docs/features/attachments-and-search.mdx b/apps/docs/content/docs/features/attachments-and-search.mdx new file mode 100644 index 000000000..028cd0a6f --- /dev/null +++ b/apps/docs/content/docs/features/attachments-and-search.mdx @@ -0,0 +1,25 @@ +--- +title: Attachments, search, and message tools +description: Add visual context and find, preserve, or reuse important parts of a conversation. +icon: Paperclip +--- + +## Image attachments + +Paste a screenshot directly into the composer or attach an image from disk. Add a short instruction explaining what the agent should inspect—the highlighted UI, an error message, a layout mismatch, or the whole image. + +## Search + +The sidebar search finds bots and conversation content. Use distinctive project names, issue numbers, or exact error fragments to narrow results quickly. + +## Message actions + +- **Pin** durable decisions or instructions. +- **Copy** a response without selecting the message manually. +- **React** to leave lightweight feedback in shared conversations. +- **Retry** when a transient provider or connection failure interrupts a response. +- **Read aloud** when voice output is configured. + + + Crop tokens, email addresses, private repository names, and customer data before attaching an image to any cloud-backed model. + diff --git a/apps/docs/content/docs/features/automation.mdx b/apps/docs/content/docs/features/automation.mdx index 1996071df..347f8adf3 100644 --- a/apps/docs/content/docs/features/automation.mdx +++ b/apps/docs/content/docs/features/automation.mdx @@ -8,6 +8,8 @@ icon: CalendarClock A routine runs once or on selected weekdays. Each run starts a fresh task using the selected bot's model, permissions, tools, and computer configuration. + + Run receipts distinguish queued, active, waiting, completed, missed, failed, and cancelled work. OpenMausBot must be running when a local routine becomes due. ## Webhook triggers diff --git a/apps/docs/content/docs/features/bots-and-tasks.mdx b/apps/docs/content/docs/features/bots-and-tasks.mdx new file mode 100644 index 000000000..2b2abbee0 --- /dev/null +++ b/apps/docs/content/docs/features/bots-and-tasks.mdx @@ -0,0 +1,34 @@ +--- +title: Bots and tasks +description: Organize persistent agents, focused tasks, shared rooms, and delegated work. +icon: Bot +--- + +## Bots are persistent teammates + +A bot keeps its own conversation, model, instructions, working folder, memory, connected tools, and computer preference. Create separate bots when the role, access, or project context should differ. + +- A coding bot attached to one repository +- A research bot with browser and document tools +- An operations bot with Gmail, Calendar, and Slack +- A local-model bot for private or offline work + +## Tasks are focused runs + +Use **Task** when the work should have a clear beginning and result. Tasks are easier to track than mixing every request into the bot's main conversation, and scheduled runs create tasks automatically. + +## Rooms and teams + +Rooms let multiple bots and people share context. Use a room when several specialists need the same brief or should hand work to one another. A chief-of-staff pattern works well: one bot receives the request, delegates focused tasks, and summarizes the result. + +## Delegation + +Delegation asks another bot to handle a bounded subtask. The delegated task keeps its own activity and returns a result to the originating conversation. Give each delegate a narrow outcome and avoid assigning two bots ownership of the same files. + +| Need | Use | +|---|---| +| Ongoing relationship and memory | Bot | +| One deliverable with a status | Task | +| Several participants sharing context | Room | +| A specialist handling one branch of work | Delegation | +| Repeated work at a known time | Schedule | diff --git a/apps/docs/content/docs/features/meta.json b/apps/docs/content/docs/features/meta.json index ffc2817aa..1655482ac 100644 --- a/apps/docs/content/docs/features/meta.json +++ b/apps/docs/content/docs/features/meta.json @@ -1,5 +1,5 @@ { "title": "Features", "icon": "Sparkles", - "pages": ["index", "chat-and-teams", "automation", "voice-and-memory"] + "pages": ["index", "bots-and-tasks", "chat-and-teams", "approvals-and-inspector", "attachments-and-search", "automation", "voice-and-memory"] } diff --git a/apps/docs/content/docs/getting-started/first-bot.mdx b/apps/docs/content/docs/getting-started/first-bot.mdx index 807404305..284473096 100644 --- a/apps/docs/content/docs/getting-started/first-bot.mdx +++ b/apps/docs/content/docs/getting-started/first-bot.mdx @@ -1,41 +1,48 @@ --- -title: Your first bot -description: Create a bot, choose its model, and send a useful first task. +title: Create your first bot +description: Choose an engine, folder, and working style for a useful first agent. icon: Bot --- -## Before you begin +## Before you start -Confirm that at least one engine is available in the model picker. If every engine is dimmed, finish the provider's CLI sign-in and restart OpenMausBot. +Install and sign in to at least one supported agent CLI. OpenMausBot detects installed engines during onboarding and again from **App settings → Agent engines**. -### 1. Create a bot + -Use the add button in the sidebar, give the bot a clear name, and describe the role you want it to play. +## Create the bot -### 2. Pick an engine and model +1. Select **New or share** in the sidebar. +2. Choose **New bot**. +3. Give the bot a clear name and purpose. +4. Select its agent engine and model. +5. Choose a working folder if it should edit files or work in a repository. -Open the model picker in the conversation header. Choose an available provider and model. You can change this later without creating another bot. +The working folder matters: it becomes the bot's starting context and limits accidental edits elsewhere. Use a dedicated project folder for coding, research, or content work. -### 3. Decide where it can work +## Give it a useful first task -Start with no computer for research and coding on your local workspace. Choose a computer only when the task needs a desktop, browser, or isolated environment. +Start with a concrete outcome and the constraints that matter: -### 4. Send a concrete task +```text +Review this project, run the tests, and explain the three highest-impact issues. +Do not change files yet. Link each finding to the relevant file. +``` -Include the outcome, relevant files or services, and any constraints. OpenMausBot streams progress and shows approvals or questions in the chat. +Once you trust the diagnosis, ask the bot to implement the change. This keeps review and mutation as separate, easy-to-check steps. -## A good first message +## Tune the bot -```text -Review this repository, explain its architecture in plain language, -and list the three highest-impact improvements. Do not edit anything yet. -``` +Open **Bot settings** to change its name, avatar, instructions, engine, model, working folder, and computer setup. Different bots can use different engines and folders at the same time. -This tests model access, streaming, workspace visibility, and approval behavior without making changes. + + OpenMausBot launches agent tools you installed. If an engine returns a 401 or asks you to sign in, finish that engine's own CLI login, then refresh detection in App settings. + -## Add more capability later +## Next steps -- [Connect apps](../connected-apps/index.mdx) when the bot needs Gmail, Slack, GitHub, Notion, or another service. -- [Choose a computer](../computers/index.mdx) when it needs a browser or desktop. -- Create a room when several specialized bots should work together. -- Turn a repeatable request into a routine or webhook trigger. + + + + + diff --git a/apps/docs/content/docs/getting-started/meta.json b/apps/docs/content/docs/getting-started/meta.json index 6996e0964..129064390 100644 --- a/apps/docs/content/docs/getting-started/meta.json +++ b/apps/docs/content/docs/getting-started/meta.json @@ -1,5 +1,5 @@ { "title": "Getting started", "icon": "Rocket", - "pages": ["installation", "first-bot", "configuration"] + "pages": ["installation", "quick-tour", "first-bot", "configuration"] } diff --git a/apps/docs/content/docs/getting-started/quick-tour.mdx b/apps/docs/content/docs/getting-started/quick-tour.mdx new file mode 100644 index 000000000..6d5a6e911 --- /dev/null +++ b/apps/docs/content/docs/getting-started/quick-tour.mdx @@ -0,0 +1,36 @@ +--- +title: Quick tour +description: Learn the six parts of OpenMausBot before handing your first job to an agent. +icon: Map +--- + +## 1. Sidebar + +The sidebar holds your bots, groups, automations, connected apps, profile, and app settings. Search looks through bot names and message history. Use **New or share** to create a bot or start a shared room. + +## 2. Conversation + +Messages are the work log. Agent replies, questions, approval requests, tool progress, attachments, and failures stay together in the conversation. You can pin, copy, react to, search, and retry messages. + +## 3. Task mode + +The **Task** button starts a separate unit of work without losing the main conversation. A task keeps its own status and result, which is useful for parallel or delegated work. + +## 4. Model picker + +Pick an agent engine and model per bot. The picker separates cloud-backed agent CLIs from local engines and shows what is installed on this machine. + + + +## 5. Computer and inspector + +Open **Bot's computer** to choose where visual work runs. Open **Inspector** to follow lower-level activity when a task is executing. + +## 6. Connected apps and automations + +Connected apps give bots authenticated tools. Automations turn a good prompt into scheduled or webhook-triggered work. + + + + + diff --git a/apps/docs/content/docs/index.mdx b/apps/docs/content/docs/index.mdx index 22d9547fa..a49feceb5 100644 --- a/apps/docs/content/docs/index.mdx +++ b/apps/docs/content/docs/index.mdx @@ -1,37 +1,52 @@ --- title: OpenMausBot documentation -description: Everything you need to run, configure, and contribute to your local-first team of AI agents. +description: Build a team of AI agents that can talk, use tools, operate computers, and keep working on a schedule. icon: BookOpen --- -OpenMausBot is a desktop chat app where every contact is a real AI agent. Each bot can have its own model, personality, tasks, connected apps, and computer. +Local-first agent workspace + +OpenMausBot turns agent CLIs into a familiar desktop chat app. Each bot can have its own model, instructions, working folder, connected apps, computer, and recurring work. + +
+
Many enginesClaude, Codex, Grok, Cursor, local models, and more
+
Real toolsApps, files, terminals, browsers, VMs, and cloud desktops
+
Your machineLocal data and bring-your-own agent subscriptions
+
+ + - - - - + + + + -## The short version +## How the pieces fit -- **Bring your own agents.** OpenMausBot runs supported agent CLIs installed and authenticated on your machine. -- **Local first.** Conversations, credentials, configuration, and agent processes stay on your computer by default. -- **Agents with hands.** Give a bot a local computer, an isolated VM, a cloud desktop, or a hardened VPS container. -- **Approval aware.** Risky actions and questions appear as cards in the conversation. -- **Open source.** The source is available under Apache License 2.0. - - - OpenMausBot is moving quickly. Use the changelog for release-level changes and the GitHub repository for work that has not shipped yet. - +| Layer | What it does | Where to configure it | +|---|---|---| +| **Bot** | Holds the identity, conversation, memory, and defaults | Bot settings | +| **Agent engine** | Runs the reasoning loop and tools | Model picker and App settings | +| **Working folder** | Gives the bot project context and a safe place to work | Bot settings | +| **Connected apps** | Authorizes services such as Gmail or GitHub | Connected apps | +| **Computer** | Gives visual control of a desktop environment | Computer panel | +| **Automation** | Runs a task later, on a schedule, or from a webhook | Automations | ## Choose your path | I want to… | Start here | |---|---| -| Install the desktop app | [Installation](./getting-started/installation.mdx) | -| Use Claude, Codex, Cursor, Grok, or another engine | [Agent engines](./providers/index.mdx) | -| Let a bot use a computer | [Computers](./computers/index.mdx) | -| Connect Gmail, Slack, GitHub, or Notion | [Connected apps](./connected-apps/index.mdx) | -| Reach my bots from iPhone | [iOS companion](./mobile/ios-companion.mdx) | +| Understand the app in five minutes | [Quick tour](./getting-started/quick-tour.mdx) | +| Pick Claude, Codex, Cursor, Grok, or a local model | [Agent engines](./providers/index.mdx) | +| Organize bots, tasks, rooms, and delegations | [Bots and tasks](./features/bots-and-tasks.mdx) | +| Control a browser or desktop | [Computers](./computers/index.mdx) | +| Run work every morning | [Automations](./features/automation.mdx) | +| Reach my bots from an iPhone | [iOS companion](./mobile/ios-companion.mdx) | +| Back up or move my data | [Data and backups](./self-hosting/data-and-backups.mdx) | | Build from source or contribute | [Contributing](./contributing/index.mdx) | + + + OpenMausBot moves quickly. The changelog records shipped releases; proposed or unfinished work stays on GitHub until it lands. + diff --git a/apps/docs/content/docs/meta.json b/apps/docs/content/docs/meta.json index 1169632b5..99a9913e8 100644 --- a/apps/docs/content/docs/meta.json +++ b/apps/docs/content/docs/meta.json @@ -11,6 +11,7 @@ "mobile", "self-hosting", "security", + "troubleshooting", "changelog", "contributing" ] diff --git a/apps/docs/content/docs/providers/index.mdx b/apps/docs/content/docs/providers/index.mdx index 75599762c..af9566ae4 100644 --- a/apps/docs/content/docs/providers/index.mdx +++ b/apps/docs/content/docs/providers/index.mdx @@ -6,6 +6,8 @@ icon: BrainCircuit OpenMausBot does not proxy every message through its own model account. It starts supported agent CLIs on your computer and normalizes their output through the local harness. + + ## Built-in engines | Engine | Authentication shape | Notes | @@ -17,7 +19,7 @@ OpenMausBot does not proxy every message through its own model account. It start | Kimi | Kimi CLI login | ACP integration | | Droid | Factory Droid CLI login | ACP integration | | Antigravity | Google Antigravity CLI login | Default Google consumer engine | -| OpenCode Go | API key | ACP integration | +| OpenCode Go | OpenCode login | ACP integration | | Qwen | Qwen CLI login | ACP integration | | Hermes | Hermes CLI login | ACP integration | | Pi | Pi CLI login | Native driver | @@ -34,6 +36,8 @@ If detection fails, use **Settings → Engines** to set an explicit executable p The model picker groups models by provider and marks defaults. Supported engines can refresh their model catalog from the installed CLI. Changing the model affects future turns; it does not rewrite earlier transcript history. + + Your existing CLI login or provider API key determines access and billing. OpenMausBot does not turn one subscription into access to another provider. diff --git a/apps/docs/content/docs/troubleshooting/connected-apps.mdx b/apps/docs/content/docs/troubleshooting/connected-apps.mdx new file mode 100644 index 000000000..c90c99524 --- /dev/null +++ b/apps/docs/content/docs/troubleshooting/connected-apps.mdx @@ -0,0 +1,26 @@ +--- +title: Connected apps +description: Fix OAuth loops, missing tools, and connections that appear to vanish. +icon: Unplug +--- + +## Connection completes but the app still shows disconnected + +1. Return to OpenMausBot after the browser confirms success. +2. Open **Connected apps** and use **Refresh connection status**. +3. Check the **Connected** tab for the account, including its alias. +4. Retry from the original bot after the account appears active. + +## The account is connected but the agent cannot use it + +Start a new task after connecting the app so the engine receives a fresh tool catalog. Name the service and account explicitly in the request. If several accounts are connected, select or mention the intended alias. + +Some engines expose connected tools differently. Verify the chosen engine supports MCP or the connected-tool bridge used by the app. + +## Official build says the service is unavailable + +Check internet connectivity and try again later before reconnecting every account. The packaged app preserves its installation identity across transient broker outages; rotating or deleting local credentials during an outage can separate existing grants from the installation. + +## Self-hosted build asks for configuration + +Source and self-hosted builds do not automatically use the official managed service. Configure your own Composio project as described in [Self-hosted Composio](../connected-apps/self-hosted-composio.mdx). diff --git a/apps/docs/content/docs/troubleshooting/index.mdx b/apps/docs/content/docs/troubleshooting/index.mdx new file mode 100644 index 000000000..acb0c044e --- /dev/null +++ b/apps/docs/content/docs/troubleshooting/index.mdx @@ -0,0 +1,26 @@ +--- +title: Troubleshooting +description: Find the failing layer first, then apply the smallest safe fix. +icon: Wrench +--- + +Most OpenMausBot failures come from one of four layers: the desktop app, a local agent CLI, a connected service, or a computer backend. + + + + + + + + +## Collect useful evidence + +Before opening an issue, record: + +- OpenMausBot version and operating system; +- selected engine and model; +- the exact visible error, not only “it failed”; +- whether the same agent CLI works directly in a terminal; +- whether restarting only the affected task changes the result. + +Never post API keys, OAuth callback URLs, bearer tokens, or the contents of secure credential files. diff --git a/apps/docs/content/docs/troubleshooting/meta.json b/apps/docs/content/docs/troubleshooting/meta.json new file mode 100644 index 000000000..212e90199 --- /dev/null +++ b/apps/docs/content/docs/troubleshooting/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Troubleshooting", + "icon": "Wrench", + "pages": ["index", "startup-and-ports", "updates", "connected-apps"] +} diff --git a/apps/docs/content/docs/troubleshooting/startup-and-ports.mdx b/apps/docs/content/docs/troubleshooting/startup-and-ports.mdx new file mode 100644 index 000000000..d15038636 --- /dev/null +++ b/apps/docs/content/docs/troubleshooting/startup-and-ports.mdx @@ -0,0 +1,24 @@ +--- +title: App startup and ports +description: Diagnose launch failures and local server conflicts. +icon: Power +--- + +The Electron app starts a local harness and serves the interface from the same machine. The normal port is `8799`. If another process already owns it, packaged builds may select a fallback port automatically. + +## App opens but never becomes ready + +1. Quit every OpenMausBot window. +2. Confirm no old OpenMausBot process remains. +3. Start the app once and wait for the local harness. +4. If it still fails, inspect the desktop log. + +On macOS, packaged logs are under `~/Library/Logs/OpenMausBot`. On Windows they are under the OpenMausBot log directory in `%APPDATA%`. + +## Development port overrides + +Use `OMB_PORT` for a source-run harness. A packaged desktop build owns its server lifecycle and may choose a fallback if the preferred port is unavailable. + +## Isolate a test profile + +Developers can set `OMB_DATA_DIR` to run against a clean OpenMausBot data directory. This is useful for reproduction and screenshots without touching a real workspace. diff --git a/apps/docs/content/docs/troubleshooting/updates.mdx b/apps/docs/content/docs/troubleshooting/updates.mdx new file mode 100644 index 000000000..669611cf1 --- /dev/null +++ b/apps/docs/content/docs/troubleshooting/updates.mdx @@ -0,0 +1,23 @@ +--- +title: Desktop updates +description: Recover from a stuck download or restart and understand supported update paths. +icon: RefreshCw +--- + +Automatic updates are available on macOS and Windows. Ubuntu packages are updated by installing a newly downloaded package. + +## The download keeps spinning + +Leave the app open long enough for one complete attempt, then quit and reopen it. A failed differential update should fall back to the full package. If the same release remains stuck, download the current installer from the [official releases repository](https://github.com/milind-soni/openmausbot-releases/releases/latest) and install it over the existing copy. + +## Restart to update does nothing + +Quit OpenMausBot completely and launch it again. If the version did not change, install the latest release manually. Your conversations and settings live outside the application bundle and are not removed by replacing the app. + +## Verify the installed version + +Open **App settings** and check the displayed version. A commit merged to `main` is not in the desktop app until a release workflow publishes a new version. + + + Do not install update files forwarded through chat or uploaded to an unrelated repository. Use the OpenMausBot releases repository and its checksums. + diff --git a/apps/docs/lib/layout.shared.tsx b/apps/docs/lib/layout.shared.tsx index 18c13fd9a..b5d3c29ad 100644 --- a/apps/docs/lib/layout.shared.tsx +++ b/apps/docs/lib/layout.shared.tsx @@ -1,15 +1,18 @@ import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared'; -import { appName, gitConfig } from './shared'; +import { BrandTitle } from '@/components/brand-title'; +import { gitConfig } from './shared'; export function baseOptions(): BaseLayoutProps { return { nav: { - title: appName, - transparentMode: 'top', + title: , + url: '/docs', + transparentMode: 'none', }, links: [ + { text: 'Website', url: 'https://www.openmausbot.com', external: true }, { text: 'Changelog', url: '/docs/changelog' }, - { text: 'Download', url: 'https://github.com/milind-soni/openmausbot-releases/releases/latest', external: true }, + { type: 'button', text: 'Download', url: 'https://github.com/milind-soni/openmausbot-releases/releases/latest', external: true }, ], githubUrl: `https://github.com/${gitConfig.user}/${gitConfig.repo}`, }; diff --git a/apps/docs/lib/shared.ts b/apps/docs/lib/shared.ts index 359ea2611..a7ab12b07 100644 --- a/apps/docs/lib/shared.ts +++ b/apps/docs/lib/shared.ts @@ -1,7 +1,7 @@ -export const appName = 'OpenMausBot'; export const docsRoute = '/docs'; export const docsImageRoute = '/og/docs'; export const docsContentRoute = '/llms.mdx/docs'; +export const appName = 'OpenMausBot Docs'; export const gitConfig = { user: 'milind-soni', diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs index 219f24dee..457dcf29d 100644 --- a/apps/docs/next.config.mjs +++ b/apps/docs/next.config.mjs @@ -4,7 +4,6 @@ const withMDX = createMDX(); /** @type {import('next').NextConfig} */ const config = { - output: 'export', reactStrictMode: true, }; diff --git a/apps/docs/package.json b/apps/docs/package.json index 7fd5a4ced..74ce641aa 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -3,12 +3,15 @@ "version": "0.1.0", "private": true, "scripts": { + "assets:sync": "node scripts/sync-assets.mjs", + "prebuild": "pnpm assets:sync", + "predev": "pnpm assets:sync", "build": "next build", "dev": "next dev", - "start": "serve out", + "start": "next start", "types:check": "next typegen && tsc --noEmit", "lint": "oxlint .", - "preview": "serve out" + "preview": "next start" }, "dependencies": { "cnfast": "^0.1.0", @@ -28,7 +31,6 @@ "@types/react-dom": "^19.2.4", "oxlint": "^1.78.0", "postcss": "^8.5.26", - "serve": "^14.2.6", "tailwindcss": "^4.3.3", "typescript": "^6.0.3" } diff --git a/apps/docs/scripts/sync-assets.mjs b/apps/docs/scripts/sync-assets.mjs new file mode 100644 index 000000000..e8e50669b --- /dev/null +++ b/apps/docs/scripts/sync-assets.mjs @@ -0,0 +1,16 @@ +import { copyFile, mkdir, readdir } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; + +const screenshotsSource = fileURLToPath(new URL('../../../docs/screenshots/', import.meta.url)); +const screenshotsTarget = fileURLToPath(new URL('../public/screenshots/', import.meta.url)); +const iconSource = fileURLToPath(new URL('../../../public/app-icon.svg', import.meta.url)); +const iconTarget = fileURLToPath(new URL('../public/app-icon.svg', import.meta.url)); + +await mkdir(screenshotsTarget, { recursive: true }); + +for (const name of await readdir(screenshotsSource)) { + if (!/\.(png|jpe?g|webp)$/i.test(name)) continue; + await copyFile(`${screenshotsSource}/${name}`, `${screenshotsTarget}/${name}`); +} + +await copyFile(iconSource, iconTarget); diff --git a/docs/screenshots/docs-automations.png b/docs/screenshots/docs-automations.png new file mode 100644 index 0000000000000000000000000000000000000000..5c449afd35287f52abbcb4ff892ea50b8d6fbe56 GIT binary patch literal 36598 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ξ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 C8uJ(c literal 0 HcmV?d00001 diff --git a/docs/screenshots/docs-engine-detection.png b/docs/screenshots/docs-engine-detection.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5d7c0dea19a835e15d2f948cfef5f71a3e20fa GIT binary patch literal 40759 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/docs-model-picker.png b/docs/screenshots/docs-model-picker.png new file mode 100644 index 0000000000000000000000000000000000000000..87bf5d2f5911ceae841fc34a2dd5315bb47b7f2d GIT binary patch literal 54231 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 literal 0 HcmV?d00001 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4ec265276..34a60a829 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -142,9 +142,6 @@ importers: postcss: specifier: ^8.5.26 version: 8.5.26 - serve: - specifier: ^14.2.6 - version: 14.2.6 tailwindcss: specifier: ^4.3.3 version: 4.3.3 @@ -1885,9 +1882,6 @@ packages: '@yuku-toolchain/types@0.8.7': resolution: {integrity: sha512-2Z53dNxAJL6UvFoIrDZvYf3zlO8s4VJK4O2hhaB4mXVwwpX/7ajtss3cmfqKvamlNLWyt9FSWs4eoYdlbxpnHA==} - '@zeit/schemas@2.36.0': - resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} - abbrev@4.0.0: resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} engines: {node: ^20.17.0 || >=22.9.0} @@ -1906,31 +1900,17 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.3.0: - resolution: {integrity: sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==} - engines: {node: '>=12'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - app-builder-lib@26.15.3: resolution: {integrity: sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==} engines: {node: '>=14.0.0'} @@ -1938,12 +1918,6 @@ packages: dmg-builder: 26.15.3 electron-builder-squirrel-windows: 26.15.3 - arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -2004,10 +1978,6 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - boxen@7.0.0: - resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} - engines: {node: '>=14.16'} - brace-expansion@1.1.18: resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} @@ -2034,14 +2004,6 @@ packages: resolution: {integrity: sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==} engines: {node: '>=14.0.0'} - bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - bytestreamjs@2.0.1: resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} @@ -2058,10 +2020,6 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - caniuse-lite@1.0.30001809: resolution: {integrity: sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==} @@ -2072,22 +2030,10 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk-template@0.4.0: - resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} - engines: {node: '>=12'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.0.1: - resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -2122,17 +2068,9 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - clipboardy@3.0.0: - resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2180,24 +2118,12 @@ packages: resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} engines: {node: '>=0.10.0'} - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.8.1: - resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} - engines: {node: '>= 0.8.0'} - compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - content-disposition@0.5.2: - resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} - engines: {node: '>= 0.6'} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2221,14 +2147,6 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2245,10 +2163,6 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -2306,9 +2220,6 @@ packages: duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} @@ -2343,9 +2254,6 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -2445,10 +2353,6 @@ packages: estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - expect-type@1.4.0: resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} @@ -2650,10 +2554,6 @@ packages: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -2751,10 +2651,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -2762,9 +2658,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -2777,11 +2670,6 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -2793,18 +2681,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-port-reachable@4.0.0: - resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -3055,9 +2931,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -3163,22 +3036,10 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - mime-db@1.33.0: - resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} - engines: {node: '>= 0.6'} - mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.18: - resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} - engines: {node: '>= 0.6'} - mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -3188,10 +3049,6 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -3251,9 +3108,6 @@ packages: react-dom: optional: true - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3262,10 +3116,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: @@ -3321,10 +3171,6 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - npm-to-yarn@3.2.0: resolution: {integrity: sha512-K1HmQeZT2HrjpsR6KgqbN2FAXL2NrJJmNUSD9ck7HGTVu1JKXox8n9SB+tjbU8m8JGLF4OscrroPepew/L7/Xw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3337,17 +3183,9 @@ packages: resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} engines: {node: '>=12.20.0'} - on-headers@1.1.0: - resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} - engines: {node: '>= 0.8'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - oniguruma-parser@0.12.2: resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} @@ -3385,16 +3223,10 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-to-regexp@3.3.0: - resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} - path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -3487,14 +3319,6 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - range-parser@1.2.0: - resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} - engines: {node: '>= 0.6'} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - react-dom@19.2.8: resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} peerDependencies: @@ -3578,13 +3402,6 @@ packages: regex@6.1.0: resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} - registry-auth-token@3.3.2: - resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} - - registry-url@3.1.0: - resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} - engines: {node: '>=0.10.0'} - rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -3651,9 +3468,6 @@ packages: safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} @@ -3692,14 +3506,6 @@ packages: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} - serve-handler@6.1.7: - resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} - - serve@14.2.6: - resolution: {integrity: sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==} - engines: {node: '>= 14'} - hasBin: true - sharp@0.35.2: resolution: {integrity: sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==} engines: {node: '>=20.9.0'} @@ -3770,10 +3576,6 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -3784,18 +3586,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -3897,10 +3687,6 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -3969,9 +3755,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-check@1.5.4: - resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} - use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -4003,10 +3786,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -4129,10 +3908,6 @@ packages: engines: {node: '>=8'} hasBin: true - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} - workerd@1.20260811.1: resolution: {integrity: sha512-kh+FFm55JQ4ssxhHZV9VPdMQq3D1nHxNJgwxMtWGD4dGppJvLySdguTRDKgeNTvgq6heSz+6TTXyPSDGj8Yllw==} engines: {node: '>=16'} @@ -4152,10 +3927,6 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -5600,8 +5371,6 @@ snapshots: '@yuku-toolchain/types@0.8.7': {} - '@zeit/schemas@2.36.0': {} - abbrev@4.0.0: {} acorn-jsx@5.3.2(acorn@8.18.0): @@ -5612,13 +5381,6 @@ snapshots: agent-base@7.1.4: {} - ajv@8.18.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.5 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -5626,20 +5388,12 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ansi-align@3.0.1: - dependencies: - string-width: 4.2.3 - ansi-regex@5.0.1: {} - ansi-regex@6.3.0: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.3: {} - app-builder-lib@26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3): dependencies: '@electron/asar': 3.4.1 @@ -5688,10 +5442,6 @@ snapshots: transitivePeerDependencies: - supports-color - arch@2.2.0: {} - - arg@5.0.2: {} - argparse@2.0.1: {} asn1js@3.0.10: @@ -5731,17 +5481,6 @@ snapshots: boolean@3.2.0: optional: true - boxen@7.0.0: - dependencies: - ansi-align: 3.0.1 - camelcase: 7.0.1 - chalk: 5.6.2 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 - brace-expansion@1.1.18: dependencies: balanced-match: 1.0.2 @@ -5791,10 +5530,6 @@ snapshots: transitivePeerDependencies: - supports-color - bytes@3.0.0: {} - - bytes@3.1.2: {} - bytestreamjs@2.0.1: {} cacheable-lookup@5.0.4: {} @@ -5814,27 +5549,17 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - camelcase@7.0.1: {} - caniuse-lite@1.0.30001809: {} ccount@2.0.1: {} chai@6.2.2: {} - chalk-template@0.4.0: - dependencies: - chalk: 4.1.2 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.0.1: {} - - chalk@5.6.2: {} - character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -5859,16 +5584,8 @@ snapshots: dependencies: clsx: 2.1.1 - cli-boxes@3.0.0: {} - client-only@0.0.1: {} - clipboardy@3.0.0: - dependencies: - arch: 2.2.0 - execa: 5.1.1 - is-wsl: 2.2.0 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -5907,28 +5624,10 @@ snapshots: compare-version@0.1.2: {} - compressible@2.0.18: - dependencies: - mime-db: 1.54.0 - - compression@1.8.1: - dependencies: - bytes: 3.1.2 - compressible: 2.0.18 - debug: 2.6.9 - negotiator: 0.6.4 - on-headers: 1.1.0 - safe-buffer: 5.2.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - compute-scroll-into-view@3.1.1: {} concat-map@0.0.1: {} - content-disposition@0.5.2: {} - convert-source-map@2.0.0: {} cookie@1.1.1: {} @@ -5948,10 +5647,6 @@ snapshots: csstype@3.2.3: {} - debug@2.6.9: - dependencies: - ms: 2.0.0 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -5964,8 +5659,6 @@ snapshots: dependencies: mimic-response: 3.1.0 - deep-extend@0.6.0: {} - defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -6032,8 +5725,6 @@ snapshots: dependencies: readable-stream: 2.3.8 - eastasianwidth@0.2.0: {} - ejs@3.1.10: dependencies: jake: 10.9.4 @@ -6114,8 +5805,6 @@ snapshots: emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -6271,18 +5960,6 @@ snapshots: dependencies: '@types/estree': 1.0.9 - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - expect-type@1.4.0: {} exponential-backoff@3.1.3: {} @@ -6459,8 +6136,6 @@ snapshots: dependencies: pump: 3.0.4 - get-stream@6.0.1: {} - github-slugger@2.0.0: {} glob@7.2.3: @@ -6660,8 +6335,6 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@2.1.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -6669,8 +6342,6 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} - inline-style-parser@0.2.7: {} is-alphabetical@2.0.1: {} @@ -6682,22 +6353,12 @@ snapshots: is-decimal@2.0.1: {} - is-docker@2.2.1: {} - is-fullwidth-code-point@3.0.0: {} is-hexadecimal@2.0.1: {} is-plain-obj@4.1.0: {} - is-port-reachable@4.0.0: {} - - is-stream@2.0.1: {} - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - isarray@1.0.0: {} isbinaryfile@4.0.10: {} @@ -7010,8 +6671,6 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - merge-stream@2.0.0: {} - micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -7276,24 +6935,14 @@ snapshots: transitivePeerDependencies: - supports-color - mime-db@1.33.0: {} - mime-db@1.52.0: {} - mime-db@1.54.0: {} - - mime-types@2.1.18: - dependencies: - mime-db: 1.33.0 - mime-types@2.1.35: dependencies: mime-db: 1.52.0 mime@2.6.0: {} - mimic-fn@2.1.0: {} - mimic-response@1.0.1: {} mimic-response@3.1.0: {} @@ -7352,14 +7001,10 @@ snapshots: react: 19.2.8 react-dom: 19.2.8(react@19.2.8) - ms@2.0.0: {} - ms@2.1.3: {} nanoid@3.3.18: {} - negotiator@0.6.4: {} - next-themes@0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: react: 19.2.8 @@ -7421,10 +7066,6 @@ snapshots: normalize-url@6.1.0: {} - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - npm-to-yarn@3.2.0: {} object-keys@1.1.1: @@ -7432,16 +7073,10 @@ snapshots: obug@2.1.4: {} - on-headers@1.1.0: {} - once@1.4.0: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - oniguruma-parser@0.12.2: {} oniguruma-to-es@4.3.6: @@ -7494,12 +7129,8 @@ snapshots: path-is-absolute@1.0.1: {} - path-is-inside@1.0.2: {} - path-key@3.1.1: {} - path-to-regexp@3.3.0: {} - path-to-regexp@6.3.0: {} pathe@2.0.3: {} @@ -7597,15 +7228,6 @@ snapshots: quick-lru@5.1.1: {} - range-parser@1.2.0: {} - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - react-dom@19.2.8(react@19.2.8): dependencies: react: 19.2.8 @@ -7717,15 +7339,6 @@ snapshots: dependencies: regex-utilities: 2.3.0 - registry-auth-token@3.3.2: - dependencies: - rc: 1.2.8 - safe-buffer: 5.1.2 - - registry-url@3.1.0: - dependencies: - rc: 1.2.8 - rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.5 @@ -7856,8 +7469,6 @@ snapshots: safe-buffer@5.1.2: {} - safe-buffer@5.2.1: {} - sanitize-filename@1.6.4: dependencies: truncate-utf8-bytes: 1.0.2 @@ -7886,32 +7497,6 @@ snapshots: type-fest: 0.13.1 optional: true - serve-handler@6.1.7: - dependencies: - bytes: 3.0.0 - content-disposition: 0.5.2 - mime-types: 2.1.18 - minimatch: 3.1.5 - path-is-inside: 1.0.2 - path-to-regexp: 3.3.0 - range-parser: 1.2.0 - - serve@14.2.6: - dependencies: - '@zeit/schemas': 2.36.0 - ajv: 8.18.0 - arg: 5.0.2 - boxen: 7.0.0 - chalk: 5.0.1 - chalk-template: 0.4.0 - clipboardy: 3.0.0 - compression: 1.8.1 - is-port-reachable: 4.0.0 - serve-handler: 6.1.7 - update-check: 1.5.4 - transitivePeerDependencies: - - supports-color - sharp@0.35.2: dependencies: '@img/colour': 1.1.0 @@ -8031,12 +7616,6 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.2.0 - string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -8050,14 +7629,6 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.2.0: - dependencies: - ansi-regex: 6.3.0 - - strip-final-newline@2.0.0: {} - - strip-json-comments@2.0.1: {} - style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -8153,8 +7724,6 @@ snapshots: type-fest@0.13.1: optional: true - type-fest@2.19.0: {} - typescript@5.9.3: {} typescript@6.0.3: {} @@ -8231,11 +7800,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-check@1.5.4: - dependencies: - registry-auth-token: 3.3.2 - registry-url: 3.1.0 - use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.2.8): dependencies: react: 19.2.8 @@ -8259,8 +7823,6 @@ snapshots: util-deprecate@1.0.2: {} - vary@1.1.2: {} - vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -8350,10 +7912,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - widest-line@4.0.1: - dependencies: - string-width: 5.1.2 - workerd@1.20260811.1: optionalDependencies: '@cloudflare/workerd-darwin-64': 1.20260811.1 @@ -8385,12 +7943,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.2.0 - wrappy@1.0.2: {} ws@8.21.0: {}