diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index aa53585..5e2ce3d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,11 +1,14 @@ -name: Docs +name: Docs redirect + +# The documentation site moved to https://adeptability.itaywol.tools (Astro + +# Starlight, deployed via Cloudflare from site/). This workflow keeps the old +# GitHub Pages URL alive as a tiny static redirect that forwards visitors — +# preserving their path — to the new home. on: push: branches: [main] paths: - - "docs/**" - - "mkdocs.yml" - ".github/workflows/docs.yml" workflow_dispatch: @@ -23,17 +26,52 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 - - - uses: actions/setup-python@v6 - with: - python-version: "3.x" + - name: Generate redirect site + run: | + mkdir -p _site + NEW="https://adeptability.itaywol.tools" - - name: Install MkDocs Material - run: pip install mkdocs-material + # Root: send the old docs home to the new docs home. + cat > _site/index.html < + + + + Redirecting… + + + + + +

This site has moved to adeptability.itaywol.tools.

+ + + EOF - - name: Build site - run: mkdocs build --strict --site-dir _site + # 404 handler: GitHub Pages serves this for every unknown path under + # the project site (/adeptability/). Strip the repo prefix and + # forward to the new /docs/, preserving any query and hash. The + # meta-refresh falls back to the docs root if JavaScript is disabled. + cat > _site/404.html < + + + + Redirecting… + + + + +

This site has moved to adeptability.itaywol.tools.

+ + + EOF - name: Upload Pages artifact uses: actions/upload-pages-artifact@v5 diff --git a/README.md b/README.md index f943c12..7d6ac62 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- adeptability: cross-harness AI skill portability CLI + adeptability: cross-harness AI skill portability CLI

write an AI skill once, run it in every coding agent

@@ -12,6 +12,8 @@ License: MIT

+

adeptability.itaywol.tools

+

Write one skill, run adept sync, and it renders into Claude Code, Cursor, Codex, and OpenCode at once

@@ -23,7 +25,7 @@ each harness's frontmatter, activation rules, aggregation, and size budgets for **dotfiles for your AI coding agents**: one source of truth, the right on-disk format everywhere. -📖 **[Full documentation → itaywol.github.io/adeptability](https://itaywol.github.io/adeptability)** +📖 **[Full documentation → adeptability.itaywol.tools](https://adeptability.itaywol.tools)** ## Install @@ -65,7 +67,7 @@ adept status # init state, libraries, harnesses, and drif inside a harness instead? Run `adept sync-from` to pull it back to canonical, then `adept sync` to re-publish everywhere. Building scheduled automation? `adept loop add` composes a discovery skill + evaluator agent + cron skeleton in one shot — see the -[loops guide](https://itaywol.github.io/adeptability/guides/loops/). +[loops guide](https://adeptability.itaywol.tools/docs/guides/loops/). `init` also seeds bundled default skills (`using-adept`, `authoring-adept-skills`, `authoring-adept-agents`, `authoring-adept-loops`, `adept-self-improve`) so a fresh project is @@ -76,7 +78,7 @@ useful on day one. Skip with `--no-default-skills`. Prefix any command with `--global` to target your home directory instead of a project — for skills you want everywhere without an `adept init` per repo. Supported by `claude-code`, `codex`, and `opencode` (not Cursor or Copilot). See -[Scopes](https://itaywol.github.io/adeptability/concepts/scopes/). +[Scopes](https://adeptability.itaywol.tools/docs/concepts/scopes/). ```bash adept --global harness add claude-code && adept --global skill add lint-style --edit && adept --global sync @@ -89,7 +91,7 @@ adept --global harness add claude-code && adept --global skill add lint-style -- - **Canonical agent** — one `.adeptability/agents/.md` (frontmatter + system prompt) rendered to `.claude/agents/`, `.opencode/agents/`, `.cursor/agents/`, `.github/agents/`, and `.codex/agents/*.toml`. `adept agent check` runs a safety scan plus a best-practice - lint. See [Canonical agents](https://itaywol.github.io/adeptability/concepts/agents/). + lint. See [Canonical agents](https://adeptability.itaywol.tools/docs/concepts/agents/). - **Harness** — a target AI agent (Claude Code, Cursor, Codex, …). `adept sync` renders each canonical skill into every enabled harness's own path and schema; a hash-based state machine (`synced | ahead | behind | diverged`) powers `status` and `diff`. No lockfile. @@ -100,7 +102,7 @@ adept --global harness add claude-code && adept --global skill add lint-style -- Teammates clone your repo, run `adept`, and the library resolves into their project and materializes into their harnesses. -Read the [Concepts guide](https://itaywol.github.io/adeptability/concepts/libraries/) for the +Read the [Concepts guide](https://adeptability.itaywol.tools/docs/concepts/libraries/) for the library model, the consumer-vs-library layouts, and the 3-way drift machine. ## Supported harnesses @@ -113,12 +115,12 @@ bucketed per-glob). 50+ more agents (Windsurf, Gemini CLI, Cline, Continue, Roo, Goose, Junie, …) work out of the box via a generic per-skill adapter. Run `adept harness list` for the live registry, or drop a YAML adapter into `$ADEPT_LIBRARY/adapters/` to add one without recompiling. See the -[Harness Comparison](https://itaywol.github.io/adeptability/harness-comparison/) for exactly +[Harness Comparison](https://adeptability.itaywol.tools/docs/harness-comparison/) for exactly what each renderer emits and why. ## Docs & contributing -- **[Documentation site](https://itaywol.github.io/adeptability)** — getting started, concepts, +- **[Documentation site](https://adeptability.itaywol.tools)** — getting started, concepts, guides, full command reference, and the harness comparison. - **[CONTRIBUTING.md](./CONTRIBUTING.md)** — build, test, and PR gates. - **[AGENTS.md](./AGENTS.md)** — architecture, resolution model, and invariants for agents diff --git a/assets/agents.gif b/assets/agents.gif new file mode 100644 index 0000000..9cdc426 Binary files /dev/null and b/assets/agents.gif differ diff --git a/assets/authoring.gif b/assets/authoring.gif new file mode 100644 index 0000000..5efed88 Binary files /dev/null and b/assets/authoring.gif differ diff --git a/assets/demo.gif b/assets/demo.gif index 9fb6e66..d365ad3 100644 Binary files a/assets/demo.gif and b/assets/demo.gif differ diff --git a/assets/logo-mark.svg b/assets/logo-mark.svg new file mode 100644 index 0000000..3d7f71d --- /dev/null +++ b/assets/logo-mark.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/assets/tapes/agents.tape b/assets/tapes/agents.tape new file mode 100644 index 0000000..7ff15de --- /dev/null +++ b/assets/tapes/agents.tape @@ -0,0 +1,74 @@ +# adeptability — agents (subagents) demo +# Regenerate: build `adept` onto your PATH, then run from the repo root: +# vhs assets/tapes/agents.tape +# Requires a monospace font (JetBrains Mono) and vhs >= 0.11. + +Output "assets/agents.gif" + +Set Shell "bash" +Set FontFamily "JetBrains Mono" +Set FontSize 24 +Set Width 1520 +Set Height 856 +Set Padding 32 +Set TypingSpeed 45ms +Set Theme { "background": "#111a29", "foreground": "#eaf0f8", "cursor": "#7c88ff", "selection": "#22314c", "black": "#0b111b", "red": "#ff6b6b", "green": "#7ed992", "yellow": "#f6c667", "blue": "#7c88ff", "magenta": "#b79cff", "cyan": "#4fe3cd", "white": "#c8d4e3", "brightBlack": "#64788f", "brightRed": "#ff8b64", "brightGreen": "#a5e8b5", "brightYellow": "#ffd98a", "brightBlue": "#a3acff", "brightMagenta": "#cdb8ff", "brightCyan": "#7ff0dd", "brightWhite": "#eaf0f8" } + +# ---- setup (hidden) ---- +Hide +Type "export ADEPT_LIBRARY=/tmp/adept-demo-agents/.lib" Enter +Type "export PS1=$'\033[38;2;124;136;255m❯\033[0m '" Enter +Type "rm -rf /tmp/adept-demo-agents && mkdir -p /tmp/adept-demo-agents && cd /tmp/adept-demo-agents && git init -q" Enter +Type "adept init --no-default-skills --mode copy >/dev/null" Enter +Type "for h in claude-code opencode codex; do adept harness add $h >/dev/null; done" Enter +Type "cat > reviewer.md <<'MD'" Enter +Type "---" Enter +Type "id: code-reviewer" Enter +Type "description: Reviews drafted code changes before commit. Use after any agent writes code." Enter +Type "tools: [Read, Grep, Bash]" Enter +Type "---" Enter +Type "You are an adversarial reviewer. Assume the work is broken until proven otherwise." Enter +Type "" Enter +Type "## Check, in order" Enter +Type "1. Does it run? Execute it — do not judge by reading." Enter +Type "2. Run the tests; paste the real output." Enter +Type "3. Hunt the edge cases the author skipped." Enter +Type "" Enter +Type "## Verdict" Enter +Type "PASS only if every check holds. Otherwise REJECT with each reason listed." Enter +Type "MD" Enter +Type "clear" Enter +Show + +# ---- author a reviewer subagent from a file ---- +Sleep 600ms +Type "adept agent add code-reviewer --from reviewer.md" +Sleep 300ms +Enter +Sleep 1600ms + +Type "bat --style=plain .adeptability/agents/code-reviewer.md" +Sleep 300ms +Enter +Sleep 4000ms + +Hide +Type "rm reviewer.md" Enter +Show + +# ---- render it into every enabled harness ---- +Type "adept sync" +Sleep 300ms +Enter +Sleep 2000ms + +Type "tree -a --dirsfirst -I '.git|.adeptability' -C ." +Sleep 300ms +Enter +Sleep 2600ms + +# ---- adept speaks 50+ harnesses out of the box ---- +Type "adept harness list | head -18 | cut -c1-76" +Sleep 300ms +Enter +Sleep 3400ms diff --git a/assets/tapes/authoring.tape b/assets/tapes/authoring.tape new file mode 100644 index 0000000..d155329 --- /dev/null +++ b/assets/tapes/authoring.tape @@ -0,0 +1,61 @@ +# adeptability — authoring & drift demo +# Regenerate: build `adept` onto your PATH, then run from the repo root: +# vhs assets/tapes/authoring.tape +# Requires a monospace font (JetBrains Mono) and vhs >= 0.11. + +Output "assets/authoring.gif" + +Set Shell "bash" +Set FontFamily "JetBrains Mono" +Set FontSize 26 +Set Width 1520 +Set Height 856 +Set Padding 32 +Set TypingSpeed 45ms +Set Theme { "background": "#111a29", "foreground": "#eaf0f8", "cursor": "#7c88ff", "selection": "#22314c", "black": "#0b111b", "red": "#ff6b6b", "green": "#7ed992", "yellow": "#f6c667", "blue": "#7c88ff", "magenta": "#b79cff", "cyan": "#4fe3cd", "white": "#c8d4e3", "brightBlack": "#64788f", "brightRed": "#ff8b64", "brightGreen": "#a5e8b5", "brightYellow": "#ffd98a", "brightBlue": "#a3acff", "brightMagenta": "#cdb8ff", "brightCyan": "#7ff0dd", "brightWhite": "#eaf0f8" } + +# ---- setup (hidden) ---- +Hide +Type "export ADEPT_LIBRARY=/tmp/adept-demo-auth/.lib" Enter +Type "export PS1=$'\033[38;2;124;136;255m❯\033[0m '" Enter +Type "rm -rf /tmp/adept-demo-auth && mkdir -p /tmp/adept-demo-auth && cd /tmp/adept-demo-auth && git init -q" Enter +Type "adept init --no-default-skills --mode copy >/dev/null" Enter +Type "for h in claude-code cursor codex opencode; do adept harness add $h >/dev/null; done" Enter +Type "clear" Enter +Show + +# ---- author a new skill ---- +Sleep 600ms +Type "adept skill add commit-style" +Sleep 300ms +Enter +Sleep 1800ms + +# ---- publish it to every harness ---- +Type "adept sync" +Sleep 300ms +Enter +Sleep 2200ms + +# ---- refine the canonical skill ---- +Type "echo '- Wrap the commit body at 72 columns.' >> .adeptability/skills/commit-style/SKILL.md" +Sleep 300ms +Enter +Sleep 800ms + +# ---- adept sees the drift ---- +Type "adept status" +Sleep 300ms +Enter +Sleep 3200ms + +# ---- one sync brings every harness back in line ---- +Type "adept sync" +Sleep 300ms +Enter +Sleep 2200ms + +Type "adept status" +Sleep 300ms +Enter +Sleep 3000ms diff --git a/assets/tapes/demo.tape b/assets/tapes/demo.tape new file mode 100644 index 0000000..7864da6 --- /dev/null +++ b/assets/tapes/demo.tape @@ -0,0 +1,60 @@ +# adeptability — hero demo +# Regenerate: build `adept` onto your PATH, then run from the repo root: +# vhs assets/tapes/demo.tape +# Requires a monospace font (JetBrains Mono) and vhs >= 0.11. + +Output "assets/demo.gif" + +Set Shell "bash" +Set FontFamily "JetBrains Mono" +Set FontSize 26 +Set Width 1520 +Set Height 856 +Set Padding 32 +Set TypingSpeed 45ms +Set Theme { "background": "#111a29", "foreground": "#eaf0f8", "cursor": "#7c88ff", "selection": "#22314c", "black": "#0b111b", "red": "#ff6b6b", "green": "#7ed992", "yellow": "#f6c667", "blue": "#7c88ff", "magenta": "#b79cff", "cyan": "#4fe3cd", "white": "#c8d4e3", "brightBlack": "#64788f", "brightRed": "#ff8b64", "brightGreen": "#a5e8b5", "brightYellow": "#ffd98a", "brightBlue": "#a3acff", "brightMagenta": "#cdb8ff", "brightCyan": "#7ff0dd", "brightWhite": "#eaf0f8" } + +# ---- setup (hidden) ---- +Hide +Type "export ADEPT_LIBRARY=/tmp/adept-demo-hero/.lib" Enter +Type "export PS1=$'\033[38;2;124;136;255m❯\033[0m '" Enter +Type "rm -rf /tmp/adept-demo-hero && mkdir -p /tmp/adept-demo-hero && cd /tmp/adept-demo-hero && git init -q" Enter +Type "adept init --no-default-skills --mode copy >/dev/null" Enter +Type "for h in claude-code cursor codex copilot opencode; do adept harness add $h >/dev/null; done" Enter +Type "mkdir -p .adeptability/skills/code-style" Enter +Type "cat > .adeptability/skills/code-style/SKILL.md <<'MD'" Enter +Type "---" Enter +Type "id: code-style" Enter +Type "description: Apply when writing or reviewing code." Enter +Type "activation: globs" Enter +Type 'globs: ["**/*.go", "**/*.ts"]' Enter +Type "allowed-tools: [Read, Grep]" Enter +Type "---" Enter +Type "# House code style" Enter +Type "" Enter +Type "- Prefer early returns over nested conditionals." Enter +Type "- Name things for what they do, not how they do it." Enter +Type "- Wrap errors with context; never swallow them silently." Enter +Type "- No unused imports, no dead code." Enter +Type "MD" Enter +Type "clear" Enter +Show + +# ---- one canonical skill ---- +Sleep 600ms +Type "bat --style=plain .adeptability/skills/code-style/SKILL.md" +Sleep 400ms +Enter +Sleep 3s + +# ---- render it into every enabled harness ---- +Type "adept sync" +Sleep 400ms +Enter +Sleep 2500ms + +# ---- one source, every harness's native format ---- +Type "tree -a --dirsfirst -I '.git|.adeptability' -C ." +Sleep 400ms +Enter +Sleep 4500ms diff --git a/docs/HARNESS_COMPARISON.md b/docs/HARNESS_COMPARISON.md deleted file mode 100644 index b6a7684..0000000 --- a/docs/HARNESS_COMPARISON.md +++ /dev/null @@ -1,8 +0,0 @@ -# Harness Comparison - -This document has moved into the documentation site: - -**➡️ [Harness comparison](harness-comparison.md)** — how adeptability renders a canonical skill -into each harness's native format, the activation translation table, and sidecar handling. - -Live at . diff --git a/docs/harness-comparison.md b/docs/harness-comparison.md deleted file mode 100644 index 41621d4..0000000 --- a/docs/harness-comparison.md +++ /dev/null @@ -1,172 +0,0 @@ -# Harness comparison - -A single canonical skill produces correct output for every harness — proper frontmatter -schema, proper activation, proper aggregation, proper size budgets. This page shows what gets -written and why. - -## Canonical input - -```yaml -# skill.yaml -id: pr-review -description: Apply before opening a PR. Tests, security, performance. -activation: agent -allowed-tools: [Read, Grep] -``` - -```markdown -# SKILL.md -## Tests -- [ ] Unit tests added -## Security -- [ ] No secrets in diff -``` - -## Rendered output per harness - -=== "Claude Code" - - `.claude/skills/pr-review/SKILL.md` - - ```markdown - --- - name: pr-review - description: Apply before opening a PR. Tests, security, performance. - allowed-tools: [Read, Grep] - --- - - ## Tests - - [ ] Unit tests added - ## Security - - [ ] No secrets in diff - ``` - - **Why correct:** Claude Code's progressive disclosure relies on `name` + `description` for - activation; `allowed-tools` enforces the security boundary. - -=== "Cursor" - - `.cursor/rules/pr-review.mdc` - - ```markdown - --- - description: Apply before opening a PR. Tests, security, performance. - --- - - ## Tests - - [ ] Unit tests added - ## Security - - [ ] No secrets in diff - ``` - - **Why correct:** Cursor's "Agent Requested" mode activates rules whose `description` - matches the current task — description-only frontmatter, no `alwaysApply`. (`always` - skills get `alwaysApply: true`; `globs` skills get `globs:` + `alwaysApply: false`.) - Verbatim Claude frontmatter would leave `description` valid but add unrecognized - `name`/`allowed-tools` keys. - -=== "OpenCode" - - `.opencode/skill/pr-review/SKILL.md` - - ```markdown - # pr-review - - Apply before opening a PR. Tests, security, performance. - - ## Tests - - [ ] Unit tests added - ## Security - - [ ] No secrets in diff - ``` - - **Why correct:** OpenCode doesn't require frontmatter and prefers narrative markdown. - -=== "Codex" - - `AGENTS.md` (aggregated) - - ```markdown - - ## Apply before opening a PR. Tests, security, performance. - - ## Tests - - [ ] Unit tests added - ## Security - - [ ] No secrets in diff - - ``` - - When multiple skills are enabled, they are packed by priority descending then byte size - ascending, emitted in skill-id order. If the total exceeds **32 KiB** (Codex's - `project_doc_max_bytes`), the lowest-priority skills drop and a truncation manifest appears - at the top: - - ```markdown - - ``` - - **Why correct:** Codex has *no per-skill concept*. It reads one or more `AGENTS.md` files - walking up from cwd. Naive copy-as-`SKILL.md` is invisible to Codex; the 32 KiB cap means - quiet truncation if you don't manage it. - -=== "GitHub Copilot" - - Copilot has no agent-requested mode, so this `activation: agent` skill is **skipped** - (see the activation table below). A skill with `activation: always` renders into - `.github/instructions/always.instructions.md`: - - ```markdown - --- - applyTo: "**" - --- - - - ## Apply before opening a PR. Tests, security, performance. - - ## Tests - - [ ] Unit tests added - ## Security - - [ ] No secrets in diff - - ``` - - Skills with `activation: globs` bucket into a per-glob file like - `.github/instructions/bucket-a63d8819677675ea.instructions.md` with - `applyTo: "**/*.ts,**/*.tsx"`. - - **Why correct:** Copilot uses `applyTo` glob match to decide when to inject the - instructions. Without it, the file is loaded for the wrong files or ignored entirely. - -## Activation translation table - -| Canonical activation | Claude | Cursor | OpenCode | Codex | Copilot | -| --- | --- | --- | --- | --- | --- | -| `always` | description-only | `alwaysApply: true` | `# id` + desc + body | aggregated body | `applyTo: "**"` | -| `globs: [...]` | desc + glob hint | `globs:` + `alwaysApply:false` | `# id` + desc + body | aggregated body | bucketed by globs | -| `agent` | description-only | description-only | `# id` + desc + body | aggregated body | *skipped* (no agent mode) | -| `manual` | `disable-model-invocation:true` | desc + `@id` hint | `# id` + desc + body | aggregated body | *skipped* | - -## Sidecars - -Skills can bundle `scripts/`, `references/`, `assets/`. Where supported: - -- **Claude Code:** full sidecar tree preserved. -- **OpenCode:** full sidecar tree preserved. -- **Cursor:** dropped (single-file); a warning is reported on `sync`. -- **Codex:** dropped (aggregator file model); a warning is reported on `sync`. -- **Copilot:** dropped (aggregator file model); a warning is reported on `sync`. - -## Beyond the specialized five - -Everything above describes the five **specialized renderers**. 50+ more agents (Windsurf, -Gemini CLI, Cline, Continue, Roo, Goose, Junie, …) render through generic per-skill adapters -that write `SKILL.md` into that agent's convention. Run `adept harness list` for the live -registry, or add your own with a [config-driven adapter](concepts/harnesses.md#config-driven-adapters-no-recompile). - -## Why this matters - -Prior art treated multi-harness sync as a path-multiplexing problem (write one file into N -paths). That breaks activation in Cursor and Copilot, produces nothing usable in Codex, and -silently loses size budget. `adept` makes content fidelity to each harness's actual loader the -headline guarantee — and proves it with golden files any contributor can inspect. diff --git a/docs/superpowers/specs/2026-07-25-website-design.md b/docs/superpowers/specs/2026-07-25-website-design.md new file mode 100644 index 0000000..935067c --- /dev/null +++ b/docs/superpowers/specs/2026-07-25-website-design.md @@ -0,0 +1,43 @@ +# adeptability website — design spec (2026-07-25) + +Approved by Itay via interactive Q&A. + +## Goal + +Marketing + docs site at **https://adeptability.itaywol.tools**, replacing the +mkdocs GitHub Pages site. Modeled on testless (`site/` dir, Astro, Cloudflare +Workers static assets, `custom_domain` route) but with docs included. + +## Architecture + +- `site/` — one Astro 5 project. + - Custom creative landing page at `/` (UI-Designer-driven, adeptability brand from `assets/logo.png`). + - Starlight mounted at `/docs` with all mkdocs content migrated, nav preserved + (Getting Started, Concepts, Guides, Command Reference, Harness Comparison, Exchange). + - `wrangler.jsonc`: static assets from `./dist`, route `adeptability.itaywol.tools` with `custom_domain: true` (same shape as testless-site). +- mkdocs.yml removed. `.github/workflows/docs.yml` replaced by a Pages deploy of a + meta-refresh redirect so `itaywol.github.io/adeptability/*` keeps resolving. + +## Landing page content + +Hero (what adept does: author a skill once → render into every coding agent), +demo gif section, install cards (Go / Homebrew / curl / Nix / Docker), how it +works (author → sync → 50+ harnesses), GitHub CTA. Footer: +GitHub · Buy Me a Coffee (buymeacoffee.com/woitayf) · itaywol.com · LinkedIn +(linkedin.com/in/itaywolfish). + +## Demo gifs + +Reproducible via vhs tapes committed at `assets/tapes/`: + +1. `sync.tape` — hero: author skill, `adept sync`, fan-out into Claude Code/Cursor/Codex/Copilot/OpenCode. +2. `authoring.tape` — `adept skill add`, edit, drift detection (`adept status`). +3. `agents.tape` — `adept agent add` / exchange flow. + +Consistent theme (same palette as site, generous padding, window chrome). +`assets/demo.gif` regenerated from the same pipeline for the README. + +## Out of scope + +CI deploy workflow for the site (manual `wrangler deploy`, like testless), +search, analytics, blog. diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index c7e38fd..0000000 --- a/mkdocs.yml +++ /dev/null @@ -1,102 +0,0 @@ -site_name: adeptability -site_description: Write an AI coding skill once, run it in every AI coding assistant. -site_url: https://itaywol.github.io/adeptability/ -repo_url: https://github.com/itaywol/adeptability -repo_name: itaywol/adeptability -edit_uri: edit/main/docs/ -copyright: Copyright © itaywol — MIT License - -theme: - name: material - language: en - icon: - repo: fontawesome/brands/github - palette: - - media: "(prefers-color-scheme)" - toggle: - icon: material/brightness-auto - name: Switch to light mode - - media: "(prefers-color-scheme: light)" - scheme: default - primary: indigo - accent: indigo - toggle: - icon: material/brightness-7 - name: Switch to dark mode - - media: "(prefers-color-scheme: dark)" - scheme: slate - primary: indigo - accent: indigo - toggle: - icon: material/brightness-4 - name: Switch to system preference - features: - - navigation.instant - - navigation.tracking - - navigation.sections - - navigation.top - - navigation.footer - - toc.follow - - search.suggest - - search.highlight - - content.code.copy - - content.code.annotate - - content.action.edit - -markdown_extensions: - - admonition - - attr_list - - def_list - - footnotes - - tables - - toc: - permalink: true - - pymdownx.details - - pymdownx.superfences - - pymdownx.tabbed: - alternate_style: true - - pymdownx.highlight: - anchor_linenums: true - - pymdownx.inlinehilite - - pymdownx.snippets - - pymdownx.emoji: - emoji_index: !!python/name:material.extensions.emoji.twemoji - emoji_generator: !!python/name:material.extensions.emoji.to_svg - -plugins: - - search - -# The legacy HARNESS_COMPARISON.md is a redirect stub, intentionally not in nav. -not_in_nav: | - /HARNESS_COMPARISON.md - -nav: - - Home: index.md - - Getting Started: - - Install: getting-started/install.md - - Quickstart: getting-started/quickstart.md - - Your first skill: getting-started/first-skill.md - - Concepts: - - Canonical skills: concepts/canonical-skills.md - - Canonical agents: concepts/agents.md - - Harnesses & adapters: concepts/harnesses.md - - Libraries: concepts/libraries.md - - Scopes: concepts/scopes.md - - Layouts: concepts/layouts.md - - Drift & the 3-way model: concepts/drift.md - - Guides: - - Authoring a skill: guides/authoring.md - - Sharing a library with a team: guides/sharing-a-library.md - - Importing existing rules: guides/importing.md - - Vendoring a library in-repo: guides/vendoring.md - - Git drift hook: guides/git-hook.md - - Composing loops: guides/loops.md - - Safety scans & LLM config: guides/safety-scans.md - - Command Reference: reference/commands.md - - Harness Comparison: harness-comparison.md - - Exchange: exchange.md - -extra: - social: - - icon: fontawesome/brands/github - link: https://github.com/itaywol/adeptability diff --git a/site/.gitignore b/site/.gitignore new file mode 100644 index 0000000..8c62f85 --- /dev/null +++ b/site/.gitignore @@ -0,0 +1,15 @@ +# build output +dist/ + +# dependencies +node_modules/ + +# generated types +.astro/ + +# environment +.env +.env.production + +# wrangler +.wrangler/ diff --git a/site/astro.config.mjs b/site/astro.config.mjs new file mode 100644 index 0000000..ea01ad9 --- /dev/null +++ b/site/astro.config.mjs @@ -0,0 +1,100 @@ +// @ts-check +import { defineConfig } from "astro/config"; +import starlight from "@astrojs/starlight"; + +// https://astro.build/config +export default defineConfig({ + site: "https://adeptability.itaywol.tools", + integrations: [ + starlight({ + title: "adeptability", + description: + "Write an AI coding skill once, run it in every AI coding assistant.", + logo: { src: "./src/assets/logo-mark.svg", alt: "adeptability" }, + favicon: "/favicon.svg", + // Gold accent retheme, matching the landing page + neon-gold logo. + customCss: ["./src/styles/starlight-gold.css"], + // Social preview image on every docs page. Starlight already emits + // og:title/description/url, og:site_name, and twitter:card, but not an + // image, so we add og:image + twitter:image here. + head: [ + { + tag: "meta", + attrs: { + property: "og:image", + content: "https://adeptability.itaywol.tools/social-card.png", + }, + }, + { + tag: "meta", + attrs: { + property: "og:image:alt", + content: + "adeptability: write an AI skill once, run it in every coding agent", + }, + }, + { + tag: "meta", + attrs: { + name: "twitter:image", + content: "https://adeptability.itaywol.tools/social-card.png", + }, + }, + ], + social: [ + { + icon: "github", + label: "GitHub", + href: "https://github.com/itaywol/adeptability", + }, + ], + // Docs live under /docs/ - content is nested in src/content/docs/docs/. + sidebar: [ + { label: "Home", slug: "docs" }, + { + label: "Getting Started", + items: [ + { label: "Install", slug: "docs/getting-started/install" }, + { label: "Quickstart", slug: "docs/getting-started/quickstart" }, + { label: "Your first skill", slug: "docs/getting-started/first-skill" }, + ], + }, + { + label: "Concepts", + items: [ + { label: "Canonical skills", slug: "docs/concepts/canonical-skills" }, + { label: "Canonical agents", slug: "docs/concepts/agents" }, + { label: "Harnesses & adapters", slug: "docs/concepts/harnesses" }, + { label: "Libraries", slug: "docs/concepts/libraries" }, + { label: "Scopes", slug: "docs/concepts/scopes" }, + { label: "Layouts", slug: "docs/concepts/layouts" }, + { label: "Drift & the 3-way model", slug: "docs/concepts/drift" }, + ], + }, + { + label: "Guides", + items: [ + { label: "Authoring a skill", slug: "docs/guides/authoring" }, + { label: "Installing skills from skills.sh and GitHub", slug: "docs/guides/installing-skills" }, + { label: "Sharing a library with a team", slug: "docs/guides/sharing-a-library" }, + { label: "Importing existing rules", slug: "docs/guides/importing" }, + { label: "Vendoring a library in-repo", slug: "docs/guides/vendoring" }, + { label: "Git drift hook", slug: "docs/guides/git-hook" }, + { label: "Composing loops", slug: "docs/guides/loops" }, + { label: "Safety scans & LLM config", slug: "docs/guides/safety-scans" }, + { label: "Scripting and CI with --json", slug: "docs/guides/automation-json" }, + ], + }, + { + label: "Command Reference", + items: [ + { label: "Command reference", slug: "docs/reference/commands" }, + { label: "Configuration reference", slug: "docs/reference/configuration" }, + ], + }, + { label: "Harness Comparison", slug: "docs/harness-comparison" }, + { label: "Exchange", slug: "docs/exchange" }, + ], + }), + ], +}); diff --git a/site/package-lock.json b/site/package-lock.json new file mode 100644 index 0000000..33a129f --- /dev/null +++ b/site/package-lock.json @@ -0,0 +1,8275 @@ +{ + "name": "adeptability-site", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "adeptability-site", + "version": "0.0.0", + "dependencies": { + "@astrojs/starlight": "^0.41.4", + "@fontsource/jetbrains-mono": "^5.3.0", + "@fontsource/space-grotesk": "^5.3.0", + "astro": "^7.1.3", + "sharp": "^0.33.5" + }, + "devDependencies": { + "wrangler": "^4.114.0" + } + }, + "node_modules/@astrojs/compiler-binding": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding/-/compiler-binding-0.3.1.tgz", + "integrity": "sha512-DaAUj29AIBU2XdJ8uwcab8lW5O2pk9pY8AXkcMw0sw77nVa3oeTYRcO+Dvbbpoexf6ThMc0FMWYCQ/wN1/T7oQ==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@astrojs/compiler-binding-darwin-arm64": "0.3.1", + "@astrojs/compiler-binding-darwin-x64": "0.3.1", + "@astrojs/compiler-binding-linux-arm64-gnu": "0.3.1", + "@astrojs/compiler-binding-linux-arm64-musl": "0.3.1", + "@astrojs/compiler-binding-linux-x64-gnu": "0.3.1", + "@astrojs/compiler-binding-linux-x64-musl": "0.3.1", + "@astrojs/compiler-binding-wasm32-wasi": "0.3.1", + "@astrojs/compiler-binding-win32-arm64-msvc": "0.3.1", + "@astrojs/compiler-binding-win32-x64-msvc": "0.3.1" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-arm64": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-arm64/-/compiler-binding-darwin-arm64-0.3.1.tgz", + "integrity": "sha512-IEmEF2fUIlTHtpeE/isyEGVOB14cEyh/LZOFYt6wn3jNyVpdC8aR5OZ+RzFUR/f+8ZDM1LaMwZKvoA7eMyJeFw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-darwin-x64": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-darwin-x64/-/compiler-binding-darwin-x64-0.3.1.tgz", + "integrity": "sha512-GF2kIxjpPDLsn94zbZNMsxEmkU828QqnmM7kiQJnaooS3jmI+I7kk6+oI6EpwOsK3femCMdcm+wmOsEqtGrmjQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-gnu": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-gnu/-/compiler-binding-linux-arm64-gnu-0.3.1.tgz", + "integrity": "sha512-XJL3SDmOtVrqFhCirNcHwE91+IesJqlgNo23I4qW9QUYfwzm/TBZuH61fgqsb1ttgR1mMYz6ooPWs0JDhwMqpQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-arm64-musl": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-arm64-musl/-/compiler-binding-linux-arm64-musl-0.3.1.tgz", + "integrity": "sha512-xqE8BVbDoBueK/B47w30PtkVofUWJKGkwoMVE+EOMLf11rnoANxIAdA9FPqY+rng4oNI5ndHGsri1yPj2k8vZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-gnu": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-gnu/-/compiler-binding-linux-x64-gnu-0.3.1.tgz", + "integrity": "sha512-1y0StU1qiCuDFH3rmbRJXcxdfHxFPrES1Rd+RLffosvUR7I2cH5SF5SFnBN9vXpzpkmyElZm3Yr47iJBPN7vVA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-linux-x64-musl": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-linux-x64-musl/-/compiler-binding-linux-x64-musl-0.3.1.tgz", + "integrity": "sha512-16q0fYf7kpbmdObZEeZJEup8hQv/whgNwVjrSvT8umrKwLDSnNIWiQpm09lQQu6bweZB0XyIvHwlPitvJhC+hg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-wasm32-wasi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-wasm32-wasi/-/compiler-binding-wasm32-wasi-0.3.1.tgz", + "integrity": "sha512-cB456shIwDv/PrVT+2QG7LFndpHkVge5HjqADKZgGaAc9JHVktCtjSrcdkRQ+3tbkPazNKaTLRjXLIiz2NIx9g==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-arm64-msvc": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-arm64-msvc/-/compiler-binding-win32-arm64-msvc-0.3.1.tgz", + "integrity": "sha512-ur/9+If/yTE69mmeX5MqSZndL0HOyx67GeNZUy3N7wVdWpLz9UTJXwyWS4UR2PUQHitghjsM5xoX0Ge56WRVQQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-binding-win32-x64-msvc": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-binding-win32-x64-msvc/-/compiler-binding-win32-x64-msvc-0.3.1.tgz", + "integrity": "sha512-k0W+kDBzDkNZOqu4kElDvCOIbKw5Ut9S1WZ1Krj3KTgNuBERNKXsMMsRLLcbgfdMdbe7bTekQLshZrrvmYpmwA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@astrojs/compiler-rs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler-rs/-/compiler-rs-0.3.1.tgz", + "integrity": "sha512-aT7xkgsbNoS6nriY5qKpbihK43slFHO41iqgHCTdOvn1ifaQxLCc5yXy+6GzAtiafoaC1zA7OwVXCXMsvUZOkg==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler-binding": "0.3.1" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.1.tgz", + "integrity": "sha512-5phcroT/vmOOrYuuAxtkbPixy5hePtlz9i8K4OeDv3dNK6/UQRuXPOSRTxIOBbUY5Sonw2UaxjbuVc43Mcir6Q==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "js-yaml": "^4.1.1", + "picomatch": "^4.0.4", + "retext-smartypants": "^6.2.0", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "unified": "^11.0.5" + } + }, + "node_modules/@astrojs/markdown-remark": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.1.tgz", + "integrity": "sha512-jPVNIqTvk+yKviikszv/Y1U4jGUSKpp/Nw48QZV4qjWgp70j4Lkq3lhSDRbWwCfgKvEyO9GHuVbV1dM2WYXy1w==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.10.1", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.1.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/markdown-satteri": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.3.4.tgz", + "integrity": "sha512-6Lvt/bQZEBW+zzdhPblvfZEy5PGEYJaUsUqaCgwHeRPxZJL1gc9I+DRLKWJjjYTWDzVUTzXlMq4WwSK+X34CVw==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.10.1", + "@astrojs/prism": "4.0.2", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "satteri": "^0.9.1" + } + }, + "node_modules/@astrojs/mdx": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-7.0.3.tgz", + "integrity": "sha512-RxyIwU0uFam5ftwqKOjpIdhnFxZ/kEikeimLyQy3eGXbHT8WgRGzzesOIHVU8+m9TY8ag5WVOyvV24/GyqPdPQ==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.10.1", + "@astrojs/markdown-remark": "7.2.1", + "@mdx-js/mdx": "^3.1.1", + "acorn": "^8.16.0", + "es-module-lexer": "^2.0.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "piccolore": "^0.1.3", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.6", + "unist-util-visit": "^5.1.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "@astrojs/markdown-satteri": "^0.3.1", + "astro": "^7.0.0" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-satteri": { + "optional": true + } + } + }, + "node_modules/@astrojs/prism": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz", + "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.3.tgz", + "integrity": "sha512-f8euLVsyeAmAkSm/1M2Kb8sL8byQmfgbvBNaHFItCheTj/IpiJYSEWVcqDHZ/yEHxiS7+w87mQkzwZaPHmk5GA==", + "license": "MIT", + "dependencies": { + "sitemap": "^9.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^4.3.6" + } + }, + "node_modules/@astrojs/starlight": { + "version": "0.41.4", + "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.41.4.tgz", + "integrity": "sha512-cRCKZhM2BKYViCakBiN68aVwPn5qj/XtMMq//G54xOWdXXcvic1gMMEI+veNlIKOqqC4QmIjcjk4jiFtlZ3mMg==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-satteri": "^0.3.2", + "@astrojs/mdx": "^7.0.0", + "@astrojs/sitemap": "^3.7.2", + "@pagefind/default-ui": "^1.3.0", + "@types/hast": "^3.0.4", + "@types/js-yaml": "^4.0.9", + "@types/mdast": "^4.0.4", + "astro-expressive-code": "^0.44.0", + "bcp-47": "^2.1.0", + "hast-util-from-html": "^2.0.3", + "hast-util-select": "^6.0.4", + "hast-util-to-string": "^3.0.1", + "hastscript": "^9.0.1", + "i18next": "^26.0.7", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "magic-string": "^0.30.21", + "mdast-util-directive": "^3.1.0", + "mdast-util-to-markdown": "^2.1.2", + "mdast-util-to-string": "^4.0.0", + "pagefind": "^1.5.2", + "rehype": "^13.0.2", + "rehype-format": "^5.0.1", + "remark-directive": "^4.0.0", + "satteri": "^0.9.1", + "ultrahtml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.1.0", + "vfile": "^6.0.3" + }, + "peerDependencies": { + "@astrojs/markdown-remark": "^7.2.0", + "astro": "^7.0.2" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-remark": { + "optional": true + } + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.3.tgz", + "integrity": "sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.4.0", + "dset": "^3.1.4", + "is-docker": "^4.0.0", + "package-manager-detector": "^1.6.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bruits/satteri-darwin-arm64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.9.5.tgz", + "integrity": "sha512-iw4nZgx9v30lWo/MTngQqi1pI78KI0DnkSm+lVJGYdmPLgAyDNJigVhpG42/Iq55A6c1Ll8q66ljyyRiQUxwow==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-darwin-x64": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-x64/-/satteri-darwin-x64-0.9.5.tgz", + "integrity": "sha512-6T26Z5Kf3cFW2PSlk9p7zT7yVxvuBSiJvYyz9u8KjYwMTqZyIDOj2wDyNpxKV4+6yUVG7rddq2QwvG/8LJA2+Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-gnu/-/satteri-linux-arm64-gnu-0.9.5.tgz", + "integrity": "sha512-u51id17uJwNEMK9nBlICsq6U31c+XVqQueVBkwRIzZG+gMpS8TOJctt5h5Wz33Z8xnMdTd+adtACVz0yHgGuOA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-arm64-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-arm64-musl/-/satteri-linux-arm64-musl-0.9.5.tgz", + "integrity": "sha512-v39HxiwGC5Rqm01HksP6+5Y+xKLPlsuVFgIgpEAo+SiQ22c+mJVhS3u7Z6ePAKdhL5NJoK1xq70kLz3L13AhpQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-gnu": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-gnu/-/satteri-linux-x64-gnu-0.9.5.tgz", + "integrity": "sha512-F3uO8uFp3pAP5ZGXttwvh57GS7s0lL953tnNdyI2gRyP4kOOkp6pyGojNJzCjkDvWI2Cvb9iNrKok3aqQPauAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-linux-x64-musl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-linux-x64-musl/-/satteri-linux-x64-musl-0.9.5.tgz", + "integrity": "sha512-bicEqglLlz++mWyADaZoP0JY20s4vDfLjaPYgQqC+NI4zZLTOOg1T4GB8aqtc822Pqji8SQBmSrTb7CrP8i08Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@bruits/satteri-wasm32-wasi": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-wasm32-wasi/-/satteri-wasm32-wasi-0.9.5.tgz", + "integrity": "sha512-zauAuMwfPnKPUkd4AFixRFpXdgKwP2mKgxrIIo2gJzW0/ZneF9dbHnLkojSpaBnCCp7VUL1hIi5WWZvB1CqmAQ==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@bruits/satteri-win32-arm64-msvc": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-arm64-msvc/-/satteri-win32-arm64-msvc-0.9.5.tgz", + "integrity": "sha512-SrfE7NEsgZjBvU3c+RR6oQRu0ToXY5uVJEbieXEF0YTctIV2zAVlbaMjWLts074QCgh3a+XHWkR/lWh2VH2LUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@bruits/satteri-win32-x64-msvc": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@bruits/satteri-win32-x64-msvc/-/satteri-win32-x64-msvc-0.9.5.tgz", + "integrity": "sha512-5Kw9ZAtTGS8WHizyn+CJhjjfIQrw+7jcZodpmpXJjefnO15M8UexIi6JR2E5thyvsmHyhL6ZDDMUNR4bKJPd4g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.1.tgz", + "integrity": "sha512-CuNiSqg7+e1cO/GjffyMOm5Tt2jUF9CWHHnvQ/UkqvtkGfHdgwEC0wpmq7fkN3gxwpRnrAN0WzO3vREKmNolMQ==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@clack/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz", + "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==", + "license": "MIT", + "dependencies": { + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@clack/prompts": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz", + "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.4.3", + "fast-string-width": "^3.0.2", + "fast-wrap-ansi": "^0.2.0", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 20.12.0" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.5.0.tgz", + "integrity": "sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@cloudflare/unenv-preset": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.1.tgz", + "integrity": "sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.24", + "workerd": ">1.20260305.0 <2.0.0-0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20260722.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260722.1.tgz", + "integrity": "sha512-vZOP8vIS3NwnuaO+gz0FZ7kIGeiO3bZmxV35Ph9zOXKSREhDFlH7wQ7mkCdhW3O4jnXsew+XT7b+DNEI2CcJGQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20260722.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260722.1.tgz", + "integrity": "sha512-EmIQymihDq6WNdER4+LF8Qn80yqayBUpJ+tkOO7wmY8pmgfyXjIUFNXotl21AHovTeu2seR7HdVUgeN/BilCWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20260722.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260722.1.tgz", + "integrity": "sha512-jvZ3k9fxcnEn04s80CgIYxQfpOyAiz/8qC42DP8EBa9tR27qWyg9wmm31zIobVlrgBZn/+8NfdP73avRGcQOjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20260722.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260722.1.tgz", + "integrity": "sha512-BOSB55SMNdy+DA5uj2WirgiNanpHGis5PVvXH1wSfvjRKr4JGgWK+EZzxz0RFUo6QjjQQC/NimEzNZ7va7jmKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20260722.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260722.1.tgz", + "integrity": "sha512-sYM8YgUpKnRz2xjvdJLX1Ojzoi4MlA4gk8WTTExhGydjYB2UTs5NIbv0ZmpKgMoK9io3ixgmiW56ZnTbcWOdiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@expressive-code/core": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.44.1.tgz", + "integrity": "sha512-3dDo9N8D7hYrLNNMMWFovg3+aDUtnQm7c7z0GZc1c0LEFVBc0Q6lKG+tVT28gDadOvsgOANfCn35fgpe97Pmgg==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.0.4", + "hast-util-select": "^6.0.2", + "hast-util-to-html": "^9.0.1", + "hast-util-to-text": "^4.0.1", + "hastscript": "^9.0.0", + "postcss": "^8.4.38", + "postcss-nested": "^6.0.1", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1" + } + }, + "node_modules/@expressive-code/plugin-frames": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.44.1.tgz", + "integrity": "sha512-HC/bdRao9225ApcgO/e3jn8ZOhldKO7ob1O/Tcipvtv7Vb5nMphZhMtD9uuywpvxkPYBHJi3504WhrKg05Dwqg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.44.1" + } + }, + "node_modules/@expressive-code/plugin-shiki": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.44.1.tgz", + "integrity": "sha512-YApiZt3buUzBwL5tqj8G+sYC5NjMjRCHgQwr9bmGl69rtcHy6fE9dooWUeKYB978fJT2BuxT5FeHcF47rA3SEg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.44.1", + "shiki": "^4.0.2" + } + }, + "node_modules/@expressive-code/plugin-text-markers": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.44.1.tgz", + "integrity": "sha512-B3BsJoJ8CFMlcIX9f+X9tcI3C4zPDO601+YuLi9GheSTNro7ZfqSjLptMQKBHOWZvxnAtY5zvIX7iO/qtBhNBg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.44.1" + } + }, + "node_modules/@fontsource/jetbrains-mono": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/jetbrains-mono/-/jetbrains-mono-5.3.0.tgz", + "integrity": "sha512-fqDfB5I9f1p1TV486aUgB9t8zP84P0O1FtQR5Ol9vjwPy+S+EIGlVYm1cvj2W5shcZMTg2nZFdVMoH5wFu8a1A==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/space-grotesk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/space-grotesk/-/space-grotesk-5.3.0.tgz", + "integrity": "sha512-ksnGizDPXIDuvqcTYTSrmZ+evx9sDlS8rp7+42BQ7wU+spt3twEoXfbJz672C+5CLg6VeUQwRy5RXshWb67LcQ==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", + "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-freebsd-wasm32/node_modules/@img/sharp-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", + "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", + "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", + "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", + "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", + "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32/node_modules/@img/sharp-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", + "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.5.2.tgz", + "integrity": "sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.5.2.tgz", + "integrity": "sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/default-ui": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.5.2.tgz", + "integrity": "sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg==", + "license": "MIT" + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.5.2.tgz", + "integrity": "sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.5.2.tgz", + "integrity": "sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.5.2.tgz", + "integrity": "sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-arm64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/windows-arm64/-/windows-arm64-1.5.2.tgz", + "integrity": "sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.5.2.tgz", + "integrity": "sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@shikijs/core": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.1.tgz", + "integrity": "sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==", + "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.3.1", + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.1.tgz", + "integrity": "sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.1.tgz", + "integrity": "sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/langs": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.1.tgz", + "integrity": "sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/primitive": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.1.tgz", + "integrity": "sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/themes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.1.tgz", + "integrity": "sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.3.1.tgz", + "integrity": "sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.17.tgz", + "integrity": "sha512-Z92FwKpCtfaW1V0jTU/fh3QzYEZN8wDwrzRIBoADCJfn4mJCNcJN/XegifX7BDrQ8/h9Xh/JnbyMchL0FqXrkg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", + "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/am-i-vibing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/am-i-vibing/-/am-i-vibing-0.4.0.tgz", + "integrity": "sha512-MxT4XZL7pzLHpuvhDKdMaQHMGGkJDLluKBLsbstn+8wv9sWcFT6h+0ve9qkml95amVTZtZV83gQe2hY+ojgHLg==", + "license": "MIT", + "dependencies": { + "process-ancestry": "^0.1.0" + }, + "bin": { + "am-i-vibing": "dist/cli.mjs" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/astro/-/astro-7.1.3.tgz", + "integrity": "sha512-4dhPyAAXthf3xLEYnG8SeL7yr/nTPPABfY7e9YF0yuO+vK9Xp+8Q5j4xzsmL3GueukQv4oNwGNTBepLOiDGeJA==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler-rs": "^0.3.1", + "@astrojs/internal-helpers": "0.10.1", + "@astrojs/markdown-satteri": "0.3.4", + "@astrojs/telemetry": "3.3.3", + "@capsizecss/unpack": "^4.0.0", + "@clack/prompts": "^1.1.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "am-i-vibing": "^0.4.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "ci-info": "^4.4.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^2.0.0", + "cookie": "^2.0.1", + "devalue": "^5.8.1", + "diff": "^8.0.3", + "dset": "^3.1.4", + "es-module-lexer": "^2.0.0", + "esbuild": "^0.28.0", + "flattie": "^1.1.1", + "fontace": "~0.4.1", + "get-tsconfig": "5.0.0-beta.4", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "js-yaml": "^4.1.1", + "jsonc-parser": "^3.3.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.2", + "mrmime": "^2.0.1", + "neotraverse": "^1.0.1", + "obug": "^2.1.1", + "p-limit": "^7.3.0", + "p-queue": "^9.1.0", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.4", + "semver": "^7.7.4", + "shiki": "^4.0.2", + "smol-toml": "^1.6.0", + "svgo": "^4.0.1", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.4", + "tinyglobby": "^0.2.15", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.4", + "unstorage": "^1.17.5", + "vite": "^8.0.13", + "vitefu": "^1.1.2", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^22.0.0", + "zod": "^4.3.6" + }, + "bin": { + "astro": "bin/astro.mjs" + }, + "engines": { + "node": ">=22.12.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0 || ^0.35.0" + }, + "peerDependencies": { + "@astrojs/markdown-remark": "7.2.1" + }, + "peerDependenciesMeta": { + "@astrojs/markdown-remark": { + "optional": true + } + } + }, + "node_modules/astro-expressive-code": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.44.1.tgz", + "integrity": "sha512-DT1LnCqbHasBKlvzJ3m6LR4VI94wwx3W9EV/YbP1te4rqjOHsvsezHYuqb5MeLWLftXms/1FA9QBbwCo43DnJQ==", + "license": "MIT", + "dependencies": { + "rehype-expressive-code": "^0.44.1", + "url-extras": "^0.1.0" + }, + "peerDependencies": { + "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta || ^7.0.0" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", + "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.2" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", + "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.2" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", + "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", + "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", + "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", + "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", + "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", + "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", + "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", + "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", + "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.2" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", + "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.2" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-s390x": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", + "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.2" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", + "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.2" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", + "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", + "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.2" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-ia32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", + "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", + "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/sharp": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", + "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "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" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.1.tgz", + "integrity": "sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", + "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "node_modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==", + "license": "MIT", + "engines": { + "node": ">=22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz", + "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz", + "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.2.tgz", + "integrity": "sha512-DObPPAfdtFbXjxLqK8s2Xk9ZuWz5+ZoFEhC7J76es4GU/rEiXwHTmbImoCdyoCOcBH1UF3+Cz6Z2sYD4hyl5TA==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "license": "MIT" + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expressive-code": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.44.1.tgz", + "integrity": "sha512-GakidxhapWDzpKLqEaFQ8wGk6gAqEtPQibu8+yPBfnDLgev5Vdsh1pasTxnrXL/mzIknyqeTwhMHTghdaiUrTg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.44.1", + "@expressive-code/plugin-frames": "^0.44.1", + "@expressive-code/plugin-shiki": "^0.44.1", + "@expressive-code/plugin-text-markers": "^0.44.1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz", + "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz", + "integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "engines": { + "node": ">=20.20.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz", + "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.3", + "crossws": "^0.3.5", + "defu": "^6.1.6", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-embedded": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", + "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-format": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz", + "integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-minify-whitespace": "^1.0.0", + "hast-util-phrasing": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "html-whitespace-sensitive-tag-names": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-body-ok-link": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz", + "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-minify-whitespace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz", + "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-is-body-ok-link": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz", + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "nth-check": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.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.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-whitespace-sensitive-tag-names": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz", + "integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/i18next": { + "version": "26.3.6", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.3.6.tgz", + "integrity": "sha512-Bu5Z2nAXgfVyM8xvW3jk9EKRIuX37PudsrBViThNFx7CR7aaYTpP01cxNB/E4c4UUzTDiAZRstEhsRfPOL/8xA==", + "funding": [ + { + "type": "individual", + "url": "https://www.locize.com/i18next" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://www.locize.com" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": "^5 || ^6 || ^7" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz", + "integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz", + "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.3", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", + "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/miniflare": { + "version": "4.20260722.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260722.0.tgz", + "integrity": "sha512-LW6ABMhCx/yIEFBLC/DO4yAhdm2T/G7jp7pr5T2kj895+CCIaHZqpMXdW9O6YE48LcYcCJChwWc8aEs1vpbTXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "sharp": "0.35.2", + "undici": "7.28.0", + "workerd": "1.20260722.1", + "ws": "8.21.0", + "youch": "4.1.0-beta.10" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.2.tgz", + "integrity": "sha512-eEieHsMksAW4IiO5NzauESRl2D2qz3J/kwUxUrSfV06A93eEaRfMpHXyUb1mAqrR7i8U9A0GRqE9pjn6u1Jjpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-darwin-x64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.2.tgz", + "integrity": "sha512-BaktuGPCeHJMARpodR8jK4uKiZrPAy9WrfQW0sdI37clracq8Bp01AYS3SZgi5FS/y5twa9t4+LIuuxQjqRrWw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.2.tgz", + "integrity": "sha512-YoAxdnd8hPUkvLHd3bWY+YA8nw3xM/RyRopYucNsWHVSan8NLVM3X2volsfoRDcXdUJPg6tXahSd7HXPK7lRnw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.2" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.1.tgz", + "integrity": "sha512-4V/M3roRMTYjiwZY9IOVQOE8OyeCxFAkYmyZDrZl51uOKjibm3oeEJ4WAmLxutAfzFbC9jqUiPs2gbnGflH+7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.1.tgz", + "integrity": "sha512-c0/DxItpJv2+dGhgycJBBgotdqruGYDvA79drdh0MD1dFpy7JzJ/PlXwi1H4rFf0eTy8tgbI91aHDnZIceY3jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.1.tgz", + "integrity": "sha512-aGGy9aWzXgHBG7HNyQPWorZthlp7+x6fDRoPAQbGO3ThcttuTyKIx3NuSHb6zb4gBNq6/yNn9f1cy9nFKS/Vmg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.1.tgz", + "integrity": "sha512-JznefmcK9j1JKPz8AkQDh89kjojubyfOasWBPKfzMIhPwsgDy9evpE/naJTXXXmghS1iFwR8u/kTwh/I2/+GCw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.1.tgz", + "integrity": "sha512-1EkwGNCZk6iWNCMWqrvdJ+r1j0PT1zIz60CNPhYnJlK/zyeWqlsPZIe+ocBVqPF8k/Ssee/NCk+tE9Ryrko6ng==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.1.tgz", + "integrity": "sha512-Ilays+w2bXdnxzxtQdmXR62u8o8GYa3eL4+Gr+1KiE4xperMZUslRaVPJwwPkzlHEjGfXAfRVAa/7CYCtSqsBw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.1.tgz", + "integrity": "sha512-VfBwVHQTbRoj4XlpA/KLZ7ltgMpz+4WSejFzQ+GnoImjo1PtEJ59QB2qR1xQEeRPYIkNrPIm2L4cICMvz4C2ew==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.1.tgz", + "integrity": "sha512-+c8ukgwU62DS54nCAjw7keOfHUkmr0B5QHEdcOqRnodF/MNXJbVI8Eopoj4B/0H8Asr65I+A4Amrn7a85/md6A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.1.tgz", + "integrity": "sha512-qlKb/pwbkAi1WMsJrYHk7CuDrd12s27U2QnRhFYUoJNrRCmkosMTttuRFat/DDB3IlDm5qE1TJgZ4JDnHX8Ldw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.1.tgz", + "integrity": "sha512-yO21HwoUVLN8Qa+/SBjQLMYwBWAVJjeGPNe+hc0OUeMeifEtJqu5a1c4HayE1nNpDih9y3/KkoltfkDodmKAlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-linux-arm": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.2.tgz", + "integrity": "sha512-SE4kzF2mepn6z+6E7L6lsV8FzuLL6IPQdyX8ZiwROAG/G8td+hP/m7FsFPwidtrF19gvajuC9l6TxAVcsA4S7A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-linux-arm64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.2.tgz", + "integrity": "sha512-af12Pnd0ZGu2HfP8NayB0kk6eC/lrfbQE6HlR4jD+34wdJ1Vw9TF6TMn6ZvffT+WgqVsl0hRbmNvz2u/23VmwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.2.tgz", + "integrity": "sha512-hYSBm7zcNtDCozCxQHYZJiu63b/bXsgRZuOxCIBZsStMM9Vap47iFHdbX4kCvQsblPB/k+clhELpdQJHQLSHvg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.2.tgz", + "integrity": "sha512-qQt0Kc13+Hoan/Awq/qMSQw3L+RI1NCRPgD5cUJ/1WSSmIoysLOc72jlRM3E0OHN9Yr313jgeQ2T+zW+F03QFA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-linux-s390x": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.2.tgz", + "integrity": "sha512-E4fLLfRPzDLlEeDaTzI98OFLcv++WL5ChLLMwPoVd0CIoZQqupBSNbOisPL5am9XsbQ9T84+iiMpUvbFtkunbA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-linux-x64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.2.tgz", + "integrity": "sha512-gi0zFJJRLswfCZmHtJdikXPOc5u7qamSOS3NHedLqLd4W8Q0NqjdBr6TTRIgsfFjqfTsHFgdfvJ9LwqSgcHiAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.2.tgz", + "integrity": "sha512-siWbOW1u6HFnFLrp0waKyW7VEf7jYvcDWdrXEFa8AkdAQgEvuu5Fz8/Y70w9EeqAdwDtfU012BhEHHaDqvQNzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.2.tgz", + "integrity": "sha512-YBqMMcjDi4QGYiSn4vNOYBhmlC4z5AXqkOUUqI2e0AFA4urNv4ESgOgwNl3K+4etQhha0twXlzeF20bbULm9Yg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.1" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-wasm32": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.2.tgz", + "integrity": "sha512-Mrv4JQNYVQ94xH+jzZ9r+gowleN8mv2FTgKT+PI6bx5C0G8TdNYndu161pg2i7uoBwxy2ImPMHrJOM2LZef7Bw==", + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.2.tgz", + "integrity": "sha512-QNV27pxs9wpApEiCfvHM1RDoP1w1+2KrUWWDPEhEwg+latvOrfuhWrHWZKwdSFwU6jh3myjw/yOCRsUIuOft3g==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.2" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-win32-arm64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.2.tgz", + "integrity": "sha512-BiVRYc/t6/Vl3e1hBx0hugG4oN9Pydf4fgMSpxTQJmwGUg/YoXTWHiFeRymHfCZzifxu4F4rpk/I67D0LQ20wQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-win32-ia32": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.2.tgz", + "integrity": "sha512-YYEhx9PImCC7T0tI8JDMi4DB9LwLCXCU5OWNYEXAxh5Q1ShKkyC6byxzoBJ3gEFDnH2lQckWuDe70G7mB2XJog==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/@img/sharp-win32-x64": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.2.tgz", + "integrity": "sha512-imoOyBcoM/iiUr4J6VPpCNjPnjvP/Gks95898yB8YqoGGYmHYbOyCuNv9FMhFgtaiHFGbHW8bxKqRV6VjtXThQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/miniflare/node_modules/sharp": { + "version": "0.35.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.2.tgz", + "integrity": "sha512-FVtFjtBCMiJS6yb5CX7Sop45WFMpeGw6oRKuJnXYgf/f1ms/D7LE/ZUSNxnW7rZ/dbslQWYkoqFHGPaDBtaK4w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.2", + "@img/sharp-darwin-x64": "0.35.2", + "@img/sharp-freebsd-wasm32": "0.35.2", + "@img/sharp-libvips-darwin-arm64": "1.3.1", + "@img/sharp-libvips-darwin-x64": "1.3.1", + "@img/sharp-libvips-linux-arm": "1.3.1", + "@img/sharp-libvips-linux-arm64": "1.3.1", + "@img/sharp-libvips-linux-ppc64": "1.3.1", + "@img/sharp-libvips-linux-riscv64": "1.3.1", + "@img/sharp-libvips-linux-s390x": "1.3.1", + "@img/sharp-libvips-linux-x64": "1.3.1", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.1", + "@img/sharp-libvips-linuxmusl-x64": "1.3.1", + "@img/sharp-linux-arm": "0.35.2", + "@img/sharp-linux-arm64": "0.35.2", + "@img/sharp-linux-ppc64": "0.35.2", + "@img/sharp-linux-riscv64": "0.35.2", + "@img/sharp-linux-s390x": "0.35.2", + "@img/sharp-linux-x64": "0.35.2", + "@img/sharp-linuxmusl-arm64": "0.35.2", + "@img/sharp-linuxmusl-x64": "0.35.2", + "@img/sharp-webcontainers-wasm32": "0.35.2", + "@img/sharp-win32-arm64": "0.35.2", + "@img/sharp-win32-ia32": "0.35.2", + "@img/sharp-win32-x64": "0.35.2" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-1.0.1.tgz", + "integrity": "sha512-WmmLty1YWwJl9yZi77v2dVIV6X2kuYV8YYBI/G3LWGKdGHmHUvL1z7FW0iDvEvGAwNEoc5x1tOOOyDnf5jJw/w==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.1.tgz", + "integrity": "sha512-0trZaiG7Y7kN/Egy9a8j47t9osC0Tch4PaIWd9yGF6bvmlk7muExRvGNYb8sXBwEKMoNKsbNN9P8EefuQekE4Q==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.2.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", + "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz", + "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==", + "license": "MIT" + }, + "node_modules/pagefind": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.5.2.tgz", + "integrity": "sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==", + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.5.2", + "@pagefind/darwin-x64": "1.5.2", + "@pagefind/freebsd-x64": "1.5.2", + "@pagefind/linux-arm64": "1.5.2", + "@pagefind/linux-x64": "1.5.2", + "@pagefind/windows-arm64": "1.5.2", + "@pagefind/windows-x64": "1.5.2" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-ancestry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/process-ancestry/-/process-ancestry-0.1.0.tgz", + "integrity": "sha512-tGqJW/UnclpYASFcM6Xh8D8l/BMtaQ9+CSG0vlJSJTcdMM4lDRv4c6H0Pdcsfted+bVczdYSfk2fdukg2gQkZg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-expressive-code": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.44.1.tgz", + "integrity": "sha512-+VZgs7Evw4LXRN3owpoBNSTpYuW6GeOdjqcUT1TuY8o/4MGPtbd0EU7Bgrju7X8KrQ6SslOBAuGWJ5fV5TriJQ==", + "license": "MIT", + "dependencies": { + "expressive-code": "^0.44.1" + } + }, + "node_modules/rehype-format": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-5.0.1.tgz", + "integrity": "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-format": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-4.0.0.tgz", + "integrity": "sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.3.tgz", + "integrity": "sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rolldown": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz", + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" + } + }, + "node_modules/satteri": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/satteri/-/satteri-0.9.5.tgz", + "integrity": "sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.5", + "@types/hast": "^3.0.4", + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3" + }, + "optionalDependencies": { + "@bruits/satteri-darwin-arm64": "0.9.5", + "@bruits/satteri-darwin-x64": "0.9.5", + "@bruits/satteri-linux-arm64-gnu": "0.9.5", + "@bruits/satteri-linux-arm64-musl": "0.9.5", + "@bruits/satteri-linux-x64-gnu": "0.9.5", + "@bruits/satteri-linux-x64-musl": "0.9.5", + "@bruits/satteri-wasm32-wasi": "0.9.5", + "@bruits/satteri-win32-arm64-msvc": "0.9.5", + "@bruits/satteri-win32-x64-msvc": "0.9.5" + } + }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/shiki": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.3.1.tgz", + "integrity": "sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "4.3.1", + "@shikijs/engine-javascript": "4.3.1", + "@shikijs/engine-oniguruma": "4.3.1", + "@shikijs/langs": "4.3.1", + "@shikijs/themes": "4.3.1", + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", + "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^24.9.2", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/esm/cli.js" + }, + "engines": { + "node": ">=20.19.5", + "npm": ">=10.8.2" + } + }, + "node_modules/smol-toml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz", + "integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz", + "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyclip": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.15.tgz", + "integrity": "sha512-uo33abH+Ays0xYaDysoBt494Hb3hsEczMpcC0MwFl773pazORx4fmvKhclhR1wonUbB6vvpRsvVMwnhfqeMc+A==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz", + "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz", + "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.10", + "lru-cache": "^11.2.7", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/url-extras": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/url-extras/-/url-extras-0.1.0.tgz", + "integrity": "sha512-8tzwTeXFPuX/5PHuCDQE5Dd9Ts4rwoq2t9aIT+HS4iAVpmj5l4Ao7Q+BuuFjvWRqrLswBhQDk8O96ZicgCqQqw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz", + "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.17", + "rolldown": "~1.1.5", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/workerd": { + "version": "1.20260722.1", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260722.1.tgz", + "integrity": "sha512-NycKuc1x2onvsRfGGpM093vRlLFU2zHDAM0+APpccfg4+gZxDGCH27RmdDvkeBuoZyYqgLo3oAfF6re4mvC3vQ==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20260722.1", + "@cloudflare/workerd-darwin-arm64": "1.20260722.1", + "@cloudflare/workerd-linux-64": "1.20260722.1", + "@cloudflare/workerd-linux-arm64": "1.20260722.1", + "@cloudflare/workerd-windows-64": "1.20260722.1" + } + }, + "node_modules/wrangler": { + "version": "4.114.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.114.0.tgz", + "integrity": "sha512-M65P25t5UHA1TIJfgZXDcj+YzVobgKdRguM2QPz0xnxLFuOcuE3ErgllDht0iaho7MS4o0g/Bb4YK2+GT+bibg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.5.0", + "@cloudflare/unenv-preset": "2.16.1", + "blake3-wasm": "2.1.5", + "esbuild": "0.28.1", + "miniflare": "4.20260722.0", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.24", + "workerd": "1.20260722.1" + }, + "bin": { + "cf-wrangler": "bin/cf-wrangler.js", + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=22.0.0" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^5.20260722.1" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/youch": { + "version": "4.1.0-beta.10", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.10.tgz", + "integrity": "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, + "node_modules/youch/node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/site/package.json b/site/package.json new file mode 100644 index 0000000..a982012 --- /dev/null +++ b/site/package.json @@ -0,0 +1,25 @@ +{ + "name": "adeptability-site", + "type": "module", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "gen:llms": "node scripts/gen-llms.mjs", + "prebuild": "node scripts/gen-llms.mjs", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/starlight": "^0.41.4", + "@fontsource/jetbrains-mono": "^5.3.0", + "@fontsource/space-grotesk": "^5.3.0", + "astro": "^7.1.3", + "sharp": "^0.33.5" + }, + "devDependencies": { + "wrangler": "^4.114.0" + } +} diff --git a/site/public/agents.gif b/site/public/agents.gif new file mode 100644 index 0000000..9cdc426 Binary files /dev/null and b/site/public/agents.gif differ diff --git a/site/public/authoring.gif b/site/public/authoring.gif new file mode 100644 index 0000000..5efed88 Binary files /dev/null and b/site/public/authoring.gif differ diff --git a/site/public/demo.gif b/site/public/demo.gif new file mode 100644 index 0000000..d365ad3 Binary files /dev/null and b/site/public/demo.gif differ diff --git a/site/public/favicon.svg b/site/public/favicon.svg new file mode 100644 index 0000000..126c5cc --- /dev/null +++ b/site/public/favicon.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/site/public/llms-full.txt b/site/public/llms-full.txt new file mode 100644 index 0000000..36e03b8 --- /dev/null +++ b/site/public/llms-full.txt @@ -0,0 +1,2721 @@ +# adeptability documentation + +> adept is an open source Go CLI (MIT licensed) that lets you author an AI coding skill or subagent once, in a single canonical format, then render it accurately into Claude Code, Cursor, GitHub Copilot, OpenAI Codex, OpenCode, and 50+ other AI coding agents. Think of it as dotfiles for your AI coding agents: one source of truth, and the correct on-disk format everywhere. A hash-based 3-way detector flags drift, and libraries let a team share a versioned set of skills by reference. + +This file concatenates the full text of all 24 documentation pages. +Source: https://adeptability.itaywol.tools/ | Generated by scripts/gen-llms.mjs + +--- + +# adeptability + +URL: https://adeptability.itaywol.tools/docs/ +Description: Write an AI coding skill once, run it in every AI coding assistant. + +**Write an AI coding skill once, run it in every AI coding assistant.** + +`adept` is a small Go CLI that lets you author an AI agent skill — a prompt, rule, or +procedure — **once**, in a single canonical format, then render it accurately into Claude +Code, Cursor, GitHub Copilot, OpenAI Codex, OpenCode, and 50+ other AI coding agents. + +Every agent loads skills from a different path with a different schema +(`.claude/skills//SKILL.md`, `.cursor/rules/.mdc`, a single `AGENTS.md` for Codex, +`.github/instructions/*.instructions.md` for Copilot, …). Keeping the same knowledge +consistent across all of them by hand drifts fast. `adept` keeps one source of truth and +handles the per-harness frontmatter, activation rules, aggregation, and size budgets. + +Think of it as **dotfiles for your AI coding agents**. + +## Why adept + +- **One skill, every format.** No copy-pasting incompatible frontmatter into five paths. +- **Drift-proof.** Edit a skill in any harness, pull it back to canonical, re-publish. A + hash-based 3-way detector flags divergence via `adept status` and `adept diff`. +- **Package-manager libraries.** Share a versioned set of skills across a team by reference — + the repo commits a pointer, not the bytes. +- **Safe installs.** A static + optional-LLM scanner checks skills from `skills.sh` / GitHub + before they land; critical findings hard-block by default. +- **Signed & reproducible.** Content-hashed skills, pinned upstream provenance, cosign-signed + release binaries. + +## Where to next + +- 📦 **[Install](/docs/getting-started/install/)** — Go, Homebrew, curl, Docker. +- 🚀 **[Quickstart](/docs/getting-started/quickstart/)** — author, sync, and see it in your harness in 60 seconds. +- 💡 **[Concepts](/docs/concepts/canonical-skills/)** — canonical skills, harnesses, libraries, layouts, drift. +- ⌨️ **[Command reference](/docs/reference/commands/)** — every command and flag. + +## The core loop + +```bash +adept init # scaffold, adopt existing harness files, seed default skills +adept skill add lint-style --edit # author a canonical skill +adept harness add claude-code +adept harness add cursor +adept sync # render canonical → every enabled harness +adept status # init, libraries, harnesses, and drift at a glance +``` + +Author in one place, `adept sync`, and each agent gets its own correct format. + +--- + +# Install + +URL: https://adeptability.itaywol.tools/docs/getting-started/install/ +Description: Install adept, a single self-contained binary, via whichever channel fits your platform. + +`adept` is a single self-contained binary. Pick whichever channel fits your platform. + +## Go + +```bash +go install github.com/itaywol/adeptability/cmd/adept@latest +``` + +Requires Go 1.25+. Installs to `$(go env GOBIN)` (or `$(go env GOPATH)/bin`) — make sure it's +on your `PATH`. + +## Homebrew (macOS / Linux) + +```bash +brew install itaywol/tap/adeptability +``` + +## curl installer + +```bash +curl -fsSL https://raw.githubusercontent.com/itaywol/adeptability/main/scripts/install.sh | sh +``` + +The installer downloads the latest release archive, verifies its cosign signature, and drops +the binary in `/usr/local/bin`. Environment overrides: + +| Variable | Default | Purpose | +| --- | --- | --- | +| `ADEPT_VERSION` | `latest` | Install a specific release tag | +| `ADEPT_BIN_DIR` | `/usr/local/bin` | Install location | +| `ADEPT_NO_VERIFY` | `0` | Set to `1` to skip cosign verification | + +## Nix / NixOS (flake) + +The repo ships a flake exposing the package, an overlay, and a dev shell. + +```bash +# try it without installing +nix run github:itaywol/adeptability -- --help + +# imperative install into your profile +nix profile install github:itaywol/adeptability +``` + +Declarative NixOS / home-manager setup — add the input and pull the package: + +```nix +{ + inputs.adeptability.url = "github:itaywol/adeptability"; + + # NixOS: environment.systemPackages = [ inputs.adeptability.packages.${pkgs.system}.default ]; + # home-manager: home.packages = [ inputs.adeptability.packages.${pkgs.system}.default ]; + # or apply the overlay and use pkgs.adeptability: + # nixpkgs.overlays = [ inputs.adeptability.overlays.default ]; +} +``` + +Pin a release with `github:itaywol/adeptability/v1.6.0`. `nix develop` drops you into a shell +with `go`, `gopls`, and `golangci-lint` for hacking on adept itself. + +## Docker (GHCR) + +```bash +docker run --rm -v "$PWD:/work" -w /work ghcr.io/itaywol/adeptability:latest --help +``` + +Mount your project at `/work` so `adept` operates on your repo. + +## Pre-built binaries + +Every release ships cross-compiled archives for darwin / linux / windows × amd64 / arm64, +plus `checksums.txt`, cosign signatures, and build-provenance attestation. Download from the +[latest release](https://github.com/itaywol/adeptability/releases/latest). + +:::note[Other package managers] +Scoop, WinGet, and an npm wrapper are prototyped but **not published yet**. If you want +one of them, add a 👍 to the +[additional package managers issue](https://github.com/itaywol/adeptability/issues) so we +know it's worth committing to maintaining. +::: + +## Verify the install + +```bash +adept --version +adept --help +``` + +## Shell completion + +`adept completion ` prints a completion script to stdout for `bash`, `zsh`, `fish`, or +`powershell`: + +```bash +adept completion zsh > "${fpath[1]}/_adept" # zsh +adept completion bash > /etc/bash_completion.d/adept # bash +adept completion fish > ~/.config/fish/completions/adept.fish +adept completion powershell > adept.ps1 # PowerShell +``` + +Run `adept completion --help` for the per-shell install instructions. + +:::note[Pre-generated completions ship with releases] +The repo also keeps generated scripts under `completions/` (`adept.bash`, `adept.zsh`, +`adept.fish`, `adept.ps1`), regenerated by `scripts/completions.sh`. Release archives bundle +them, and the Homebrew and Nix packages install bash, zsh, and fish completions for you, so +manual setup is only needed for a `go install` or raw-binary install. +::: + +--- + +# Quickstart + +URL: https://adeptability.itaywol.tools/docs/getting-started/quickstart/ +Description: Author a skill once and watch it materialize into every enabled harness in about a minute. + +Author a skill once and watch it materialize into every enabled harness in about a minute. + +## 1. Initialize a project + +```bash +cd ./my-project +adept init +``` + +This creates `.adeptability/{skills,base}/`, writes `.adeptability/config.json`, and — if it +finds any pre-existing harness files (`.claude/`, `.cursor/`, `.opencode/`, `AGENTS.md`, +`.github/instructions/`) — **adopts them into canonical** and records the matching harness +ids. It also seeds four bundled default skills: + +- `using-adept` — how to drive the CLI +- `authoring-adept-skills` — how to write a good, portable skill +- `adept-self-improve` — capture a session lesson as a skill, then sync it everywhere +- `expertise-exchange` — ask teammates for expertise via the `adept exchange` board + +Skip the seeds with `adept init --no-default-skills`. + +## 2. Author a skill + +```bash +adept skill add lint-style --edit +``` + +`add` scaffolds `.adeptability/skills/lint-style/SKILL.md`; `--edit` opens it in `$EDITOR`. +A skill is YAML frontmatter plus a markdown body: + +```markdown +--- +id: lint-style +description: Apply when writing or reviewing code. Enforce the house lint rules. +activation: agent +allowed-tools: [Read, Grep] +--- +# House style + +- Prefer early returns over nested conditionals. +- No unused imports. +``` + +## 3. Enable harnesses + +```bash +adept harness add claude-code +adept harness add cursor +adept harness list # see every registered harness + enabled state +``` + +## 4. Sync + +```bash +adept sync +``` + +`adept` renders the canonical skill into each enabled harness's native format: + +``` +.claude/skills/lint-style/SKILL.md # Claude Code +.cursor/rules/lint-style.mdc # Cursor (frontmatter translated per activation mode) +``` + +## 5. Check state + +```bash +adept status +``` + +``` +adept: initialized at /home/you/my-project (mode=symlink) +library root: /home/you/.adeptability +libraries: (none — project-only mode) +skills: 5 in project canonical, 0 resolved from libraries +harnesses: + ID ENABLED SYNCED DRIFTED MISSING CONFLICT + claude-code yes 5 0 0 0 + cursor yes 5 0 0 0 +``` + +`status` exits `2` when anything is out of sync, so scripts and CI can branch on it. + +## The reverse direction + +Edited a skill directly inside a harness file? Pull it back to canonical, then re-publish: + +```bash +adept sync-from # adopt harness-side edits into canonical (interactive) +adept sync # re-render canonical → every harness +``` + +## Next + +- [Author a robust, portable skill](/docs/guides/authoring/) +- [Share a library across your team](/docs/guides/sharing-a-library/) +- [Full command reference](/docs/reference/commands/) + +--- + +# Your first skill + +URL: https://adeptability.itaywol.tools/docs/getting-started/first-skill/ +Description: Build your first canonical skill from scratch and render it into every harness. + +A skill is a directory containing one `SKILL.md` (or `skill.yaml` + body) and any optional +sidecars. This page walks through creating one from scratch. + +## Anatomy of a skill + +``` +.adeptability/skills/pr-review/ +├── SKILL.md # frontmatter + markdown body (required) +├── scripts/ # optional sidecar: helper scripts +├── references/ # optional sidecar: reference docs +└── assets/ # optional sidecar: images, data files +``` + +`SKILL.md` is YAML frontmatter followed by the markdown body: + +```markdown +--- +id: pr-review +description: Use before opening a PR. Tests, security, performance. +activation: agent # always | globs | agent | manual +allowed-tools: [Read, Grep] # carried into Claude Code +tags: [review, quality] +--- +# PR Review Checklist + +- [ ] Tests added or updated +- [ ] No secrets in the diff +- [ ] Public API changes documented +``` + +The schema lives at `pkg/adeptschema/skill.schema.json` and is validated on every load. + +:::note[`id` vs `name`] +The canonical frontmatter key is `id`; `name` is accepted as an alias and mapped to `id` +on load. Skill **ids** are validated against +`^[a-z0-9](?:[a-z0-9-]{0,48}[a-z0-9])?$` — lowercase ASCII letters, digits, and internal +hyphens, max 50 chars. This is the lowest common denominator across harnesses, so a valid +id always renders a valid harness name and directory. +::: + +## Activation modes + +`activation` tells each harness *when* to surface the skill. `adept` translates it per +harness — see the [Harness Comparison](/docs/harness-comparison/) for the full table. + +| Mode | Meaning | +| --- | --- | +| `always` | Always in context | +| `globs` | Active when the current files match the skill's globs | +| `agent` | The agent decides based on `description` (progressive disclosure) | +| `manual` | Only when explicitly invoked | + +## Create it + +```bash +adept skill add pr-review --edit +``` + +`--edit` opens the scaffolded `SKILL.md` in `$EDITOR`. To import an existing skill directory +instead of scaffolding a blank one: + +```bash +adept skill add pr-review --from ./path/to/existing-skill +``` + +## Render and inspect + +```bash +adept harness add claude-code +adept sync +cat .claude/skills/pr-review/SKILL.md +``` + +## List what's resolved + +```bash +adept skill list # project canonical + skills resolved from libraries +adept skill list --project-only # only skills in the project canonical +``` + +## Related + +- [Authoring a skill (guide)](/docs/guides/authoring/) — writing effective, portable skills. +- [Canonical skills (concept)](/docs/concepts/canonical-skills/) — the data model in depth. + +--- + +# Canonical skills + +URL: https://adeptability.itaywol.tools/docs/concepts/canonical-skills/ +Description: The canonical skill is adept's single source of truth for everything it renders. + +The **canonical skill** is `adept`'s single source of truth. Everything else — the files in +`.claude/`, `.cursor/`, `AGENTS.md`, and so on — is *rendered output* derived from it. + +## On disk + +A canonical skill is a directory named by its id, containing a `SKILL.md` plus optional +sidecars: + +``` +/pr-review/ +├── SKILL.md +├── scripts/ +├── references/ +└── assets/ +``` + +Where `` lives depends on the project [layout](/docs/concepts/layouts/): + +- **Consumer layout** (default): `/.adeptability/skills/` +- **Library layout** (`init --as-library`): `/skills/` + +## SKILL.md + +`SKILL.md` is YAML frontmatter followed by a markdown body. `adept` also accepts a `skill.yaml` +sidecar for the frontmatter. Recognized frontmatter fields: + +| Field | Purpose | +| --- | --- | +| `id` (alias `name`) | The skill identity (validated id charset, ≤ 50 chars) | +| `description` | Used by agent-mode harnesses for progressive disclosure / activation | +| `activation` | `always` \| `globs` \| `agent` \| `manual` | +| `globs` | File globs that activate a `globs` skill | +| `allowed-tools` | Tool allowlist carried into Claude Code | +| `tags` | Free-form topic tags | + +```markdown +--- +id: pr-review +description: Use before opening a PR. Tests, security, performance. +activation: agent +allowed-tools: [Read, Grep] +tags: [review, quality] +--- +# PR Review Checklist +... +``` + +The body is arbitrary markdown. Sidecar files (`scripts/`, `references/`, `assets/`) ship +alongside the body and are preserved by harnesses that support them. + +## Identity is content, not version + +A skill's identity is `(id, content-hash)`. There are **no version numbers** — the content +hash is the source of truth for "did this change." This is what powers the +[drift detection](/docs/concepts/drift/): `adept` compares hashes of the project canonical, the last-synced +base snapshot, and the library canonical to decide whether a skill is `synced`, `ahead`, +`behind`, or `diverged` — and separately compares canonical against each harness's rendered +output to detect harness drift. + +## Validation + +Every skill is validated against `pkg/adeptschema/skill.schema.json` on load. Invalid +frontmatter or an out-of-charset id fails fast with a clear error rather than producing broken +harness output. + +## Resolution order + +When `adept` builds the set of skills for a project, it resolves: + +1. Project canonical skills (highest priority) +2. Skills from each configured [library](/docs/concepts/libraries/), in order + +A project-canonical skill **shadows** a library skill sharing the same id, and across multiple +libraries the first match wins. Use `adept skill list` to see the resolved set. + +--- + +# Canonical agents + +URL: https://adeptability.itaywol.tools/docs/concepts/agents/ +Description: Skills make knowledge portable; agents make delegation portable across every harness. + +Skills make *knowledge* portable; agents make *delegation* portable. An agent (a.k.a. +subagent) is a named specialist a coding harness can hand work to — a reviewer, a test +runner, a migration worker — defined by a description (the delegation trigger), a system +prompt, and a tool policy. + +Every major harness grew its own agent format. adept gives them one canonical source. + +## The canonical form + +One file per agent, in both project layouts: + +``` +.adeptability/agents/.md +``` + +```markdown +--- +id: pr-reviewer # filename is authoritative, like skill directory names +description: Adversarially reviews drafted changes. Use proactively before every commit. +mode: subagent # subagent | primary | all +tools: [Read, Grep, Bash] # allowlist; omitted = inherit everything +disallowed-tools: [Write] +model: inherit # passed through verbatim +targets: [] # empty = every enabled harness +harness: # per-harness overrides, merged last-wins at render + cursor: { readonly: true } + codex: { sandbox_mode: read-only } +--- +You are an adversarial reviewer. Assume the work is broken until proven otherwise. +... +``` + +The body is the agent's **entire system prompt** — subagents do not inherit the main +conversation's system prompt. Identity is `(id, content-hash)`, exactly like skills. Unlike +skills, agents have no sidecars (no harness supports attaching files to an agent definition) +and no published/private library split — they render to the maintainer's harnesses only. + +## Templates + +`adept agent add ` scaffolds a new canonical agent from a best-practice template instead of +a blank file: + +```bash +adept agent add pr-reviewer # --template default (the default) +adept agent add pr-reviewer --template evaluator +adept agent add pr-reviewer --edit # open in $EDITOR after creating +adept agent add pr-reviewer --from ./existing.md # import an existing agent file instead +``` + +Both templates encode the structure the `adept agent check` linter looks for: a trigger-shaped +description, a one-line role, when-invoked steps, an output contract, and an explicit boundaries +section. + +- `default`: a general specialist skeleton. Placeholder frontmatter (commented `mode`, `tools`, + `model`), a role line, a numbered "When invoked" sequence, an "Output" contract, and + "Boundaries" split into do / do-not. +- `evaluator`: the generator/evaluator pattern for a reviewer that verifies someone else's work. + It assumes the work is broken, insists on acting (running tests) over reading, uses a + PASS/REJECT verdict, and sets report-only boundaries (never fix, never approve unexecuted + work). Its tool hint includes `Bash` because an evaluator must run things. + +`agent add` is project-scoped; it refuses `--global`. See the bundled `authoring-adept-agents` +skill (seeded by `adept init`) for the authoring playbook. + +## Where agents render + +| Harness | Output | Notes | +| --- | --- | --- | +| Claude Code | `.claude/agents/.md` | Richest mapping: tools, disallowedTools, model | +| OpenCode | `.opencode/agents/.md` | Filename = name; `mode` maps natively; tool lists warn-drop (use a `permission` override) | +| Cursor | `.cursor/agents/.md` | All-optional frontmatter; `readonly` via override | +| Copilot | `.github/agents/.agent.md` | `tools` allowlist maps; per-file even though Copilot skills aggregate | +| Codex | `.codex/agents/.toml` | TOML; body becomes `developer_instructions` (required — empty bodies fail) | + +Fields a harness cannot express are **warn-dropped at sync**, never silently. Harnesses with +no agent concept (the generic vercel-matrix targets) skip agents with a warning. + +:::note[Cursor reads `.claude/agents/` too] +Syncing agents to both `claude-code` and `cursor` makes each agent appear twice inside +Cursor. Scope such agents with `targets:` — sync warns when this applies. +::: + +## Drift, import, and checks + +Agents ride the same machinery as skills: + +- `adept status` / `adept diff` include rendered agent files in the per-harness drift report. +- `adept sync-from` imports harness-side agent edits back to canonical (foreign, + harness-only fields are warn-dropped and reported — the `harness:` block is never + reconstructed, matching skill imports). +- `adept agent check ` runs the safety scanner (malicious-instruction patterns + optional + LLM pass) and a best-practice linter: trigger-shaped descriptions, one job per agent, + generator/evaluator separation, explicit boundaries, tool hygiene, and body file references + that actually exist. High/critical findings exit `2`. + +There is no 3-way merge for agents in v1: sync overwrites the rendered files and drift warns +first. + +See the [command reference](/docs/reference/commands/#agent) for the full `adept agent` +surface, and the bundled `authoring-adept-agents` skill (seeded by `adept init`) for the +authoring playbook your harness agents read. + +--- + +# Harnesses & adapters + +URL: https://adeptability.itaywol.tools/docs/concepts/harnesses/ +Description: A harness is a target AI coding agent. Learn how adept adapts skills to each one. + +A **harness** is a target AI coding agent. Each one loads skills from its own path with its own +schema. `adept sync` renders every canonical skill into every *enabled* harness, and +`adept sync-from` adopts harness-side edits back into canonical. + +Enable and inspect harnesses: + +```bash +adept harness add claude-code # enable a harness +adept harness remove cursor # disable a harness +adept harness list # registered harnesses + enabled state +``` + +Enabled harness ids are recorded in `.adeptability/config.json` under `harnesses[]`. + +## Specialized renderers + +Five harnesses ship dedicated renderers that get the details right — correct frontmatter, +activation translation, sidecar handling, and size budgets: + +| Harness | id | Output | Global | +| --- | --- | --- | --- | +| Claude Code | `claude-code` | `.claude/skills//SKILL.md` (full sidecars, `allowed-tools`) | `~/.claude/skills//SKILL.md` | +| Cursor | `cursor` | `.cursor/rules/.mdc` (activation → `alwaysApply`/`globs`/`description`) | not global-capable | +| OpenCode | `opencode` | `.opencode/skill//SKILL.md` (full sidecars) | `~/.config/opencode/skill//SKILL.md` | +| Codex | `codex` | `AGENTS.md` (aggregated, 32 KiB cap, lowest-priority dropped first) | `~/.codex/AGENTS.md` | +| GitHub Copilot | `copilot` | `.github/instructions/.instructions.md` (aggregated per-glob) | not global-capable | + +See the [Harness Comparison](/docs/harness-comparison/) for exactly what each renderer emits +and why it differs, and [Scopes](/docs/concepts/scopes/) for what `--global` changes and why Cursor and +Copilot are excluded. + +## Generic per-skill adapters + +Beyond the five specialized renderers, `adept` ships built-in **generic per-skill adapters** +for 50+ more agents — each writing `SKILL.md` into that agent's convention. A sample: + +`amp`, `cline`, `continue`, `gemini-cli`, `github-copilot` (agent-skills mode), `goose`, +`junie`, `kilo`, `openhands`, `qwen-code`, `roo`, `warp`, `windsurf`, `zencoder`, and many +more that write into a shared `.agents/skills//SKILL.md`. + +Run `adept harness list` for the authoritative, live registry — it always reflects the version +you have installed. + +## Config-driven adapters (no recompile) + +You can teach `adept` about a new harness by dropping a YAML adapter file into +`$ADEPT_LIBRARY/adapters/` (or a library's `adapters/` dir). It's loaded at startup. Example: + +```yaml +id: jetbrains-junie +name: JetBrains Junie +kind: per-skill +output: ".junie/guidelines/{id}.md" +needs-directory: false +size-budget-bytes: 0 + +frontmatter: + include: + - description + - tags + rename: + description: summary + +body: + prefix: | + > Auto-generated by adeptability. Do not edit by hand. + +detect: + - ".junie/" + - ".junie/guidelines/" +``` + +Adapter files are validated against an embedded schema on load. Key fields: + +- `kind` — `per-skill` (one file per skill), `aggregator-single`, or `aggregator-per-glob`. +- `output` — the on-disk path template; `{id}` expands to the skill id. +- `frontmatter.include` / `frontmatter.rename` — which canonical fields to emit, and any + key renames. +- `body.prefix` / `body.suffix` / `body.replace` — body transforms (with `{{.Project.Name}}` + templating). +- `detect` — path globs used to auto-adopt existing files on `adept init`. +- `import.rename` — optional reverse-render hints; the default `sync-from` flow auto-derives + the inverse of `frontmatter.rename`, so this is only needed for non-bijective renames. + +See `examples/adapters/jetbrains-junie.yaml` in the repo for the fully annotated version. + +## Global support + +Two optional keys give a config-driven adapter a home-level target, same as the built-in +renderers: + +```yaml +id: jetbrains-junie +name: JetBrains Junie +kind: per-skill +output: ".junie/guidelines/{id}.md" +global-output: ".junie/guidelines/{id}.md" # path relative to the global render root ($HOME) +global-base-dir: ".junie" # detection root when scoped globally +``` + +Leave both out and the adapter simply isn't global-capable: `adept --global harness add +` fails with `harness has no global config location`, same as the built-in Cursor and +Copilot adapters. See [Scopes](/docs/concepts/scopes/) for the full global-scope model. + +--- + +# Libraries + +URL: https://adeptability.itaywol.tools/docs/concepts/libraries/ +Description: A library is a shared, versioned set of skills a team authors once and reuses everywhere. + +A **library** is a shared, versioned set of skills. Libraries are how a team authors skills +once and consumes them across many projects — resolved **package-manager style**. + +## The package-manager model + +This is the single most important mental model in `adept`, and the most common source of +confusion. A consumed library is **not committed into your project's canonical skills**. +Instead: + +- The library's skills are cloned **into the project**, at + `/.adeptability/libs//skills/` — but that clone directory is auto-gitignored + (`adept` appends `libs/` and `staging/` to `.adeptability/.gitignore` the first time it's + created), so the clone itself never enters version control. +- Your project commits only a **reference** in `.adeptability/config.json`: + + ```json + { + "schema": 1, + "libraries": [ + { "name": "team-skills", "remote": "git@github.com:acme/skills.git", "ref": "main" } + ] + } + ``` + +The `libraries[]` entry is a *pointer* (`{name, remote, ref}`), not the skill bytes. Think of +it like a lockfile-driven dependency: the project declares what it depends on, and `adept +library add` / `adept migrate` re-materialize the clone from that pointer on any machine. + +``` +project/.adeptability/config.json → libraries: [{name, remote, ref}] (committed) + │ resolves to + ▼ +project/.adeptability/libs//skills/ → the actual skill content (gitignored clone) + │ rendered by `adept sync` + ▼ +project/.claude/ .cursor/ AGENTS.md … materialized harness output (gitignored / generated) +``` + +### The machine store + +`$ADEPT_LIBRARY` (default `~/.adeptability`) is the **machine store** — it's also where the +[global scope](/docs/concepts/scopes/) keeps its own skills, config, and library clones. Two things fall +back to it from project scope: + +- **Resolution fallback**: if a configured library has no clone under + `/.adeptability/libs//`, `adept` looks for one at + `~/.adeptability/libs//` and uses it if found — logging a warning that the library + resolved from the machine store and suggesting `adept migrate` to localize it. This keeps a + library added under `--global` (or a legacy project) usable from any project without + re-cloning. +- **`adept migrate`**: for every configured library, clones it into + `/.adeptability/libs/` if it isn't already a valid local git clone there + (libraries already local are left untouched and reported as such), so resolution stops + depending on the machine store. It then ensures the project's `.gitignore` covers the clone + dir. It only touches the project's own clone directory — the machine store is never deleted, + since the global scope and other projects may still be using it. Running it against + `--global` is rejected (global libraries already live in the machine store — there's nothing + to localize). + +## Adding a library + +```bash +# During init: +adept init --from git@github.com:acme/skills.git --name team-skills --ref main + +# Or into an existing project: +adept library add team-skills --from git@github.com:acme/skills.git --ref main +``` + +Either clones the remote into `/.adeptability/libs/team-skills/` and appends the +reference to `config.json`. Stack multiple libraries — on a skill-id collision, **first-wins**, +and any project-canonical skill shadows all of them. + +Run the same command with the root `--global` flag to clone into the machine store instead +(`adept --global library add team-skills --from … ` → `~/.adeptability/libs/team-skills/`) — +see [Scopes](/docs/concepts/scopes/). + +Manage libraries: + +```bash +adept library list # configured library references + on-disk / update state +adept library update [name] # fetch newer skills from a library (prompts before applying) +adept library update --yes # apply without prompting +adept library remove team-skills # drop the reference (keeps the clone) +adept library remove team-skills --purge # …and delete the local clone +``` + +## Teammate onboarding flow + +This is why the reference model matters. When a teammate clones a repo that already has a +library reference: + +1. **Clone the repo.** They get `.adeptability/config.json` with the `libraries[]` reference — + but no skill bytes, because those were never committed. +2. **Run `adept`** (`adept sync`, or `adept library add`/`update` if the clone isn't present). + `adept` reads the reference and **clones the remote into their own project-local libs dir** + (`/.adeptability/libs//`) — unless a clone already exists in their machine + store from an earlier project or `--global` use, in which case it resolves from there + instead (see [The machine store](#the-machine-store)). +3. **Harnesses materialize.** `adept sync` renders the resolved skills into their harness dirs + (`.claude/`, `.cursor/`, …) using their configured [materialization mode](#materialization). + +```bash +git clone git@github.com:acme/webapp.git && cd webapp +adept status # shows: library "team-skills" — no (run `adept library add` or `git pull`) +adept library add team-skills --from git@github.com:acme/skills.git # clone into .adeptability/libs/ +adept sync # materialize into this machine's harnesses +``` + +`adept status` reports each library's on-disk presence and whether an update is available +(`adept status --fetch` refreshes remote tracking refs first). + +## Materialization + +`adept` writes rendered harness files in one of two modes, set per project +(`config.mode`, default `symlink`): + +- **`symlink`** (default) — harness files are symlinks into the resolved skill content. Cheap, + and edits propagate; the recommended default. +- **`copy`** — harness files are plain copies. Use when a tool or CI environment doesn't follow + symlinks. + +Set it with `adept config set mode symlink|copy` or `adept init --mode copy`. + +## Base snapshot + +Alongside the resolved library, `adept` keeps a **base snapshot** at +`/.adeptability/base//` — the last-synced common ancestor. It's the third leg of the +[3-way drift model](/docs/concepts/drift/) that lets `adept` tell "you edited it" apart from "upstream +changed it." + +## Related + +- [Sharing a library with a team (guide)](/docs/guides/sharing-a-library/) +- [Vendoring a library in-repo (guide)](/docs/guides/vendoring/) +- [Layouts](/docs/concepts/layouts/) — consumer vs. publishable-library layout. + +--- + +# Scopes + +URL: https://adeptability.itaywol.tools/docs/concepts/scopes/ +Description: A scope decides where adept reads and writes its metadata, skills, and materialized files. + +A **scope** decides *where* `adept` reads and writes its metadata, skills, and materialized +harness files: a single project, or your whole account (home directory). + +## The two scopes + +| | Project scope (default) | Global scope (`--global`) | +| --- | --- | --- | +| Metadata root | `/.adeptability/` | `$ADEPT_LIBRARY` (default `~/.adeptability`) | +| Canonical skills | `/.adeptability/skills/` | `~/.adeptability/skills/` | +| Base snapshots | `/.adeptability/base/` | `~/.adeptability/base/` | +| Render staging | `/.adeptability/staging/` | `~/.adeptability/staging/` | +| Library clones | `/.adeptability/libs/` | `~/.adeptability/libs/` (the machine store itself) | +| Render root | `/` | parent of the library root (`$HOME` by default) | +| Agents | rendered | **not rendered** (v1 limitation, see below) | + +In global scope, `adept`'s own metadata directory (`~/.adeptability`) *is* the machine-wide +library store — there's no separate project to point at. Rendering targets each harness's +home-level config location instead of a project-relative one, e.g. `~/.claude/skills//SKILL.md` +instead of `/.claude/skills//SKILL.md`. + +## Scope resolution + +Every command resolves its scope in this order: + +1. **`--global`** — forces global scope, regardless of cwd. +2. **Explicit `--project `** — pins that directory; no walk-up. +3. **Walk up from cwd** looking for `.adeptability/config.json` — the nearest ancestor with one + wins. +4. **Global fallback** — if no project is found anywhere up the tree, `adept` falls back to the + global scope and logs a one-line warning to stderr: + + ``` + no project found (no .adeptability/config.json up the tree) — operating on global scope; pass --project to target a project + ``` + +`--global` and `--project` are mutually exclusive in effect — `--global` always wins if both +are set. + +## Global-capable harnesses + +Only harnesses with a real home-level config location can be enabled with `--global`: + +| Harness | Global output | +| --- | --- | +| `claude-code` | `~/.claude/skills//SKILL.md` | +| `codex` | `~/.codex/AGENTS.md` | +| `opencode` | `~/.config/opencode/skill//SKILL.md` | + +`cursor` and `copilot` are **not** global-capable: Cursor rules and Copilot's per-glob +instructions buckets are project-scoped concepts with no equivalent home-level file the +respective tool reads, so there's nothing meaningful to render into. Both +`adept --global harness add cursor` and `adept --global harness add copilot` are rejected: + +``` +harness "cursor": harness has no global config location (project scope only) +``` + +Config-driven (YAML) adapters can opt into global support too — see +[Harnesses & adapters](/docs/concepts/harnesses/#global-support). + +## v1 limitation: skills only + +Global scope renders **skills only** — canonical agents are not yet given a global target, so +`adept --global sync` skips agent rendering entirely. This is a deliberate v1 narrowing, not an +oversight; agent rendering resumes automatically once a project scope is used. + +`adept sync-from --global` is narrower still: it currently only supports harnesses whose global +render path matches their project-relative one byte-for-byte (`claude-code`). Importing +harness-side edits back from other global-capable harnesses is not yet wired up. + +## Quickstart + +```bash +adept --global harness add claude-code # enable Claude Code globally +adept --global skill add my-skill --edit # author a skill under ~/.adeptability/skills/ +adept --global sync # render it to ~/.claude/skills/my-skill/SKILL.md +``` + +Everything else — `adept --global skill list`, `adept --global status`, `adept --global library +add …` — works the same way: pass `--global` on any command that would otherwise resolve a +project. + +## Safety + +`adept sync` (global or project) only ever writes to the specific output path it computed for +each skill — it never scans or prunes a harness directory. A global sync into `~/.claude/` +leaves every file it doesn't manage (other skills, your own notes, anything not under a path +`adept` generated) byte-for-byte untouched, including on repeated and forced syncs. + +## Related + +- [Libraries](/docs/concepts/libraries/) — project-local clones vs. the machine store, and how the two + interact with scope. +- [Harnesses & adapters](/docs/concepts/harnesses/) — the full adapter table, including the Global column. + +--- + +# Layouts + +URL: https://adeptability.itaywol.tools/docs/concepts/layouts/ +Description: A project's layout decides where canonical skills live on disk. + +A project's **layout** decides *where canonical skills live on disk*. It's set once at +`init` time and recorded in `.adeptability/config.json` (`layout`). + +## Consumer layout (default) + +The default. Canonical skills live under `.adeptability/`, keeping adept's files out of the way +of your actual project: + +``` +/ +├── .adeptability/ +│ ├── config.json +│ ├── skills//SKILL.md ← canonical skills +│ └── base// ← last-synced base snapshots +├── .claude/ ← materialized (generated) +└── .cursor/ ← materialized (generated) +``` + +Create it with a plain: + +```bash +adept init +``` + +Use this for any repo that *consumes* skills (an app, a service, your day-to-day project). + +## Library layout (`--as-library`) + +For a repo whose purpose **is** to be a shared library. Canonical skills live at +`/skills/` — the exact place a consumer's `adept library add` / `adept init --from` +reads them — so the repo is directly consumable as a library: + +``` +/ +├── skills//SKILL.md ← canonical (published) skills +└── .adeptability/ + ├── config.json (layout: "library") + └── base// +``` + +Create it with: + +```bash +adept init --as-library +``` + +In library layout, `adept`: + +- Places canonical skills at `/skills/` instead of `.adeptability/skills/`. +- **Skips** harness adoption, materialization mode, and the bundled consumer default skills — + a library curates its own skills and renders to no harnesses of its own. + +## Publishing vs. private dev skills in a library + +Inside a library project, `adept skill add` writes to the **private dev-canonical** by +default (skills you use while developing the library, not published to consumers). Add +`--publish` to place a skill into the published `skills/` tree that consumers pull: + +```bash +adept skill add my-published-skill --publish --edit +``` + +`adept status` distinguishes them: *"N published, M private, K resolved from libraries."* + +## Choosing + +| You are… | Layout | Command | +| --- | --- | --- | +| Building an app that uses skills | Consumer | `adept init` | +| Building a skill library others depend on | Library | `adept init --as-library` | + +--- + +# Drift & the 3-way model + +URL: https://adeptability.itaywol.tools/docs/concepts/drift/ +Description: adept has no lockfile: the filesystem is the source of truth. Understand the 3-way drift model. + +`adept` has no lockfile. The **filesystem itself is the source of truth**, and hash +comparisons tell `adept` exactly what changed and in which direction. Two independent +comparisons run: the **3-way model** between project and library, and a per-harness +comparison between canonical and the rendered output on disk. + +## The 3-way model: project vs. library + +For every skill, `adept` compares three content hashes: + +1. **Project canonical** — `/.adeptability/skills//` (or `/skills//` in a + library layout). This is "ours." +2. **Base** — `/.adeptability/base//`, the last-synced snapshot. This is the common + ancestor. +3. **Library canonical** — `$ADEPT_LIBRARY/skills//`. This is "upstream." + +Because skill identity is `(id, content-hash)`, `adept` can hash each side and reason about +divergence without any version numbers or a lockfile. + +| State | Meaning | +| --- | --- | +| `synced` | Neither side changed since base — nothing to do. | +| `ahead` | Project canonical changed; the library didn't. Your local edit. | +| `behind` | Library changed; project canonical didn't. Upstream moved. | +| `diverged` | Both sides changed since base — a real conflict. | + +This is what lets `adept` tell *"you edited it"* apart from *"upstream changed it"* — see +[Libraries](/docs/concepts/libraries/) for how the base snapshot fits in. + +## Harness drift: canonical vs. rendered output + +Separately, `adept` renders each skill in memory and compares the result against what's +actually on disk in each enabled harness (`.claude/…`, `.cursor/…`, …). Each expected file — +including sidecars — classifies as: + +| State | Meaning | +| --- | --- | +| `SYNCED` | On-disk bytes match the expected render. | +| `DRIFTED` | The file exists but its bytes differ — the harness side was edited. | +| `MISSING` | The expected file isn't on disk yet. | +| `CONFLICT` | The path has the wrong shape — a directory, broken symlink, or unreadable target. | + +## Inspecting drift + +```bash +adept status # one-line drift summary per harness; exits 2 if anything is out of sync +adept diff # exactly which files are drifted / missing / conflicting +adept diff --harness cursor +``` + +`adept diff` output groups per harness: + +``` +HARNESS SYNCED DRIFTED MISSING CONFLICT +claude-code 3 1 0 0 + +[claude-code] + drift .claude/skills/pr-review/SKILL.md +``` + +## Resolving harness drift + +- **Canonical is right → publish:** `adept sync` (add `--force` to overwrite drifted harness + files, `--dry-run` to preview). +- **Harness edit is right → adopt:** `adept sync-from` (interactive), or `--all` for + non-interactive adoption from every harness, `--force` to overwrite canonical, `--dry-run` + to preview. +- **Conflict:** review with `adept diff`, then decide which side wins and run the + corresponding command with `--force`. + +## Enforcing it in git + +Install a pre-commit hook that blocks commits when there's drift — see the +[Git drift hook guide](/docs/guides/git-hook/). In CI, run `adept status` and branch on its +exit code (`2` = drift/dirty). + +--- + +# Authoring a skill + +URL: https://adeptability.itaywol.tools/docs/guides/authoring/ +Description: Write a canonical skill that renders well across every harness. + +This guide covers writing a canonical skill that renders well across every harness. + +## Scaffold + +```bash +adept skill add pr-review --edit +``` + +`add` creates `.adeptability/skills/pr-review/SKILL.md` and `--edit` opens it in `$EDITOR`. +To bring in an existing directory instead of a blank scaffold: + +```bash +adept skill add pr-review --from ./legacy/pr-review +``` + +## Write the frontmatter + +```markdown +--- +id: pr-review +description: Use before opening a PR. Checks tests, security, and performance. +activation: agent +allowed-tools: [Read, Grep] +tags: [review, quality] +--- +``` + +Guidelines that pay off across harnesses: + +- **Write a strong `description`.** Agent-mode harnesses (Claude Code, Cursor "Agent + Requested") activate a skill by matching the current task against its `description`. Make it + a crisp *"Use when…"* sentence. A vague description means the skill never fires. +- **Pick the right `activation`:** + - `always` — foundational rules you always want in context. + - `globs` — language- or path-specific rules (set `globs: ["**/*.ts"]`). + - `agent` — the agent decides; the common default. + - `manual` — only when explicitly invoked. +- **Keep it lean.** Codex aggregates all skills into a single `AGENTS.md` with a **32 KiB + cap**; oversized skills get dropped lowest-priority-first. Split large skills. +- **Use `allowed-tools`** to scope what Claude Code may do with the skill. + +## Add sidecars (optional) + +``` +.adeptability/skills/pr-review/ +├── SKILL.md +├── scripts/check-secrets.sh +└── references/security-checklist.md +``` + +Claude Code and OpenCode preserve the full sidecar tree. Single-file / aggregate harnesses +(Cursor, Codex, Copilot) drop sidecars and record a warning — keep the essential guidance in +the body itself. + +## Render and verify + +```bash +adept harness add claude-code +adept harness add cursor +adept sync +adept diff # confirm clean +``` + +Inspect the rendered output to confirm the frontmatter translated correctly: + +```bash +cat .claude/skills/pr-review/SKILL.md +cat .cursor/rules/pr-review.mdc +``` + +The [Harness Comparison](/docs/harness-comparison/) shows the exact translation per activation +mode. + +## Iterate safely + +If you tweak the skill inside a harness file while testing, don't lose it — pull it back: + +```bash +adept sync-from # adopt the harness edit into canonical +adept sync # re-publish everywhere +``` + +## Round-trip check + +A good skill round-trips cleanly: `sync` then `sync-from` should produce no changes. Run +`adept diff` after each to confirm the canonical ⇄ harness translation is stable. + +--- + +# Installing skills from skills.sh and GitHub + +URL: https://adeptability.itaywol.tools/docs/guides/installing-skills/ +Description: Search skills.sh, install a skill into your project canonical, and keep external skills SHA-locked and updatable. + +`adept skill install` pulls a published skill from GitHub (indexed by +[skills.sh](https://skills.sh)) straight into your project canonical, then locks it to an exact +commit so it never changes under you. Every install is gated by a safety scan first. + +## Find a skill + +```bash +adept skill search "postgres migration" +adept skill search react --limit 5 # default limit is 20 +``` + +Search queries the skills.sh index and prints matching skills with the slug you pass to +`install`. + +## Inspect before installing + +```bash +adept skill info owner/repo/skill-name +``` + +`info` fetches repo metadata without touching your project. It reports the repository, license, +star count, install count (from skills.sh), and the current resolved commit SHA. Add `--json` +for a machine-readable record. + +## Install + +```bash +adept skill install owner/repo/skill-name +``` + +The slug is `/[#ref]/`. The optional `#ref` pins a branch, tag, or commit; +without it, the repository's default branch is resolved. Install then: + +1. Resolves the ref to an immutable commit SHA and downloads that exact tarball. +2. Extracts the target skill directory and parses its `SKILL.md`. +3. Runs the safety scan (see below). +4. Shows an install preview: slug, repo URL, SHA, path, license, stars, installs, the file + list, and any scan findings. +5. Prompts `proceed with install? [y/N]`, then writes the skill into the project canonical, + snapshots a base for drift detection, and records a lock entry. + +Skip the confirmation with `--yes`: + +```bash +adept skill install owner/repo/skill-name --yes +``` + +:::note[Reinstalling and name clashes] +Re-installing a locked skill overwrites it. If a skill directory with the same id already +exists in the canonical but has no lock entry (a manual copy), install refuses and asks you to +remove or rename it first. +::: + +## How external skills are SHA-locked + +Installing records a lock entry for the skill: the source slug, the resolved commit SHA, the +matched skill path, and a content hash of the extracted files. Because the ref is resolved to a +specific commit at install time, the on-disk skill is pinned to immutable content, not to a +moving branch. The base snapshot taken at install is what [drift detection](/docs/concepts/drift/) +compares against, so later edits (yours or a re-render) are visible as drift. + +## Update locked skills + +```bash +adept skill update # re-resolve every locked external skill +adept skill update skill-name # just one +``` + +`update` re-resolves each locked skill's ref against upstream. If the SHA is unchanged it +prints `up to date`; otherwise it prints `old -> new`, re-downloads the new tarball, rewrites +the skill and its base snapshot, and bumps the SHA and content hash in the lock. The lock is +saved after each skill so a mid-run failure never leaves an entry pointing at stale content. + +## How the safety scan gates installs + +Every install runs a structured static scan over `SKILL.md` plus tighter script-only rules over +any sidecar files, optionally followed by an LLM intent pass when a provider is configured. If +the worst finding meets or exceeds the blocking severity, the install aborts: + +``` +install aborted by safety scan; review findings and pass --allow-unsafe to override +``` + +The blocking severity is `scan.blockSeverity` (default `critical`); tighten it to `high` or +`medium` per project. Whether the scan runs at all is `scan.onInstall` (defaults on once an LLM +provider is set). Override a blocked install with `--allow-unsafe` only after reviewing the +findings. See [Safety scans and LLM config](/docs/guides/safety-scans/) for the full model, and +the [configuration reference](/docs/reference/configuration/) for the keys. + +:::caution[--json installs are non-interactive] +In `--json` mode there is no confirmation prompt, so `--yes` is required. A scan block still +aborts unless you also pass `--allow-unsafe`. +::: + +## Scan any skill without installing + +`adept skill check` runs the same scanner against a target you name three ways: + +```bash +adept skill check my-skill # a project canonical skill, by id +adept skill check library:default:my-skill # library:: +adept skill check owner/repo/skill-name # a remote skill, fetched not installed +``` + +Flags: `--format table|markdown|json` (default `table`), `--llm` to force the LLM intent pass +(errors when no provider is configured), and `--no-llm` to skip it even when one is. High and +critical findings exit non-zero, so `skill check` works as a CI gate. + +--- + +# Sharing a library across a team + +URL: https://adeptability.itaywol.tools/docs/guides/sharing-a-library/ +Description: Author skills once, publish them as a library, and let every project and teammate consume them. + +Author skills once, publish them as a library, and let every project and teammate consume them +by reference. Read [Libraries](/docs/concepts/libraries/) first for the package-manager model. + +## 1. Create the library repo + +Initialize a repo in **library layout** so its skills sit at `/skills/`, directly +consumable: + +```bash +mkdir team-skills && cd team-skills +git init +adept init --as-library +``` + +Add published skills: + +```bash +adept skill add house-style --publish --edit +adept skill add pr-review --publish --edit +``` + +Commit and push: + +```bash +git add . && git commit -m "feat: initial team skills" +git remote add origin git@github.com:acme/skills.git +git push -u origin main +``` + +## 2. Consume it in a project + +In any project that should use these skills: + +```bash +cd ../webapp +adept library add team-skills --from git@github.com:acme/skills.git --ref main +adept harness add claude-code +adept sync +``` + +`adept` clones the library into the project-local libs dir +(`.adeptability/libs/team-skills/`, auto-gitignored) and records a **reference** — not the +bytes — in `.adeptability/config.json`. Commit that config: + +```bash +git add .adeptability/config.json && git commit -m "chore: add team-skills library" +``` + +## 3. Teammates onboard automatically + +A teammate cloning `webapp` gets the reference but not the skill content (it was never +committed). They resolve it into their own project-local `.adeptability/libs/` and materialize: + +```bash +git clone git@github.com:acme/webapp.git && cd webapp +adept status # shows the library as "no (run `adept library add`…)" +adept library add team-skills --from git@github.com:acme/skills.git +adept sync # materialize into their harnesses +``` + +See [Libraries → Teammate onboarding flow](/docs/concepts/libraries/#teammate-onboarding-flow) +for the full picture. + +## 4. Ship updates + +When you push new skills to the library repo, consumers pull them on demand: + +```bash +adept status --fetch # refresh remote tracking refs, show what's updatable +adept library update # fetch + apply (prompts first) +adept library update --yes # non-interactive +adept sync # re-materialize into harnesses +``` + +## Precedence rules + +- **Project canonical shadows the library** — a project skill with the same id wins, so a + project can override a shared skill locally. +- **First-wins across libraries** — stack multiple `library add` calls; on an id collision the + first-added library wins. +- Confirm the resolved set anytime with `adept skill list`. + +--- + +# Importing existing rules + +URL: https://adeptability.itaywol.tools/docs/guides/importing/ +Description: Already have .cursor/rules, .claude/skills, an AGENTS.md, or GitHub instructions? Import them into adept. + +Already have `.cursor/rules`, `.claude/skills`, an `AGENTS.md`, or `.github/instructions`? +`adept` adopts them into the canonical layout so you can manage them from one place. + +## Automatic adoption on `init` + +The simplest path. In a project that already has harness files, just: + +```bash +adept init +``` + +`init` scans for pre-existing harness trees — `.claude/`, `.cursor/`, `.opencode/`, +`AGENTS.md`, `.github/instructions/` — parses them back into canonical skills under +`.adeptability/skills/`, and records the matching harness ids in `config.json`. + +Verify what got adopted and confirm the round-trip is clean: + +```bash +adept status # shows adopted harnesses + skill counts +adept diff # should be clean if adoption round-tripped correctly +``` + +## Adopting later with `sync-from` + +If you add harness files *after* init (or edit them directly), pull them into canonical with +`sync-from`: + +```bash +adept sync-from # interactive: adopt harness-side edits +adept sync-from --harness cursor # limit to one harness +adept sync-from --all # non-interactive: adopt from every harness (strategy=first) +adept sync-from --dry-run # preview what would be imported, write nothing +adept sync-from --force # overwrite existing canonical content +``` + +Then publish the canonical version back out everywhere: + +```bash +adept sync +``` + +## How each format maps back + +Adoption is the inverse of rendering: + +- **Claude Code / OpenCode** (`.claude/skills//`, `.opencode/skill//`) — per-skill + directories map straight to canonical skills, sidecars included. +- **Cursor** (`.cursor/rules/.mdc`) — the `mdc` frontmatter (`description`, `alwaysApply`, + `globs`) is translated back to canonical `activation` + `description`. +- **Codex** (`AGENTS.md`) — the aggregated file is split back into its constituent skills by + the `adeptability:begin/end` markers. +- **Copilot** (`.github/instructions/*.instructions.md`) — per-glob buckets are de-aggregated. + +For **config-driven adapters**, `sync-from` auto-derives the reverse of the adapter's +`frontmatter.rename`. Non-bijective renames need an explicit `import.rename` block — see +[Harnesses & adapters](/docs/concepts/harnesses/#config-driven-adapters-no-recompile). + +## After importing + +Once adopted, `.adeptability/skills/` is your source of truth. Edit there and `adept sync`, +rather than editing the harness files directly. + +--- + +# Vendoring a library in-repo + +URL: https://adeptability.itaywol.tools/docs/guides/vendoring/ +Description: Vendor a consumed library directly in your repo instead of cloning it on demand. + +By default a consumed library clones into `/.adeptability/libs//`, which is +auto-gitignored. Sometimes you instead want that clone committed — for air-gapped builds, +hermetic CI, or so a fresh clone of your repo works with zero network access. + +## Commit the clone + +Delete the `libs/` (and, if you also want staging committed, `staging/`) line from +`.adeptability/.gitignore` and commit the clone directory itself: + +```bash +# Remove the auto-added "libs/" line from .adeptability/.gitignore, then: +git add .adeptability/.gitignore .adeptability/libs && git commit -m "chore: vendor team-skills library" +``` + +Trade-off: the repo now carries the full skill content instead of just the `{name, remote, +ref}` pointer, and updates land as a normal commit (`adept library update` still works — it +edits the clone in place) instead of a re-clone on every machine. + +:::note[The ignore line comes back] +`adept library add` and `adept migrate` both re-append `libs/` to +`.adeptability/.gitignore` if it's missing (`adept library update` does not). Already-tracked +files stay tracked, but any *new* file added to the vendored clone afterward is now ignored +and silently skipped by a plain `git add`. Re-remove the line (or use `git add -f`) when +committing new vendored content. +::: + +## CI-hermetic use of `ADEPT_LIBRARY` + +Point `ADEPT_LIBRARY` at an in-repo path if you additionally want the *machine store* itself +(rather than just the project's `libs/`) to stay inside the checkout — e.g. when a global-scope +library also needs to resolve without touching `~/.adeptability`: + +```yaml +# .github/workflows/ci.yml (excerpt) +env: + ADEPT_LIBRARY: ${{ github.workspace }}/.adept-lib +steps: + - uses: actions/checkout@v4 + - run: adept status # exits 2 on drift + - run: adept sync --dry-run +``` + +:::tip[Materialization mode] +When vendoring for CI, consider `copy` mode +(`adept config set mode copy`) if your build tools don't follow symlinks. +::: + +--- + +# Git drift hook + +URL: https://adeptability.itaywol.tools/docs/guides/git-hook/ +Description: Install a git pre-commit hook that keeps committed harness files honest. + +Keep committed harness files honest by installing a git **pre-commit** hook that runs the +[drift gate](/docs/concepts/drift/) on every commit. + +## Install + +```bash +adept hook install # fail mode (default) +adept hook install --mode fix # auto-fix mode +``` + +This writes `.git/hooks/pre-commit`. The installed hook is a thin stub that execs +`adept hook run` — all the logic stays in the CLI. + +You can also install it at `init` time: + +```bash +adept init --git-hook # bare flag == fail mode +adept init --git-hook=fix +``` + +## Modes + +| Mode | Behavior on drift | +| --- | --- | +| `fail` (default) | The commit is **blocked**; you fix drift and re-commit. | +| `fix` | `adept` auto-adopts / re-renders the drift and **re-stages** the files, then the commit proceeds. | + +Under the hood, `fix` mode runs `adept hook run --fix`. + +## Safety + +- `adept` only overwrites a pre-commit hook it wrote itself (marked with an internal + `adept-managed` marker). It **refuses to clobber a hand-written hook** — remove it or install + manually if you already have one. +- The hook assumes a standard `.git/` directory. In a worktree or submodule (where `.git` is a + file pointing elsewhere), install the hook manually. +- The installed hook calls `adept` from `$PATH` — that's the install-time contract, so make + sure `adept` is on the `PATH` of whoever commits. + +## Running the gate manually / in CI + +The same gate the hook invokes: + +```bash +adept hook run # fail on drift +adept hook run --fix # auto-adopt/re-render and re-stage +``` + +For CI, prefer `adept status`, which exits `2` when anything is out of sync: + +```bash +adept status || echo "drift detected" +``` + +--- + +# Composing loops + +URL: https://adeptability.itaywol.tools/docs/guides/loops/ +Description: A loop is a system that prompts your agents on a schedule so you don't have to. + +A loop is a system that prompts your agents so you don't have to: on a schedule it +**discovers** work worth doing, **hands it off** to an agent, **verifies** the result with +an independent check, **persists** state to disk, and **reschedules** itself. Drop any of +the five moves and the loop fails a predictable way — the most common being a loop with no +real verifier, approving its own output at machine speed. + +adept owns two of the loop's six parts as canonical, synced resources: + +| Part | Realizes | adept | +| --- | --- | --- | +| **Skill** | Discovery — the automation triggers a *named skill*, not a wall of prompt in a cron job | `adept skill add --template triage` | +| **Sub-agents** | Verification — a generator writes, a separate skeptical evaluator judges | `adept agent add --template evaluator` | +| Automations | Scheduling | harness (`/loop`, Codex Automations) or CI cron | +| Worktrees | Handoff isolation | git / harness flags | +| Connectors | Reach beyond the filesystem | MCP, configured in the harness | +| Memory | Persistence across rounds | a committed `./state/.md` | + +## One command + +```bash +adept loop add ci-triage --workflow +adept agent check ci-triage-reviewer # lint the evaluator +adept sync # render skill + agent everywhere +``` + +This scaffolds: + +- **`skills/ci-triage/SKILL.md`** — the discovery skill, structured Read → Judge → Write → + Hand off → **Stop**. The Stop section is the boundary you keep for yourself ("Never merge. + Never delete. Uncertain work goes to `./inbox/`, not into a PR") — it is the one part of a + loop the system cannot infer. `activation: manual` keeps it from auto-firing outside the + automation. +- **`agents/ci-triage-reviewer.md`** — the evaluator: assumes the work is broken until + proven otherwise, verifies by *acting* (runs the tests, pastes real output), returns + PASS/REJECT. Tuning a standalone skeptic is far more tractable than making a generator + critical of its own work. +- **`.github/workflows/adept-loop-ci-triage.yml`** (with `--workflow`) — a cloud cron + skeleton. Cloud scheduling runs with your machine off at a coarser interval; local + schedulers (Claude Code `/loop`, Codex Automations) buy frequency and local-file access at + the cost of keeping the machine on. Mature loops often use both. + +## The checklist the scaffold prints + +The first two elements decide whether the loop can run; the last four decide whether it gets +into trouble once it does: + +1. **Discovery source** — what does it read on a timer? (edit the skill's Read/Judge sections) +2. **Evaluator** — an independent check that can say "no" +3. **State file** — `./state/.md`, committed; the agent forgets, the repo does not +4. **Isolation** — one git worktree per parallel task +5. **Token cap** — per-run and daily budgets set *before* the first unattended run +6. **Human review** — PRs open, never auto-merge; the pause is permanent, not scaffolding + +Four costs accrue silently in a running loop — verification debt, comprehension rot, +cognitive surrender, token blowout — and they reinforce each other. The guard for all four +is the same: keep a check inside the loop that can say "no", and stay the kind of engineer +who reads a sample of the loop's output every day. + +Start small: one finding handled end-to-end, checks proven against real mistakes, then widen. + +--- + +# Safety scans & LLM config + +URL: https://adeptability.itaywol.tools/docs/guides/safety-scans/ +Description: Scan skills for unsafe instructions before running them, and configure the LLM used for scans. + +Installing a skill from the internet means running someone else's instructions inside your +agent. `adept` scans skills for safety issues before they land, with an optional LLM intent +pass on top of the static checks. + +## The scanner + +`adept skill install` runs a safety scan first. It mirrors the +[getsentry/skill-scanner](https://github.com/getsentry/skills) categories — prompt-injection, +malicious-code, secret-exposure, supply-chain, and more. + +**Critical findings hard-block the install** unless you explicitly override: + +```bash +adept skill install vercel-labs/skills/find-skills +adept skill install vercel-labs/skills/find-skills --allow-unsafe # install despite findings +adept skill install vercel-labs/skills/find-skills --yes # skip the preview confirmation +``` + +## Scan any target without installing + +```bash +adept skill check +``` + +`` can be: + +- `` — a skill in the project canonical (`.adeptability/skills//`) +- `library::` — a specific skill in a configured library +- `//` — a remote skill on skills.sh / GitHub + +Flags: + +```bash +adept skill check --format markdown # table (default) | markdown | json +adept skill check --llm # force the LLM intent pass (errors if no provider) +adept skill check --no-llm # skip the LLM pass even when a provider is configured +``` + +## Adding an LLM intent pass + +Static checks catch known patterns; an LLM pass reasons about *intent*. Configure a provider — +API keys are **read from the environment at call time and never stored** in `config.json`: + +```bash +export ANTHROPIC_API_KEY=sk-... +adept config llm set anthropic +adept config llm test # health-ping the provider +adept skill check # now runs static + LLM, merged +``` + +Supported providers: `anthropic` and `ollama`. Override the model or endpoint (e.g. a +self-hosted Ollama): + +```bash +adept config llm set anthropic --model claude-3-5-sonnet-latest +adept config llm set ollama --endpoint http://localhost:11434 +adept config llm unset # forget the provider +``` + +## Tuning scan behavior + +Two config keys control the scan (see the [Command reference](/docs/reference/commands/#config)): + +```bash +adept config set scan.onInstall true # run the scan + LLM pass before every install +adept config set scan.blockSeverity high # lowest severity that aborts an install +``` + +`scan.onInstall` defaults to **on when an LLM provider is configured**. `scan.blockSeverity` +sets the threshold at which findings abort the install — one of `critical` (default), `high`, or `medium`. + +## Provenance + +Every install **pins upstream provenance** — repo, ref, resolved SHA, and content hash — so a +skill is reproducible and you can audit exactly where it came from. Bump locked external skills +to their latest upstream with: + +```bash +adept skill update # all locked external skills +adept skill update find-skills +``` + +--- + +# Scripting and CI with --json + +URL: https://adeptability.itaywol.tools/docs/guides/automation-json/ +Description: Use the global --json flag, jq pipelines, and drift exit codes to gate CI on skill sync state. + +Every `adept` command takes a global `--json` flag that swaps human tables for machine-readable +JSON. Combine it with exit codes and `jq` to script adept in CI. + +## The --json flag + +```bash +adept status --json +adept diff --json +adept skill list --json +adept harness list --json +adept config list --json +``` + +`--json` is global, so it sits before or after the subcommand. Read and list commands produce +the most useful payloads: + +- `status --json` is a single object: `initialized`, `projectRoot`, `mode`, `skillsCanonical`, + `driftedHarnesses`, `updatableLibraries`, and more. +- `diff --json` is an array, one entry per harness: `{ harness, synced, drifted, missing, conflict }`. + It is `null` when nothing is enabled. +- `skill list`, `agent list`, `harness list`, and `library list` return arrays of objects. +- `config list` returns `{ key, value, allowed, help }` objects. + +## jq pipelines + +```bash +# Is anything drifted right now? +adept status --json | jq '.driftedHarnesses' + +# Which harnesses are enabled? +adept harness list --json | jq -r '.[] | select(.enabled) | .id' + +# List every drifted file across all harnesses. +adept diff --json | jq -r '.[] | .drifted[]?' + +# Read one config value. +adept config list --json | jq -r '.[] | select(.key=="mode") | .value' + +# Just the project skill ids. +adept skill list --json | jq -r '.[] | select(.source=="project") | .id' +``` + +## Exit codes for CI gating + +`status` and `diff` report drift through their exit code, so a CI job can fail the build when +harness outputs are stale: + +| Code | Meaning | +| --- | --- | +| `0` | Clean: no drift. | +| `2` | Drift detected (`status` out of sync, `diff` found differences). | +| `1` | Any other error (bad flags, unreadable project, and so on). | + +```yaml +# CI: fail if canonical skills and harness outputs disagree. +- run: adept diff +``` + +`adept diff` exits `2` when any harness has drifted, writing nothing. That is the drift gate: +non-zero fails the step. `adept sync` (or the fix-mode hook below) is how you resolve it. + +:::tip[Pair the gate with --json for reporting] +`adept diff` sets the exit code; `adept diff --json` gives you the detail to log. Run the plain +form to gate and the JSON form to annotate, or read `$?` after the JSON call. +::: + +## The pre-commit hook in CI + +`adept hook install` writes `.git/hooks/pre-commit`: + +```bash +adept hook install # fail mode (default) +adept hook install --mode fix # adopt harness edits, re-render, re-stage +``` + +In `fail` mode a drifted commit is blocked with a suggested fix. In `fix` mode the hook adopts +harness-side edits back into canonical, re-renders, and re-stages so the commit proceeds. For CI +that cannot install git hooks, run `adept diff` directly as the gate instead. See the +[git drift hook guide](/docs/guides/git-hook/) for the full workflow. + +## Running outside the repo + +Two more global flags matter for scripts: + +- `--project `: point adept at a project root other than the current directory, so a CI + job can run from anywhere. +- `--log-level debug|info|warn|error` (default `info`): raise to `debug` to trace resolution, or + drop to `error` to keep logs out of captured output. Logs go to stderr; `--json` payloads go + to stdout, so redirection stays clean. + +```bash +adept status --json --project /src/app --log-level error | jq '.driftedHarnesses' +``` + +--- + +# Command reference + +URL: https://adeptability.itaywol.tools/docs/reference/commands/ +Description: Every adept command and flag, generated faithfully from the cobra definitions. + +Every command and flag, generated faithfully from the cobra definitions. `adept --help` +is always the authoritative, version-matched source — this page mirrors it. + +The surface is **five top-level verbs** (`init`, `status`, `sync`, `sync-from`, `diff`) plus +subcommand groups (`harness`, `skill`, `library`, `config`, `hook`, `exchange`). + +## Global flags + +Available on every command: + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--json` | `false` | Emit machine-readable JSON output | +| `--log-level ` | `info` | `debug` \| `info` \| `warn` \| `error` | +| `--project ` | current dir | Project root | +| `--library ` | `$ADEPT_LIBRARY` or `~/.adeptability` | Library root | + +**Environment variables:** `ADEPT_LIBRARY` (library root), `ADEPT_EXCHANGE_SERVER`, +`ADEPT_EXCHANGE_TOKEN` (exchange defaults), `ANTHROPIC_API_KEY` (LLM key, read at call time). + +**Exit codes:** `0` success · `2` drift/dirty state (`status`) or merge conflict · `1` any +other error. + +--- + +## init + +``` +adept init [flags] +``` + +Creates `.adeptability/{skills,base}/`, writes `config.json`, optionally clones a remote +library, and adopts any pre-existing harness files (`.claude/`, `.cursor/`, `.opencode/`, +`AGENTS.md`, `.github/instructions/`) it finds on disk. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--from ` | — | Remote library URL (git remote or local path) to clone | +| `--ref ` | `main` | Branch or tag in the remote library | +| `--name ` | `default` | Local name for the library added via `--from` | +| `--mode symlink\|copy` | `symlink` | Harness materialization mode | +| `--git-hook fail\|fix` | — | Install a pre-commit drift hook (bare `--git-hook` = `fail`) | +| `--no-default-skills` | `false` | Skip seeding the bundled default skills | +| `--as-library` | `false` | Initialize a publishable library (skills at `/skills/`) | + +With `--as-library`, harness adoption, mode, and the bundled default skills are skipped — see +[Layouts](/docs/concepts/layouts/). + +--- + +## status + +``` +adept status [--fetch] +``` + +Project state at a glance: init state, configured libraries (with on-disk / update status), +enabled harnesses, and a one-line drift summary. **Exits `2`** when not initialized, a library +is missing, or a harness has drifted — so scripts and CI can branch on it. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--fetch` | `false` | Fetch library remotes to detect available updates (network) | + +--- + +## sync + +``` +adept sync [flags] +``` + +Push canonical skills to every enabled harness (the primary "publish" verb). + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--harness ` | all enabled | Limit to specific harness ids (repeatable / comma-list) | +| `--force` | `false` | Overwrite drifted harness files | +| `--dry-run` | `false` | Print what would change, write nothing | + +--- + +## sync-from + +``` +adept sync-from [flags] +``` + +Reverse of `sync`: walk each enabled harness's on-disk state and adopt edits back into +canonical. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--harness ` | — | Limit to specific harness ids | +| `--all` | `false` | Non-interactive: adopt from every harness (strategy=first) | +| `--dry-run` | `false` | Report what would be imported, write nothing | +| `--force` | `false` | Overwrite existing project canonical content | + +--- + +## diff + +``` +adept diff [--harness ] +``` + +Show drift between canonical skills and harness outputs (synced / drifted / missing / +conflict, per harness). + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--harness ` | all enabled | Limit to specific harness ids | + +--- + +## harness + +Manage which harnesses are enabled in this project. + +``` +adept harness add # Enable a harness for this project +adept harness remove # Disable a harness for this project +adept harness list # List harnesses (registered + enabled state) +``` + +`add`/`remove` take exactly one harness id. Run `adept harness list` for the live registry of +valid ids (`claude-code`, `cursor`, `codex`, `copilot`, `opencode`, and 50+ generic adapters). + +--- + +## skill + +Manage canonical skills (local + skills.sh / GitHub). + +### skill add + +``` +adept skill add [flags] +``` + +Create a new project skill from scratch, or import an existing directory. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--from ` | — | Import an existing skill directory into the project | +| `--template default\|triage` | `default` | Scaffold template — `triage` is a loop-discovery skill (Read → Judge → Write → Hand off → Stop) | +| `--edit` | `false` | Open the new `SKILL.md` in `$EDITOR` after creation | +| `--publish` | `false` | In a library project, add to the published `skills/` (default: private dev-canonical) | + +### skill edit + +``` +adept skill edit +``` + +Open the project skill's `SKILL.md` in `$EDITOR`. + +### skill remove + +``` +adept skill remove +``` + +Remove a skill from the project canonical. + +### skill list + +``` +adept skill list [--project-only] +``` + +List skills resolved for this project (project canonical + libraries). + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--project-only` | `false` | Only show skills present in the project canonical | + +### skill install + +``` +adept skill install /[#ref]/ [flags] +``` + +Install a skill from skills.sh / GitHub into the project canonical. Runs a safety scan and +pins upstream provenance (repo, ref, SHA, content hash). + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--yes` | `false` | Skip the install preview confirmation | +| `--allow-unsafe` | `false` | Install even when the sandbox sniff flags suspicious content | + +### skill update + +``` +adept skill update [] +``` + +Re-resolve locked external skills against upstream and bump their SHA. Omit `` to update +all locked external skills. + +### skill info + +``` +adept skill info /[#ref]/ +``` + +Show repo, license, stars, installs, and current SHA for a skill. + +### skill search + +``` +adept skill search [--limit N] +``` + +Search skills.sh for installable skills. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--limit ` | `20` | Max results to display | + +### skill check + +``` +adept skill check [flags] +``` + +Scan a skill for safety issues without installing. `` is `project`, +`library::`, or `//`. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--format table\|markdown\|json` | `table` | Output format | +| `--llm` | `false` | Force the LLM intent pass (errors if no provider configured) | +| `--no-llm` | `false` | Skip the LLM intent pass even when a provider is configured | + +--- + +## agent + +Manage canonical agents (subagents). Agents are single files at +`.adeptability/agents/.md`; `adept sync` renders them into every enabled harness that +supports agent definitions (`.claude/agents/`, `.opencode/agents/`, `.cursor/agents/`, +`.github/agents/*.agent.md`, `.codex/agents/*.toml`), and `adept sync-from` adopts +harness-side agent edits back. Harnesses without an agent concept skip them with a warning. + +### agent add + +``` +adept agent add [flags] +``` + +Create a new project agent from a best-practice template, or import an existing file. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--from ` | — | Import an existing agent `.md` file into the project | +| `--template default\|evaluator` | `default` | Scaffold template — `evaluator` encodes the adversarial maker–checker reviewer pattern | +| `--edit` | `false` | Open the new agent file in `$EDITOR` after creation | + +### agent edit + +``` +adept agent edit +``` + +Open the project agent's file in `$EDITOR`. + +### agent remove + +``` +adept agent remove +``` + +Remove an agent from the project canonical. + +### agent list + +``` +adept agent list +``` + +List agents in the project canonical (`ID`, `MODE`, `TARGETS`, `DESCRIPTION`). + +### agent check + +``` +adept agent check [flags] +``` + +One report over three passes: the static safety scanner (same malicious-instruction rules as +`skill check`), the optional LLM intent pass, and the agent best-practice linter +(`AGENT-LINT-*`: schema, trigger-shaped description, tool hygiene, boundaries, broken file +references). High or critical findings exit `2` so CI can gate on it. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--format table\|markdown\|json` | `table` | Output format | +| `--llm` | `false` | Force the LLM intent pass (errors if no provider configured) | +| `--no-llm` | `false` | Skip the LLM intent pass even when a provider is configured | + +--- + +## loop + +Compose a loop — a scheduled system that discovers work, hands it to agents, verifies with +an independent evaluator, persists state, and reschedules. A loop is not a synced resource: +it is a composition of things adept already manages (a discovery skill + an evaluator agent) +plus a schedule that lives in CI or the harness. See the [loops guide](/docs/guides/loops/). + +### loop add + +``` +adept loop add [flags] +``` + +Scaffolds the composition in one shot: a `` discovery skill (triage template, +`activation: manual` so only the automation invokes it), a `-reviewer` evaluator agent +(adversarial template), optionally a GitHub Actions cron skeleton — then prints the +first-loop checklist (state file, isolation, token cap, human review). + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--workflow` | `false` | Also write `.github/workflows/adept-loop-.yml` (cloud cron skeleton; never overwrites) | +| `--edit` | `false` | Open the discovery skill in `$EDITOR` after creation | + +--- + +## library + +Manage the project's library remotes. See [Libraries](/docs/concepts/libraries/). + +### library add + +``` +adept library add --from [--ref ] +``` + +Clone a remote library into the project's library store and record the reference. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--from ` | — (required) | Remote URL (git remote or local path) | +| `--ref ` | `main` | Branch or tag to track | + +### library update + +``` +adept library update [name] [--yes] +``` + +Fetch newer skills from configured libraries (prompts before applying). Omit `name` to update +all. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--yes` | `false` | Apply updates without prompting | + +### library remove + +``` +adept library remove [--purge] +``` + +Drop a library reference from the project. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--purge` | `false` | Also delete the local clone directory | + +### library list + +``` +adept library list +``` + +List configured libraries. + +--- + +## config + +Read or write strict-typed project configuration. + +``` +adept config list # List configurable keys + current values +adept config get # Print one config value +adept config set # Set one config value (validated) +adept config unset # Clear one value back to default +``` + +Configurable keys: + +| Key | Allowed | Meaning | +| --- | --- | --- | +| `mode` | `symlink` \| `copy` | Harness materialization mode | +| `scan.onInstall` | `true` \| `false` | Run the safety scan + LLM pass before `skill install` (default: on when an LLM is configured) | +| `scan.blockSeverity` | `critical` \| `high` \| `medium` | Lowest scan severity that aborts an install (default: `critical`) | + +### config llm + +``` +adept config llm set [--model ] [--endpoint ] +adept config llm unset +adept config llm test +``` + +Configure the LLM provider used by safety scans. The **API key is read from the environment at +call time** and never stored in config. + +| Flag | Purpose | +| --- | --- | +| `--model ` | Override the provider's default model | +| `--endpoint ` | Override the default endpoint (e.g. self-hosted Ollama) | + +Providers: `anthropic`, `ollama`. `test` health-pings the configured provider. + +--- + +## hook + +Manage the git pre-commit drift hook. See the [Git drift hook guide](/docs/guides/git-hook/). + +``` +adept hook install [--mode fail|fix] # Install a pre-commit hook that blocks commits on drift +adept hook run [--fix] # Drift gate invoked by the installed hook +``` + +| Command / Flag | Default | Purpose | +| --- | --- | --- | +| `install --mode fail\|fix` | `fail` | Hook behavior on drift | +| `run --fix` | `false` | Auto-adopt/re-render drift and re-stage instead of failing | + +--- + +## exchange + +The team **expertise billboard** — a request/answer board. One person hosts `serve`; everyone +else registers with the bootstrap token and posts/answers requests. See +[Exchange](/docs/exchange/). A shared `--server ` flag applies to every client subcommand +(default: `$ADEPT_EXCHANGE_SERVER` or the last registered server). + +### exchange serve + +``` +adept exchange serve [flags] +``` + +Host the billboard server. Mints a bootstrap token on first run and prints it once. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--addr ` | `:4639` | Listen address | +| `--db fs\|memory` | `fs` | Storage driver | +| `--data ` | `/exchange-data` | Data directory for the `fs` driver | +| `--rotate-bootstrap` | `false` | Mint a new bootstrap token (invalidates the old one) | + +### exchange register + +``` +adept exchange register --bootstrap [--handle ] +``` + +Register a handle and store a bearer token. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--bootstrap ` | — (required) | Bootstrap token from `serve` | +| `--handle ` | current OS user | Your handle | + +### exchange submit + +``` +adept exchange submit --title [flags] +``` + +Submit a request for expertise. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--title ` | — (required) | Short request title | +| `--body ` | — | Request detail | +| `--assignee ` | — | Handle whose expertise you want (repeatable) | +| `--tag ` | — | Topic tag (repeatable) | + +### exchange list + +``` +adept exchange list [--mine] [--status ] +``` + +List billboard requests. + +| Flag | Default | Purpose | +| --- | --- | --- | +| `--mine` | `false` | Only requests you authored or are assigned to | +| `--status ` | — | Filter: `attention-required` \| `in-progress` \| `closed` | + +### exchange show / respond / close / reopen + +``` +adept exchange show # Show a request and its responses +adept exchange respond --body # Post a response (--body required) +adept exchange close # Close a request you authored +adept exchange reopen # Reopen a request you authored +``` + +### exchange token + +``` +adept exchange token rotate # Rotate your bearer token (old one stops working immediately) +``` + +### exchange status / recommendation + +``` +adept exchange status # Report local setup state (configured/registered/dismissed) +adept exchange recommendation dismiss # Stop the exchange setup recommendation (per-user) +adept exchange recommendation undismiss # Re-enable it +``` + +--- + +## completion + +``` +adept completion zsh > "${fpath[1]}/_adept" +adept completion bash > /etc/bash_completion.d/adept +adept completion fish > ~/.config/fish/completions/adept.fish +``` + +Standard cobra shell completion for bash, zsh, and fish. + +--- + +# Configuration reference + +URL: https://adeptability.itaywol.tools/docs/reference/configuration/ +Description: Every adept config key with its type, default, and effect, plus the LLM provider config and project vs global scope. + +`adept config` reads and writes project settings. Sets are strict-typed: an invalid value fails +at parse time with the allowed list, so a typo never corrupts the config file. + +```bash +adept config list # all keys, current values, allowed values +adept config get mode # print one value +adept config set mode copy # set one value (validated) +adept config unset mode # clear back to default +``` + +Add `--json` to `list` for an array of `{key, value, allowed, help}` objects. + +## Keys + +Only the typed scalar keys below (plus the grouped `llm.*` fields) are exposed through +`config get/set`. Harness enablement lives under [`adept harness`](/docs/reference/commands/#harness) +and library remotes under [`adept library`](/docs/reference/commands/#library); they are stored +in the same file but managed by their own commands. + +| Key | Type | Default | Effect | +| --- | --- | --- | --- | +| `mode` | `symlink` \| `copy` | `symlink` | How canonical skills materialize into each harness: a symlink back to the canonical file, or a copied file. See [Layouts](/docs/concepts/layouts/). | +| `scan.onInstall` | `true` \| `false` | on when an LLM provider is configured | Run the safety scan and LLM intent pass before `skill install`. | +| `scan.blockSeverity` | `critical` \| `high` \| `medium` | `critical` | Lowest scan severity that aborts an install. | + +The `llm` provider is grouped. `config list` surfaces its three fields for a complete view, but +you set them through the `config llm` subcommand, not `config set`: + +| Key | Effect | +| --- | --- | +| `llm.provider` | Current provider name (`anthropic` or `ollama`), or `(unset)`. | +| `llm.model` | Model override; provider default when unset. | +| `llm.endpoint` | Endpoint override, for example a self-hosted Ollama. | + +## LLM provider config + +Safety scans can add an LLM intent pass on top of the static rules. `config llm` records which +provider to use. API keys are never stored in the config: they are read from the environment at +call time. + +```bash +export ANTHROPIC_API_KEY=sk-... +adept config llm set anthropic # provider: anthropic | ollama +adept config llm test # health-ping the configured provider +adept config llm unset # forget the provider + +# override the model or endpoint +adept config llm set anthropic --model claude-3-5-sonnet-latest +adept config llm set ollama --endpoint http://localhost:11434 +``` + +Supported providers are `anthropic` and `ollama`. Setting a provider flips `scan.onInstall` on +by default. See [Safety scans and LLM config](/docs/guides/safety-scans/) for how the pass is +used. + +## Scope: project vs global + +By default `config` operates on the current project. Pass `--global` to read or write the +home-level scope instead (the harness config adept applies outside any project): + +```bash +adept config list --global +adept config set mode copy --global +``` + +See [Scopes](/docs/concepts/scopes/) for when each applies. + +## Where config lives on disk + +Project config is a single JSON file at: + +``` +/.adeptability/config.json +``` + +It holds the typed keys above alongside harness state, materialization mode, and adapters. +Writes are atomic. Prefer the `config` commands over hand-editing so values stay validated. + +--- + +# Harness comparison + +URL: https://adeptability.itaywol.tools/docs/harness-comparison/ +Description: How a single canonical skill produces correct output for every supported harness. + +A single canonical skill produces correct output for every harness — proper frontmatter +schema, proper activation, proper aggregation, proper size budgets. This page shows what gets +written and why. + +## Canonical input + +```yaml +# skill.yaml +id: pr-review +description: Apply before opening a PR. Tests, security, performance. +activation: agent +allowed-tools: [Read, Grep] +``` + +```markdown +# SKILL.md +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff +``` + +## Rendered output per harness + +#### Claude Code + +`.claude/skills/pr-review/SKILL.md` + +```markdown +--- +name: pr-review +description: Apply before opening a PR. Tests, security, performance. +allowed-tools: [Read, Grep] +--- + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff +``` + +**Why correct:** Claude Code's progressive disclosure relies on `name` + `description` for +activation; `allowed-tools` enforces the security boundary. + +#### Cursor + +`.cursor/rules/pr-review.mdc` + +```markdown +--- +description: Apply before opening a PR. Tests, security, performance. +--- + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff +``` + +**Why correct:** Cursor's "Agent Requested" mode activates rules whose `description` +matches the current task — description-only frontmatter, no `alwaysApply`. (`always` +skills get `alwaysApply: true`; `globs` skills get `globs:` + `alwaysApply: false`.) +Verbatim Claude frontmatter would leave `description` valid but add unrecognized +`name`/`allowed-tools` keys. + +#### OpenCode + +`.opencode/skill/pr-review/SKILL.md` + +```markdown +# pr-review + +Apply before opening a PR. Tests, security, performance. + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff +``` + +**Why correct:** OpenCode doesn't require frontmatter and prefers narrative markdown. + +#### Codex + +`AGENTS.md` (aggregated) + +```markdown + +## Apply before opening a PR. Tests, security, performance. + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff + +``` + +When multiple skills are enabled, they are packed by priority descending then byte size +ascending, emitted in skill-id order. If the total exceeds **32 KiB** (Codex's +`project_doc_max_bytes`), the lowest-priority skills drop and a truncation manifest appears +at the top: + +```markdown + +``` + +**Why correct:** Codex has *no per-skill concept*. It reads one or more `AGENTS.md` files +walking up from cwd. Naive copy-as-`SKILL.md` is invisible to Codex; the 32 KiB cap means +quiet truncation if you don't manage it. + +#### GitHub Copilot + +Copilot has no agent-requested mode, so this `activation: agent` skill is **skipped** +(see the activation table below). A skill with `activation: always` renders into +`.github/instructions/always.instructions.md`: + +```markdown +--- +applyTo: "**" +--- + + +## Apply before opening a PR. Tests, security, performance. + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff + +``` + +Skills with `activation: globs` bucket into a per-glob file like +`.github/instructions/bucket-a63d8819677675ea.instructions.md` with +`applyTo: "**/*.ts,**/*.tsx"`. + +**Why correct:** Copilot uses `applyTo` glob match to decide when to inject the +instructions. Without it, the file is loaded for the wrong files or ignored entirely. + +## Activation translation table + +| Canonical activation | Claude | Cursor | OpenCode | Codex | Copilot | +| --- | --- | --- | --- | --- | --- | +| `always` | description-only | `alwaysApply: true` | `# id` + desc + body | aggregated body | `applyTo: "**"` | +| `globs: [...]` | desc + glob hint | `globs:` + `alwaysApply:false` | `# id` + desc + body | aggregated body | bucketed by globs | +| `agent` | description-only | description-only | `# id` + desc + body | aggregated body | *skipped* (no agent mode) | +| `manual` | `disable-model-invocation:true` | desc + `@id` hint | `# id` + desc + body | aggregated body | *skipped* | + +## Sidecars + +Skills can bundle `scripts/`, `references/`, `assets/`. Where supported: + +- **Claude Code:** full sidecar tree preserved. +- **OpenCode:** full sidecar tree preserved. +- **Cursor:** dropped (single-file); a warning is reported on `sync`. +- **Codex:** dropped (aggregator file model); a warning is reported on `sync`. +- **Copilot:** dropped (aggregator file model); a warning is reported on `sync`. + +## Beyond the specialized five + +Everything above describes the five **specialized renderers**. 50+ more agents (Windsurf, +Gemini CLI, Cline, Continue, Roo, Goose, Junie, …) render through generic per-skill adapters +that write `SKILL.md` into that agent's convention. Run `adept harness list` for the live +registry, or add your own with a [config-driven adapter](/docs/concepts/harnesses/#config-driven-adapters-no-recompile). + +## Why this matters + +Prior art treated multi-harness sync as a path-multiplexing problem (write one file into N +paths). That breaks activation in Cursor and Copilot, produces nothing usable in Codex, and +silently loses size budget. `adept` makes content fidelity to each harness's actual loader the +headline guarantee — and proves it with golden files any contributor can inspect. + +--- + +# Exchange — the team expertise billboard + +URL: https://adeptability.itaywol.tools/docs/exchange/ +Description: The exchange is a lightweight request/answer board for sharing expertise across a team. + +The **exchange** is a lightweight request/answer board for a team. Someone hosts a server; +everyone else registers and posts or answers requests for expertise. The server is passive +storage plus auth — it never runs an agent. Agents participate by calling the commands with +`--json`. + +It pairs with the bundled `expertise-exchange` skill, which prompts (once) to set up an +exchange and can post/answer on your behalf. + +## Topology + +``` + ┌─────────────────────┐ + │ adept exchange serve│ one host, passive storage + auth + └──────────┬──────────┘ + │ bootstrap token + ┌───────────────┼───────────────┐ + ▼ ▼ ▼ +register register register (each teammate) +submit / respond / list / show / close / reopen +``` + +## Host the server + +```bash +adept exchange serve +``` + +On first run it mints a **bootstrap token** and prints it once — teammates need it to +register. Defaults: listens on `:4639`, `fs` storage driver, data under +`/exchange-data`. + +```bash +adept exchange serve --addr :8080 --db fs --data ./exchange-data +adept exchange serve --rotate-bootstrap # mint a fresh bootstrap token +``` + +:::caution[TLS] +`serve` speaks plain HTTP. Run it on a trusted network, and terminate TLS at a reverse +proxy when exposing it beyond the LAN. +::: + +## Register + +```bash +adept exchange register --bootstrap --handle alice +``` + +Stores a bearer token locally (under the library's `exchange/` dir, one file per server host, +mode `0600`). `--handle` defaults to your OS username. + +The server URL resolves from `--server`, then `$ADEPT_EXCHANGE_SERVER`, then the last +registered server. + +## Post and answer requests + +```bash +adept exchange submit --title "How do we rotate DB creds?" \ + --body "Staging vs prod differ; where's the runbook?" \ + --assignee bob --tag ops + +adept exchange list # all requests +adept exchange list --mine # yours (authored or assigned) +adept exchange list --status attention-required +adept exchange show 42 # a request and its responses +adept exchange respond 42 --body "Runbook: infra/docs/creds.md; prod needs the vault role." +adept exchange close 42 # author closes it +adept exchange reopen 42 +``` + +## Manage your token + +```bash +adept exchange token rotate # old token stops working immediately +``` + +## Setup recommendation + +The `expertise-exchange` skill checks local setup state and may prompt you to configure an +exchange. Control that prompt: + +```bash +adept exchange status # configured / registered / dismissed +adept exchange recommendation dismiss # stop the prompt (per-user) +adept exchange recommendation undismiss # bring it back +``` + +## Environment overrides + +| Variable | Purpose | +| --- | --- | +| `ADEPT_EXCHANGE_SERVER` | Default billboard server URL | +| `ADEPT_EXCHANGE_TOKEN` | Override the on-disk bearer token | diff --git a/site/public/llms.txt b/site/public/llms.txt new file mode 100644 index 0000000..c5afd26 --- /dev/null +++ b/site/public/llms.txt @@ -0,0 +1,50 @@ +# adeptability + +> adept is an open source Go CLI (MIT licensed) that lets you author an AI coding skill or subagent once, in a single canonical format, then render it accurately into Claude Code, Cursor, GitHub Copilot, OpenAI Codex, OpenCode, and 50+ other AI coding agents. Think of it as dotfiles for your AI coding agents: one source of truth, and the correct on-disk format everywhere. A hash-based 3-way detector flags drift, and libraries let a team share a versioned set of skills by reference. + +The full text of every documentation page is available at https://adeptability.itaywol.tools/llms-full.txt + +## Overview + +- [Documentation home](https://adeptability.itaywol.tools/docs/): Write an AI coding skill once, run it in every AI coding assistant. + +## Getting started + +- [Install](https://adeptability.itaywol.tools/docs/getting-started/install/): Install adept, a single self-contained binary, via whichever channel fits your platform. +- [Quickstart](https://adeptability.itaywol.tools/docs/getting-started/quickstart/): Author a skill once and watch it materialize into every enabled harness in about a minute. +- [Your first skill](https://adeptability.itaywol.tools/docs/getting-started/first-skill/): Build your first canonical skill from scratch and render it into every harness. + +## Concepts + +- [Canonical skills](https://adeptability.itaywol.tools/docs/concepts/canonical-skills/): The canonical skill is adept's single source of truth for everything it renders. +- [Canonical agents](https://adeptability.itaywol.tools/docs/concepts/agents/): Skills make knowledge portable; agents make delegation portable across every harness. +- [Harnesses & adapters](https://adeptability.itaywol.tools/docs/concepts/harnesses/): A harness is a target AI coding agent. Learn how adept adapts skills to each one. +- [Libraries](https://adeptability.itaywol.tools/docs/concepts/libraries/): A library is a shared, versioned set of skills a team authors once and reuses everywhere. +- [Scopes](https://adeptability.itaywol.tools/docs/concepts/scopes/): A scope decides where adept reads and writes its metadata, skills, and materialized files. +- [Layouts](https://adeptability.itaywol.tools/docs/concepts/layouts/): A project's layout decides where canonical skills live on disk. +- [Drift & the 3-way model](https://adeptability.itaywol.tools/docs/concepts/drift/): adept has no lockfile: the filesystem is the source of truth. Understand the 3-way drift model. + +## Guides + +- [Authoring a skill](https://adeptability.itaywol.tools/docs/guides/authoring/): Write a canonical skill that renders well across every harness. +- [Installing skills from skills.sh and GitHub](https://adeptability.itaywol.tools/docs/guides/installing-skills/): Search skills.sh, install a skill into your project canonical, and keep external skills SHA-locked and updatable. +- [Sharing a library across a team](https://adeptability.itaywol.tools/docs/guides/sharing-a-library/): Author skills once, publish them as a library, and let every project and teammate consume them. +- [Importing existing rules](https://adeptability.itaywol.tools/docs/guides/importing/): Already have .cursor/rules, .claude/skills, an AGENTS.md, or GitHub instructions? Import them into adept. +- [Vendoring a library in-repo](https://adeptability.itaywol.tools/docs/guides/vendoring/): Vendor a consumed library directly in your repo instead of cloning it on demand. +- [Git drift hook](https://adeptability.itaywol.tools/docs/guides/git-hook/): Install a git pre-commit hook that keeps committed harness files honest. +- [Composing loops](https://adeptability.itaywol.tools/docs/guides/loops/): A loop is a system that prompts your agents on a schedule so you don't have to. +- [Safety scans & LLM config](https://adeptability.itaywol.tools/docs/guides/safety-scans/): Scan skills for unsafe instructions before running them, and configure the LLM used for scans. +- [Scripting and CI with --json](https://adeptability.itaywol.tools/docs/guides/automation-json/): Use the global --json flag, jq pipelines, and drift exit codes to gate CI on skill sync state. + +## Reference + +- [Command reference](https://adeptability.itaywol.tools/docs/reference/commands/): Every adept command and flag, generated faithfully from the cobra definitions. +- [Configuration reference](https://adeptability.itaywol.tools/docs/reference/configuration/): Every adept config key with its type, default, and effect, plus the LLM provider config and project vs global scope. +- [Harness comparison](https://adeptability.itaywol.tools/docs/harness-comparison/): How a single canonical skill produces correct output for every supported harness. +- [Exchange, the team expertise billboard](https://adeptability.itaywol.tools/docs/exchange/): The exchange is a lightweight request/answer board for sharing expertise across a team. + +## Links + +- [GitHub repository](https://github.com/itaywol/adeptability): Source code, issues, and discussion. Written in Go, MIT licensed. +- [Releases](https://github.com/itaywol/adeptability/releases): Signed binaries and the changelog for every version. +- [Landing page](https://adeptability.itaywol.tools/): Project overview, feature tour, and install options. diff --git a/site/public/logo.png b/site/public/logo.png new file mode 100755 index 0000000..ffa7d52 Binary files /dev/null and b/site/public/logo.png differ diff --git a/site/public/robots.txt b/site/public/robots.txt new file mode 100644 index 0000000..f3b08c9 --- /dev/null +++ b/site/public/robots.txt @@ -0,0 +1,66 @@ +# robots.txt for adeptability +# Policy: allow everyone, including AI crawlers, citation engines, and browsing agents. +# adeptability is open source (MIT). We want it discovered, indexed, cited, and acted on. + +# --- Default: allow all user agents everything --- +User-agent: * +Allow: / + +# --- AI training and browsing crawlers (explicitly allowed) --- +User-agent: GPTBot +Allow: / + +User-agent: ChatGPT-User +Allow: / + +User-agent: OAI-SearchBot +Allow: / + +User-agent: ClaudeBot +Allow: / + +User-agent: Claude-Web +Allow: / + +User-agent: anthropic-ai +Allow: / + +User-agent: PerplexityBot +Allow: / + +User-agent: Perplexity-User +Allow: / + +User-agent: Google-Extended +Allow: / + +User-agent: Applebot +Allow: / + +User-agent: Applebot-Extended +Allow: / + +User-agent: CCBot +Allow: / + +User-agent: cohere-ai +Allow: / + +User-agent: Bytespider +Allow: / + +# --- Traditional search crawlers (explicitly allowed) --- +User-agent: Googlebot +Allow: / + +User-agent: Bingbot +Allow: / + +User-agent: DuckDuckBot +Allow: / + +# --- Machine-readable discovery for AI systems --- +# LLM-friendly index: https://adeptability.itaywol.tools/llms.txt +# Full docs corpus: https://adeptability.itaywol.tools/llms-full.txt + +Sitemap: https://adeptability.itaywol.tools/sitemap-index.xml diff --git a/site/public/social-card.png b/site/public/social-card.png new file mode 100755 index 0000000..827f7ca Binary files /dev/null and b/site/public/social-card.png differ diff --git a/site/scripts/gen-llms.mjs b/site/scripts/gen-llms.mjs new file mode 100644 index 0000000..8a78562 --- /dev/null +++ b/site/scripts/gen-llms.mjs @@ -0,0 +1,218 @@ +// Generates public/llms.txt and public/llms-full.txt from the Starlight docs. +// +// - llms.txt : spec-compliant (llmstxt.org) curated index. H1, one-paragraph +// summary, then H2 sections of [title](url): description links. +// - llms-full.txt : the full markdown of every docs page, concatenated, with +// frontmatter stripped and a per-page H1 + canonical URL line. +// +// Wired as an npm "prebuild" step so both files regenerate on every build and +// cannot go stale. No dependencies: plain Node + fs. + +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.resolve(__dirname, ".."); +const DOCS_DIR = path.join(ROOT, "src/content/docs/docs"); +const PUBLIC_DIR = path.join(ROOT, "public"); +const SITE = "https://adeptability.itaywol.tools"; + +// One-paragraph project summary. Authored copy, kept in sync with the landing page. +const SUMMARY = + "adept is an open source Go CLI (MIT licensed) that lets you author an AI coding " + + "skill or subagent once, in a single canonical format, then render it accurately " + + "into Claude Code, Cursor, GitHub Copilot, OpenAI Codex, OpenCode, and 50+ other AI " + + "coding agents. Think of it as dotfiles for your AI coding agents: one source of " + + "truth, and the correct on-disk format everywhere. A hash-based 3-way detector flags " + + "drift, and libraries let a team share a versioned set of skills by reference."; + +// Curated section order for llms.txt. Slugs are relative to /docs/ (no extension). +const GROUPS = [ + { + name: "Getting started", + slugs: [ + "getting-started/install", + "getting-started/quickstart", + "getting-started/first-skill", + ], + }, + { + name: "Concepts", + slugs: [ + "concepts/canonical-skills", + "concepts/agents", + "concepts/harnesses", + "concepts/libraries", + "concepts/scopes", + "concepts/layouts", + "concepts/drift", + ], + }, + { + name: "Guides", + slugs: [ + "guides/authoring", + "guides/installing-skills", + "guides/sharing-a-library", + "guides/importing", + "guides/vendoring", + "guides/git-hook", + "guides/loops", + "guides/safety-scans", + "guides/automation-json", + ], + }, + { + name: "Reference", + slugs: [ + "reference/commands", + "reference/configuration", + "harness-comparison", + "exchange", + ], + }, +]; + +function walk(dir) { + const out = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const p = path.join(dir, entry.name); + if (entry.isDirectory()) out.push(...walk(p)); + else if (/\.(md|mdx)$/.test(entry.name)) out.push(p); + } + return out; +} + +function relSlug(file) { + return path.relative(DOCS_DIR, file).replace(/\\/g, "/").replace(/\.(md|mdx)$/, ""); +} + +function slugToUrl(slug) { + return slug === "index" ? `${SITE}/docs/` : `${SITE}/docs/${slug}/`; +} + +function parse(file) { + const raw = fs.readFileSync(file, "utf8"); + const m = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/); + const fm = {}; + let body = raw; + if (m) { + body = raw.slice(m[0].length); + for (const line of m[1].split(/\r?\n/)) { + const kv = line.match(/^(\w[\w-]*):\s*(.*)$/); + if (kv) fm[kv[1]] = kv[2].trim().replace(/^["']|["']$/g, ""); + } + } + return { fm, body }; +} + +// llms.txt prose: replace em dash (U+2014) and en dash (U+2013) with commas to +// keep the curated index clean. Built from char codes so no literal dash lives +// in this source. Used for both link titles and one-line descriptions. +const DASHES = String.fromCharCode(0x2014, 0x2013); +const DASH_RE = new RegExp("\\s*[" + DASHES + "]\\s*", "g"); +function clean(s) { + return (s || "").replace(DASH_RE, ", ").replace(/\s{2,}/g, " ").trim(); +} + +// llms-full.txt bodies: strip MDX imports and unwrap / into headings +// so the corpus stays clean, faithful markdown. +function cleanBody(body) { + const lines = body.split(/\r?\n/); + const out = []; + for (const line of lines) { + const t = line.trim(); + if (/^import\s.+from\s+['"].+['"];?\s*$/.test(t)) continue; + if (/^<\/?Tabs>\s*$/.test(t)) continue; + if (/^<\/TabItem>\s*$/.test(t)) continue; + const tab = t.match(/^\s*$/); + if (tab) { + out.push(`#### ${tab[1]}`); + continue; + } + out.push(line); + } + return out.join("\n").replace(/\n{3,}/g, "\n\n").trim(); +} + +const files = walk(DOCS_DIR); +const bySlug = new Map(); +for (const f of files) bySlug.set(relSlug(f), f); + +// --- Build llms.txt --------------------------------------------------------- +const seen = new Set(); +let llms = `# adeptability\n\n> ${SUMMARY}\n\n`; +llms += `The full text of every documentation page is available at ${SITE}/llms-full.txt\n\n`; + +// Docs home first. +if (bySlug.has("index")) { + const { fm } = parse(bySlug.get("index")); + llms += `## Overview\n\n`; + llms += `- [Documentation home](${SITE}/docs/): ${clean(fm.description)}\n\n`; + seen.add("index"); +} + +for (const group of GROUPS) { + llms += `## ${group.name}\n\n`; + for (const slug of group.slugs) { + const file = bySlug.get(slug); + if (!file) { + console.warn(`[gen-llms] WARN: manifest slug not found: ${slug}`); + continue; + } + const { fm } = parse(file); + const title = clean(fm.title || slug); + llms += `- [${title}](${slugToUrl(slug)}): ${clean(fm.description)}\n`; + seen.add(slug); + } + llms += `\n`; +} + +llms += `## Links\n\n`; +llms += `- [GitHub repository](https://github.com/itaywol/adeptability): Source code, issues, and discussion. Written in Go, MIT licensed.\n`; +llms += `- [Releases](https://github.com/itaywol/adeptability/releases): Signed binaries and the changelog for every version.\n`; +llms += `- [Landing page](${SITE}/): Project overview, feature tour, and install options.\n`; + +// Staleness guard: warn if any docs page is missing from the curated index. +for (const slug of bySlug.keys()) { + if (!seen.has(slug)) console.warn(`[gen-llms] WARN: docs page not in llms.txt manifest: ${slug}`); +} + +fs.writeFileSync(path.join(PUBLIC_DIR, "llms.txt"), llms.trimEnd() + "\n"); + +// --- Build llms-full.txt ---------------------------------------------------- +// Ordered: curated pages first (in manifest order), then any stragglers. +const order = ["index", ...GROUPS.flatMap((g) => g.slugs)]; +for (const slug of bySlug.keys()) if (!order.includes(slug)) order.push(slug); + +const parts = []; +parts.push(`# adeptability documentation`); +parts.push(``); +parts.push(`> ${SUMMARY}`); +parts.push(``); +parts.push(`This file concatenates the full text of all ${bySlug.size} documentation pages.`); +parts.push(`Source: ${SITE}/ | Generated by scripts/gen-llms.mjs`); +parts.push(``); + +for (const slug of order) { + const file = bySlug.get(slug); + if (!file) continue; + const { fm, body } = parse(file); + const title = fm.title || slug; + parts.push(`---`); + parts.push(``); + parts.push(`# ${title}`); + parts.push(``); + parts.push(`URL: ${slugToUrl(slug)}`); + if (fm.description) parts.push(`Description: ${fm.description}`); + parts.push(``); + parts.push(cleanBody(body)); + parts.push(``); +} + +fs.writeFileSync(path.join(PUBLIC_DIR, "llms-full.txt"), parts.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd() + "\n"); + +console.log( + `[gen-llms] wrote public/llms.txt and public/llms-full.txt from ${bySlug.size} docs pages` +); diff --git a/site/src/assets/logo-mark.svg b/site/src/assets/logo-mark.svg new file mode 100644 index 0000000..3d7f71d --- /dev/null +++ b/site/src/assets/logo-mark.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/site/src/assets/logo.png b/site/src/assets/logo.png new file mode 100755 index 0000000..ffa7d52 Binary files /dev/null and b/site/src/assets/logo.png differ diff --git a/site/src/content.config.ts b/site/src/content.config.ts new file mode 100644 index 0000000..7fbcf2c --- /dev/null +++ b/site/src/content.config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from "astro:content"; +import { docsLoader } from "@astrojs/starlight/loaders"; +import { docsSchema } from "@astrojs/starlight/schema"; + +export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), +}; diff --git a/docs/concepts/agents.md b/site/src/content/docs/docs/concepts/agents.md similarity index 64% rename from docs/concepts/agents.md rename to site/src/content/docs/docs/concepts/agents.md index e511c05..8b3af80 100644 --- a/docs/concepts/agents.md +++ b/site/src/content/docs/docs/concepts/agents.md @@ -1,4 +1,7 @@ -# Canonical agents +--- +title: "Canonical agents" +description: "Skills make knowledge portable; agents make delegation portable across every harness." +--- Skills make *knowledge* portable; agents make *delegation* portable. An agent (a.k.a. subagent) is a named specialist a coding harness can hand work to — a reviewer, a test @@ -37,6 +40,33 @@ conversation's system prompt. Identity is `(id, content-hash)`, exactly like ski skills, agents have no sidecars (no harness supports attaching files to an agent definition) and no published/private library split — they render to the maintainer's harnesses only. +## Templates + +`adept agent add ` scaffolds a new canonical agent from a best-practice template instead of +a blank file: + +```bash +adept agent add pr-reviewer # --template default (the default) +adept agent add pr-reviewer --template evaluator +adept agent add pr-reviewer --edit # open in $EDITOR after creating +adept agent add pr-reviewer --from ./existing.md # import an existing agent file instead +``` + +Both templates encode the structure the `adept agent check` linter looks for: a trigger-shaped +description, a one-line role, when-invoked steps, an output contract, and an explicit boundaries +section. + +- `default`: a general specialist skeleton. Placeholder frontmatter (commented `mode`, `tools`, + `model`), a role line, a numbered "When invoked" sequence, an "Output" contract, and + "Boundaries" split into do / do-not. +- `evaluator`: the generator/evaluator pattern for a reviewer that verifies someone else's work. + It assumes the work is broken, insists on acting (running tests) over reading, uses a + PASS/REJECT verdict, and sets report-only boundaries (never fix, never approve unexecuted + work). Its tool hint includes `Bash` because an evaluator must run things. + +`agent add` is project-scoped; it refuses `--global`. See the bundled `authoring-adept-agents` +skill (seeded by `adept init`) for the authoring playbook. + ## Where agents render | Harness | Output | Notes | @@ -50,9 +80,10 @@ and no published/private library split — they render to the maintainer's harne Fields a harness cannot express are **warn-dropped at sync**, never silently. Harnesses with no agent concept (the generic vercel-matrix targets) skip agents with a warning. -!!! note "Cursor reads `.claude/agents/` too" - Syncing agents to both `claude-code` and `cursor` makes each agent appear twice inside - Cursor. Scope such agents with `targets:` — sync warns when this applies. +:::note[Cursor reads `.claude/agents/` too] +Syncing agents to both `claude-code` and `cursor` makes each agent appear twice inside +Cursor. Scope such agents with `targets:` — sync warns when this applies. +::: ## Drift, import, and checks @@ -70,6 +101,6 @@ Agents ride the same machinery as skills: There is no 3-way merge for agents in v1: sync overwrites the rendered files and drift warns first. -See the [command reference](../reference/commands.md#agent) for the full `adept agent` +See the [command reference](/docs/reference/commands/#agent) for the full `adept agent` surface, and the bundled `authoring-adept-agents` skill (seeded by `adept init`) for the authoring playbook your harness agents read. diff --git a/docs/concepts/canonical-skills.md b/site/src/content/docs/docs/concepts/canonical-skills.md similarity index 85% rename from docs/concepts/canonical-skills.md rename to site/src/content/docs/docs/concepts/canonical-skills.md index ebbd64d..4fbbd43 100644 --- a/docs/concepts/canonical-skills.md +++ b/site/src/content/docs/docs/concepts/canonical-skills.md @@ -1,4 +1,7 @@ -# Canonical skills +--- +title: "Canonical skills" +description: "The canonical skill is adept's single source of truth for everything it renders." +--- The **canonical skill** is `adept`'s single source of truth. Everything else — the files in `.claude/`, `.cursor/`, `AGENTS.md`, and so on — is *rendered output* derived from it. @@ -16,7 +19,7 @@ sidecars: └── assets/ ``` -Where `` lives depends on the project [layout](layouts.md): +Where `` lives depends on the project [layout](/docs/concepts/layouts/): - **Consumer layout** (default): `/.adeptability/skills/` - **Library layout** (`init --as-library`): `/skills/` @@ -54,7 +57,7 @@ alongside the body and are preserved by harnesses that support them. A skill's identity is `(id, content-hash)`. There are **no version numbers** — the content hash is the source of truth for "did this change." This is what powers the -[drift detection](drift.md): `adept` compares hashes of the project canonical, the last-synced +[drift detection](/docs/concepts/drift/): `adept` compares hashes of the project canonical, the last-synced base snapshot, and the library canonical to decide whether a skill is `synced`, `ahead`, `behind`, or `diverged` — and separately compares canonical against each harness's rendered output to detect harness drift. @@ -70,7 +73,7 @@ harness output. When `adept` builds the set of skills for a project, it resolves: 1. Project canonical skills (highest priority) -2. Skills from each configured [library](libraries.md), in order +2. Skills from each configured [library](/docs/concepts/libraries/), in order A project-canonical skill **shadows** a library skill sharing the same id, and across multiple libraries the first match wins. Use `adept skill list` to see the resolved set. diff --git a/docs/concepts/drift.md b/site/src/content/docs/docs/concepts/drift.md similarity index 90% rename from docs/concepts/drift.md rename to site/src/content/docs/docs/concepts/drift.md index 47bd0cf..0365911 100644 --- a/docs/concepts/drift.md +++ b/site/src/content/docs/docs/concepts/drift.md @@ -1,4 +1,7 @@ -# Drift & the 3-way model +--- +title: "Drift & the 3-way model" +description: "adept has no lockfile: the filesystem is the source of truth. Understand the 3-way drift model." +--- `adept` has no lockfile. The **filesystem itself is the source of truth**, and hash comparisons tell `adept` exactly what changed and in which direction. Two independent @@ -26,7 +29,7 @@ divergence without any version numbers or a lockfile. | `diverged` | Both sides changed since base — a real conflict. | This is what lets `adept` tell *"you edited it"* apart from *"upstream changed it"* — see -[Libraries](libraries.md) for how the base snapshot fits in. +[Libraries](/docs/concepts/libraries/) for how the base snapshot fits in. ## Harness drift: canonical vs. rendered output @@ -72,5 +75,5 @@ claude-code 3 1 0 0 ## Enforcing it in git Install a pre-commit hook that blocks commits when there's drift — see the -[Git drift hook guide](../guides/git-hook.md). In CI, run `adept status` and branch on its +[Git drift hook guide](/docs/guides/git-hook/). In CI, run `adept status` and branch on its exit code (`2` = drift/dirty). diff --git a/docs/concepts/harnesses.md b/site/src/content/docs/docs/concepts/harnesses.md similarity index 90% rename from docs/concepts/harnesses.md rename to site/src/content/docs/docs/concepts/harnesses.md index 98bffe7..a520172 100644 --- a/docs/concepts/harnesses.md +++ b/site/src/content/docs/docs/concepts/harnesses.md @@ -1,4 +1,7 @@ -# Harnesses & adapters +--- +title: "Harnesses & adapters" +description: "A harness is a target AI coding agent. Learn how adept adapts skills to each one." +--- A **harness** is a target AI coding agent. Each one loads skills from its own path with its own schema. `adept sync` renders every canonical skill into every *enabled* harness, and @@ -27,8 +30,8 @@ activation translation, sidecar handling, and size budgets: | Codex | `codex` | `AGENTS.md` (aggregated, 32 KiB cap, lowest-priority dropped first) | `~/.codex/AGENTS.md` | | GitHub Copilot | `copilot` | `.github/instructions/.instructions.md` (aggregated per-glob) | not global-capable | -See the [Harness Comparison](../harness-comparison.md) for exactly what each renderer emits -and why it differs, and [Scopes](scopes.md) for what `--global` changes and why Cursor and +See the [Harness Comparison](/docs/harness-comparison/) for exactly what each renderer emits +and why it differs, and [Scopes](/docs/concepts/scopes/) for what `--global` changes and why Cursor and Copilot are excluded. ## Generic per-skill adapters @@ -102,4 +105,4 @@ global-base-dir: ".junie" # detection root when scoped globa Leave both out and the adapter simply isn't global-capable: `adept --global harness add ` fails with `harness has no global config location`, same as the built-in Cursor and -Copilot adapters. See [Scopes](scopes.md) for the full global-scope model. +Copilot adapters. See [Scopes](/docs/concepts/scopes/) for the full global-scope model. diff --git a/docs/concepts/layouts.md b/site/src/content/docs/docs/concepts/layouts.md similarity index 95% rename from docs/concepts/layouts.md rename to site/src/content/docs/docs/concepts/layouts.md index 79401cf..1619dd5 100644 --- a/docs/concepts/layouts.md +++ b/site/src/content/docs/docs/concepts/layouts.md @@ -1,4 +1,7 @@ -# Layouts +--- +title: "Layouts" +description: "A project's layout decides where canonical skills live on disk." +--- A project's **layout** decides *where canonical skills live on disk*. It's set once at `init` time and recorded in `.adeptability/config.json` (`layout`). diff --git a/docs/concepts/libraries.md b/site/src/content/docs/docs/concepts/libraries.md similarity index 91% rename from docs/concepts/libraries.md rename to site/src/content/docs/docs/concepts/libraries.md index 7bf4817..57f1c2b 100644 --- a/docs/concepts/libraries.md +++ b/site/src/content/docs/docs/concepts/libraries.md @@ -1,4 +1,7 @@ -# Libraries +--- +title: "Libraries" +description: "A library is a shared, versioned set of skills a team authors once and reuses everywhere." +--- A **library** is a shared, versioned set of skills. Libraries are how a team authors skills once and consumes them across many projects — resolved **package-manager style**. @@ -41,7 +44,7 @@ project/.claude/ .cursor/ AGENTS.md … materialized harness output ( ### The machine store `$ADEPT_LIBRARY` (default `~/.adeptability`) is the **machine store** — it's also where the -[global scope](scopes.md) keeps its own skills, config, and library clones. Two things fall +[global scope](/docs/concepts/scopes/) keeps its own skills, config, and library clones. Two things fall back to it from project scope: - **Resolution fallback**: if a configured library has no clone under @@ -75,7 +78,7 @@ and any project-canonical skill shadows all of them. Run the same command with the root `--global` flag to clone into the machine store instead (`adept --global library add team-skills --from … ` → `~/.adeptability/libs/team-skills/`) — -see [Scopes](scopes.md). +see [Scopes](/docs/concepts/scopes/). Manage libraries: @@ -128,11 +131,11 @@ Set it with `adept config set mode symlink|copy` or `adept init --mode copy`. Alongside the resolved library, `adept` keeps a **base snapshot** at `/.adeptability/base//` — the last-synced common ancestor. It's the third leg of the -[3-way drift model](drift.md) that lets `adept` tell "you edited it" apart from "upstream +[3-way drift model](/docs/concepts/drift/) that lets `adept` tell "you edited it" apart from "upstream changed it." ## Related -- [Sharing a library with a team (guide)](../guides/sharing-a-library.md) -- [Vendoring a library in-repo (guide)](../guides/vendoring.md) -- [Layouts](layouts.md) — consumer vs. publishable-library layout. +- [Sharing a library with a team (guide)](/docs/guides/sharing-a-library/) +- [Vendoring a library in-repo (guide)](/docs/guides/vendoring/) +- [Layouts](/docs/concepts/layouts/) — consumer vs. publishable-library layout. diff --git a/docs/concepts/scopes.md b/site/src/content/docs/docs/concepts/scopes.md similarity index 91% rename from docs/concepts/scopes.md rename to site/src/content/docs/docs/concepts/scopes.md index c488baa..7305808 100644 --- a/docs/concepts/scopes.md +++ b/site/src/content/docs/docs/concepts/scopes.md @@ -1,4 +1,7 @@ -# Scopes +--- +title: "Scopes" +description: "A scope decides where adept reads and writes its metadata, skills, and materialized files." +--- A **scope** decides *where* `adept` reads and writes its metadata, skills, and materialized harness files: a single project, or your whole account (home directory). @@ -58,7 +61,7 @@ harness "cursor": harness has no global config location (project scope only) ``` Config-driven (YAML) adapters can opt into global support too — see -[Harnesses & adapters](harnesses.md#global-support). +[Harnesses & adapters](/docs/concepts/harnesses/#global-support). ## v1 limitation: skills only @@ -91,6 +94,6 @@ leaves every file it doesn't manage (other skills, your own notes, anything not ## Related -- [Libraries](libraries.md) — project-local clones vs. the machine store, and how the two +- [Libraries](/docs/concepts/libraries/) — project-local clones vs. the machine store, and how the two interact with scope. -- [Harnesses & adapters](harnesses.md) — the full adapter table, including the Global column. +- [Harnesses & adapters](/docs/concepts/harnesses/) — the full adapter table, including the Global column. diff --git a/docs/exchange.md b/site/src/content/docs/docs/exchange.md similarity index 90% rename from docs/exchange.md rename to site/src/content/docs/docs/exchange.md index a407703..22ba2dc 100644 --- a/docs/exchange.md +++ b/site/src/content/docs/docs/exchange.md @@ -1,4 +1,7 @@ -# Exchange — the team expertise billboard +--- +title: "Exchange — the team expertise billboard" +description: "The exchange is a lightweight request/answer board for sharing expertise across a team." +--- The **exchange** is a lightweight request/answer board for a team. Someone hosts a server; everyone else registers and posts or answers requests for expertise. The server is passive @@ -36,9 +39,10 @@ adept exchange serve --addr :8080 --db fs --data ./exchange-data adept exchange serve --rotate-bootstrap # mint a fresh bootstrap token ``` -!!! warning "TLS" - `serve` speaks plain HTTP. Run it on a trusted network, and terminate TLS at a reverse - proxy when exposing it beyond the LAN. +:::caution[TLS] +`serve` speaks plain HTTP. Run it on a trusted network, and terminate TLS at a reverse +proxy when exposing it beyond the LAN. +::: ## Register diff --git a/docs/getting-started/first-skill.md b/site/src/content/docs/docs/getting-started/first-skill.md similarity index 70% rename from docs/getting-started/first-skill.md rename to site/src/content/docs/docs/getting-started/first-skill.md index 1ad62b2..01fb46e 100644 --- a/docs/getting-started/first-skill.md +++ b/site/src/content/docs/docs/getting-started/first-skill.md @@ -1,4 +1,7 @@ -# Your first skill +--- +title: "Your first skill" +description: "Build your first canonical skill from scratch and render it into every harness." +--- A skill is a directory containing one `SKILL.md` (or `skill.yaml` + body) and any optional sidecars. This page walks through creating one from scratch. @@ -32,17 +35,18 @@ tags: [review, quality] The schema lives at `pkg/adeptschema/skill.schema.json` and is validated on every load. -!!! note "`id` vs `name`" - The canonical frontmatter key is `id`; `name` is accepted as an alias and mapped to `id` - on load. Skill **ids** are validated against - `^[a-z0-9](?:[a-z0-9-]{0,48}[a-z0-9])?$` — lowercase ASCII letters, digits, and internal - hyphens, max 50 chars. This is the lowest common denominator across harnesses, so a valid - id always renders a valid harness name and directory. +:::note[`id` vs `name`] +The canonical frontmatter key is `id`; `name` is accepted as an alias and mapped to `id` +on load. Skill **ids** are validated against +`^[a-z0-9](?:[a-z0-9-]{0,48}[a-z0-9])?$` — lowercase ASCII letters, digits, and internal +hyphens, max 50 chars. This is the lowest common denominator across harnesses, so a valid +id always renders a valid harness name and directory. +::: ## Activation modes `activation` tells each harness *when* to surface the skill. `adept` translates it per -harness — see the [Harness Comparison](../harness-comparison.md) for the full table. +harness — see the [Harness Comparison](/docs/harness-comparison/) for the full table. | Mode | Meaning | | --- | --- | @@ -81,5 +85,5 @@ adept skill list --project-only # only skills in the project canonical ## Related -- [Authoring a skill (guide)](../guides/authoring.md) — writing effective, portable skills. -- [Canonical skills (concept)](../concepts/canonical-skills.md) — the data model in depth. +- [Authoring a skill (guide)](/docs/guides/authoring/) — writing effective, portable skills. +- [Canonical skills (concept)](/docs/concepts/canonical-skills/) — the data model in depth. diff --git a/docs/getting-started/install.md b/site/src/content/docs/docs/getting-started/install.md similarity index 67% rename from docs/getting-started/install.md rename to site/src/content/docs/docs/getting-started/install.md index 4964807..707922a 100644 --- a/docs/getting-started/install.md +++ b/site/src/content/docs/docs/getting-started/install.md @@ -1,4 +1,7 @@ -# Install +--- +title: "Install" +description: "Install adept, a single self-contained binary, via whichever channel fits your platform." +--- `adept` is a single self-contained binary. Pick whichever channel fits your platform. @@ -74,11 +77,12 @@ Every release ships cross-compiled archives for darwin / linux / windows × amd6 plus `checksums.txt`, cosign signatures, and build-provenance attestation. Download from the [latest release](https://github.com/itaywol/adeptability/releases/latest). -!!! note "Other package managers" - Scoop, WinGet, and an npm wrapper are prototyped but **not published yet**. If you want - one of them, add a 👍 to the - [additional package managers issue](https://github.com/itaywol/adeptability/issues) so we - know it's worth committing to maintaining. +:::note[Other package managers] +Scoop, WinGet, and an npm wrapper are prototyped but **not published yet**. If you want +one of them, add a 👍 to the +[additional package managers issue](https://github.com/itaywol/adeptability/issues) so we +know it's worth committing to maintaining. +::: ## Verify the install @@ -89,10 +93,21 @@ adept --help ## Shell completion -`adept` ships cobra completion for bash, zsh, and fish: +`adept completion ` prints a completion script to stdout for `bash`, `zsh`, `fish`, or +`powershell`: ```bash -adept completion zsh > "${fpath[1]}/_adept" # zsh -adept completion bash > /etc/bash_completion.d/adept +adept completion zsh > "${fpath[1]}/_adept" # zsh +adept completion bash > /etc/bash_completion.d/adept # bash adept completion fish > ~/.config/fish/completions/adept.fish +adept completion powershell > adept.ps1 # PowerShell ``` + +Run `adept completion --help` for the per-shell install instructions. + +:::note[Pre-generated completions ship with releases] +The repo also keeps generated scripts under `completions/` (`adept.bash`, `adept.zsh`, +`adept.fish`, `adept.ps1`), regenerated by `scripts/completions.sh`. Release archives bundle +them, and the Homebrew and Nix packages install bash, zsh, and fish completions for you, so +manual setup is only needed for a `go install` or raw-binary install. +::: diff --git a/docs/getting-started/quickstart.md b/site/src/content/docs/docs/getting-started/quickstart.md similarity index 88% rename from docs/getting-started/quickstart.md rename to site/src/content/docs/docs/getting-started/quickstart.md index 095fbb2..7cc76bb 100644 --- a/docs/getting-started/quickstart.md +++ b/site/src/content/docs/docs/getting-started/quickstart.md @@ -1,4 +1,7 @@ -# Quickstart +--- +title: "Quickstart" +description: "Author a skill once and watch it materialize into every enabled harness in about a minute." +--- Author a skill once and watch it materialize into every enabled harness in about a minute. @@ -94,6 +97,6 @@ adept sync # re-render canonical → every harness ## Next -- [Author a robust, portable skill](../guides/authoring.md) -- [Share a library across your team](../guides/sharing-a-library.md) -- [Full command reference](../reference/commands.md) +- [Author a robust, portable skill](/docs/guides/authoring/) +- [Share a library across your team](/docs/guides/sharing-a-library/) +- [Full command reference](/docs/reference/commands/) diff --git a/docs/guides/authoring.md b/site/src/content/docs/docs/guides/authoring.md similarity index 92% rename from docs/guides/authoring.md rename to site/src/content/docs/docs/guides/authoring.md index 99b8212..f93e922 100644 --- a/docs/guides/authoring.md +++ b/site/src/content/docs/docs/guides/authoring.md @@ -1,4 +1,7 @@ -# Authoring a skill +--- +title: "Authoring a skill" +description: "Write a canonical skill that renders well across every harness." +--- This guide covers writing a canonical skill that renders well across every harness. @@ -70,7 +73,7 @@ cat .claude/skills/pr-review/SKILL.md cat .cursor/rules/pr-review.mdc ``` -The [Harness Comparison](../harness-comparison.md) shows the exact translation per activation +The [Harness Comparison](/docs/harness-comparison/) shows the exact translation per activation mode. ## Iterate safely diff --git a/site/src/content/docs/docs/guides/automation-json.md b/site/src/content/docs/docs/guides/automation-json.md new file mode 100644 index 0000000..1c001c7 --- /dev/null +++ b/site/src/content/docs/docs/guides/automation-json.md @@ -0,0 +1,98 @@ +--- +title: "Scripting and CI with --json" +description: "Use the global --json flag, jq pipelines, and drift exit codes to gate CI on skill sync state." +--- + +Every `adept` command takes a global `--json` flag that swaps human tables for machine-readable +JSON. Combine it with exit codes and `jq` to script adept in CI. + +## The --json flag + +```bash +adept status --json +adept diff --json +adept skill list --json +adept harness list --json +adept config list --json +``` + +`--json` is global, so it sits before or after the subcommand. Read and list commands produce +the most useful payloads: + +- `status --json` is a single object: `initialized`, `projectRoot`, `mode`, `skillsCanonical`, + `driftedHarnesses`, `updatableLibraries`, and more. +- `diff --json` is an array, one entry per harness: `{ harness, synced, drifted, missing, conflict }`. + It is `null` when nothing is enabled. +- `skill list`, `agent list`, `harness list`, and `library list` return arrays of objects. +- `config list` returns `{ key, value, allowed, help }` objects. + +## jq pipelines + +```bash +# Is anything drifted right now? +adept status --json | jq '.driftedHarnesses' + +# Which harnesses are enabled? +adept harness list --json | jq -r '.[] | select(.enabled) | .id' + +# List every drifted file across all harnesses. +adept diff --json | jq -r '.[] | .drifted[]?' + +# Read one config value. +adept config list --json | jq -r '.[] | select(.key=="mode") | .value' + +# Just the project skill ids. +adept skill list --json | jq -r '.[] | select(.source=="project") | .id' +``` + +## Exit codes for CI gating + +`status` and `diff` report drift through their exit code, so a CI job can fail the build when +harness outputs are stale: + +| Code | Meaning | +| --- | --- | +| `0` | Clean: no drift. | +| `2` | Drift detected (`status` out of sync, `diff` found differences). | +| `1` | Any other error (bad flags, unreadable project, and so on). | + +```yaml +# CI: fail if canonical skills and harness outputs disagree. +- run: adept diff +``` + +`adept diff` exits `2` when any harness has drifted, writing nothing. That is the drift gate: +non-zero fails the step. `adept sync` (or the fix-mode hook below) is how you resolve it. + +:::tip[Pair the gate with --json for reporting] +`adept diff` sets the exit code; `adept diff --json` gives you the detail to log. Run the plain +form to gate and the JSON form to annotate, or read `$?` after the JSON call. +::: + +## The pre-commit hook in CI + +`adept hook install` writes `.git/hooks/pre-commit`: + +```bash +adept hook install # fail mode (default) +adept hook install --mode fix # adopt harness edits, re-render, re-stage +``` + +In `fail` mode a drifted commit is blocked with a suggested fix. In `fix` mode the hook adopts +harness-side edits back into canonical, re-renders, and re-stages so the commit proceeds. For CI +that cannot install git hooks, run `adept diff` directly as the gate instead. See the +[git drift hook guide](/docs/guides/git-hook/) for the full workflow. + +## Running outside the repo + +Two more global flags matter for scripts: + +- `--project `: point adept at a project root other than the current directory, so a CI + job can run from anywhere. +- `--log-level debug|info|warn|error` (default `info`): raise to `debug` to trace resolution, or + drop to `error` to keep logs out of captured output. Logs go to stderr; `--json` payloads go + to stdout, so redirection stays clean. + +```bash +adept status --json --project /src/app --log-level error | jq '.driftedHarnesses' +``` diff --git a/docs/guides/git-hook.md b/site/src/content/docs/docs/guides/git-hook.md similarity index 90% rename from docs/guides/git-hook.md rename to site/src/content/docs/docs/guides/git-hook.md index c1860fc..132ea17 100644 --- a/docs/guides/git-hook.md +++ b/site/src/content/docs/docs/guides/git-hook.md @@ -1,7 +1,10 @@ -# Git drift hook +--- +title: "Git drift hook" +description: "Install a git pre-commit hook that keeps committed harness files honest." +--- Keep committed harness files honest by installing a git **pre-commit** hook that runs the -[drift gate](../concepts/drift.md) on every commit. +[drift gate](/docs/concepts/drift/) on every commit. ## Install diff --git a/docs/guides/importing.md b/site/src/content/docs/docs/guides/importing.md similarity index 90% rename from docs/guides/importing.md rename to site/src/content/docs/docs/guides/importing.md index 15ebb5c..ba47a60 100644 --- a/docs/guides/importing.md +++ b/site/src/content/docs/docs/guides/importing.md @@ -1,4 +1,7 @@ -# Importing existing rules +--- +title: "Importing existing rules" +description: "Already have .cursor/rules, .claude/skills, an AGENTS.md, or GitHub instructions? Import them into adept." +--- Already have `.cursor/rules`, `.claude/skills`, an `AGENTS.md`, or `.github/instructions`? `adept` adopts them into the canonical layout so you can manage them from one place. @@ -55,7 +58,7 @@ Adoption is the inverse of rendering: For **config-driven adapters**, `sync-from` auto-derives the reverse of the adapter's `frontmatter.rename`. Non-bijective renames need an explicit `import.rename` block — see -[Harnesses & adapters](../concepts/harnesses.md#config-driven-adapters-no-recompile). +[Harnesses & adapters](/docs/concepts/harnesses/#config-driven-adapters-no-recompile). ## After importing diff --git a/site/src/content/docs/docs/guides/installing-skills.md b/site/src/content/docs/docs/guides/installing-skills.md new file mode 100644 index 0000000..f4bb665 --- /dev/null +++ b/site/src/content/docs/docs/guides/installing-skills.md @@ -0,0 +1,112 @@ +--- +title: "Installing skills from skills.sh and GitHub" +description: "Search skills.sh, install a skill into your project canonical, and keep external skills SHA-locked and updatable." +--- + +`adept skill install` pulls a published skill from GitHub (indexed by +[skills.sh](https://skills.sh)) straight into your project canonical, then locks it to an exact +commit so it never changes under you. Every install is gated by a safety scan first. + +## Find a skill + +```bash +adept skill search "postgres migration" +adept skill search react --limit 5 # default limit is 20 +``` + +Search queries the skills.sh index and prints matching skills with the slug you pass to +`install`. + +## Inspect before installing + +```bash +adept skill info owner/repo/skill-name +``` + +`info` fetches repo metadata without touching your project. It reports the repository, license, +star count, install count (from skills.sh), and the current resolved commit SHA. Add `--json` +for a machine-readable record. + +## Install + +```bash +adept skill install owner/repo/skill-name +``` + +The slug is `/[#ref]/`. The optional `#ref` pins a branch, tag, or commit; +without it, the repository's default branch is resolved. Install then: + +1. Resolves the ref to an immutable commit SHA and downloads that exact tarball. +2. Extracts the target skill directory and parses its `SKILL.md`. +3. Runs the safety scan (see below). +4. Shows an install preview: slug, repo URL, SHA, path, license, stars, installs, the file + list, and any scan findings. +5. Prompts `proceed with install? [y/N]`, then writes the skill into the project canonical, + snapshots a base for drift detection, and records a lock entry. + +Skip the confirmation with `--yes`: + +```bash +adept skill install owner/repo/skill-name --yes +``` + +:::note[Reinstalling and name clashes] +Re-installing a locked skill overwrites it. If a skill directory with the same id already +exists in the canonical but has no lock entry (a manual copy), install refuses and asks you to +remove or rename it first. +::: + +## How external skills are SHA-locked + +Installing records a lock entry for the skill: the source slug, the resolved commit SHA, the +matched skill path, and a content hash of the extracted files. Because the ref is resolved to a +specific commit at install time, the on-disk skill is pinned to immutable content, not to a +moving branch. The base snapshot taken at install is what [drift detection](/docs/concepts/drift/) +compares against, so later edits (yours or a re-render) are visible as drift. + +## Update locked skills + +```bash +adept skill update # re-resolve every locked external skill +adept skill update skill-name # just one +``` + +`update` re-resolves each locked skill's ref against upstream. If the SHA is unchanged it +prints `up to date`; otherwise it prints `old -> new`, re-downloads the new tarball, rewrites +the skill and its base snapshot, and bumps the SHA and content hash in the lock. The lock is +saved after each skill so a mid-run failure never leaves an entry pointing at stale content. + +## How the safety scan gates installs + +Every install runs a structured static scan over `SKILL.md` plus tighter script-only rules over +any sidecar files, optionally followed by an LLM intent pass when a provider is configured. If +the worst finding meets or exceeds the blocking severity, the install aborts: + +``` +install aborted by safety scan; review findings and pass --allow-unsafe to override +``` + +The blocking severity is `scan.blockSeverity` (default `critical`); tighten it to `high` or +`medium` per project. Whether the scan runs at all is `scan.onInstall` (defaults on once an LLM +provider is set). Override a blocked install with `--allow-unsafe` only after reviewing the +findings. See [Safety scans and LLM config](/docs/guides/safety-scans/) for the full model, and +the [configuration reference](/docs/reference/configuration/) for the keys. + +:::caution[--json installs are non-interactive] +In `--json` mode there is no confirmation prompt, so `--yes` is required. A scan block still +aborts unless you also pass `--allow-unsafe`. +::: + +## Scan any skill without installing + +`adept skill check` runs the same scanner against a target you name three ways: + +```bash +adept skill check my-skill # a project canonical skill, by id +adept skill check library:default:my-skill # library:: +adept skill check owner/repo/skill-name # a remote skill, fetched not installed +``` + +Flags: `--format table|markdown|json` (default `table`), `--llm` to force the LLM intent pass +(errors when no provider is configured), and `--no-llm` to skip it even when one is. High and +critical findings exit non-zero, so `skill check` works as a CI gate. diff --git a/docs/guides/loops.md b/site/src/content/docs/docs/guides/loops.md similarity index 96% rename from docs/guides/loops.md rename to site/src/content/docs/docs/guides/loops.md index 8dfd3b2..25de3d3 100644 --- a/docs/guides/loops.md +++ b/site/src/content/docs/docs/guides/loops.md @@ -1,4 +1,7 @@ -# Composing loops +--- +title: "Composing loops" +description: "A loop is a system that prompts your agents on a schedule so you don't have to." +--- A loop is a system that prompts your agents so you don't have to: on a schedule it **discovers** work worth doing, **hands it off** to an agent, **verifies** the result with diff --git a/docs/guides/safety-scans.md b/site/src/content/docs/docs/guides/safety-scans.md similarity index 92% rename from docs/guides/safety-scans.md rename to site/src/content/docs/docs/guides/safety-scans.md index f9a909e..e23ed8d 100644 --- a/docs/guides/safety-scans.md +++ b/site/src/content/docs/docs/guides/safety-scans.md @@ -1,4 +1,7 @@ -# Safety scans & LLM config +--- +title: "Safety scans & LLM config" +description: "Scan skills for unsafe instructions before running them, and configure the LLM used for scans." +--- Installing a skill from the internet means running someone else's instructions inside your agent. `adept` scans skills for safety issues before they land, with an optional LLM intent @@ -61,7 +64,7 @@ adept config llm unset # forget the provider ## Tuning scan behavior -Two config keys control the scan (see the [Command reference](../reference/commands.md#config)): +Two config keys control the scan (see the [Command reference](/docs/reference/commands/#config)): ```bash adept config set scan.onInstall true # run the scan + LLM pass before every install diff --git a/docs/guides/sharing-a-library.md b/site/src/content/docs/docs/guides/sharing-a-library.md similarity index 87% rename from docs/guides/sharing-a-library.md rename to site/src/content/docs/docs/guides/sharing-a-library.md index 8d26248..cc9d3bb 100644 --- a/docs/guides/sharing-a-library.md +++ b/site/src/content/docs/docs/guides/sharing-a-library.md @@ -1,7 +1,10 @@ -# Sharing a library across a team +--- +title: "Sharing a library across a team" +description: "Author skills once, publish them as a library, and let every project and teammate consume them." +--- Author skills once, publish them as a library, and let every project and teammate consume them -by reference. Read [Libraries](../concepts/libraries.md) first for the package-manager model. +by reference. Read [Libraries](/docs/concepts/libraries/) first for the package-manager model. ## 1. Create the library repo @@ -60,7 +63,7 @@ adept library add team-skills --from git@github.com:acme/skills.git adept sync # materialize into their harnesses ``` -See [Libraries → Teammate onboarding flow](../concepts/libraries.md#teammate-onboarding-flow) +See [Libraries → Teammate onboarding flow](/docs/concepts/libraries/#teammate-onboarding-flow) for the full picture. ## 4. Ship updates diff --git a/docs/guides/vendoring.md b/site/src/content/docs/docs/guides/vendoring.md similarity index 66% rename from docs/guides/vendoring.md rename to site/src/content/docs/docs/guides/vendoring.md index e5c64a5..9da4ca3 100644 --- a/docs/guides/vendoring.md +++ b/site/src/content/docs/docs/guides/vendoring.md @@ -1,4 +1,7 @@ -# Vendoring a library in-repo +--- +title: "Vendoring a library in-repo" +description: "Vendor a consumed library directly in your repo instead of cloning it on demand." +--- By default a consumed library clones into `/.adeptability/libs//`, which is auto-gitignored. Sometimes you instead want that clone committed — for air-gapped builds, @@ -18,12 +21,13 @@ Trade-off: the repo now carries the full skill content instead of just the `{nam ref}` pointer, and updates land as a normal commit (`adept library update` still works — it edits the clone in place) instead of a re-clone on every machine. -!!! note "The ignore line comes back" - `adept library add` and `adept migrate` both re-append `libs/` to - `.adeptability/.gitignore` if it's missing (`adept library update` does not). Already-tracked - files stay tracked, but any *new* file added to the vendored clone afterward is now ignored - and silently skipped by a plain `git add`. Re-remove the line (or use `git add -f`) when - committing new vendored content. +:::note[The ignore line comes back] +`adept library add` and `adept migrate` both re-append `libs/` to +`.adeptability/.gitignore` if it's missing (`adept library update` does not). Already-tracked +files stay tracked, but any *new* file added to the vendored clone afterward is now ignored +and silently skipped by a plain `git add`. Re-remove the line (or use `git add -f`) when +committing new vendored content. +::: ## CI-hermetic use of `ADEPT_LIBRARY` @@ -41,6 +45,7 @@ steps: - run: adept sync --dry-run ``` -!!! tip "Materialization mode" - When vendoring for CI, consider `copy` mode - (`adept config set mode copy`) if your build tools don't follow symlinks. +:::tip[Materialization mode] +When vendoring for CI, consider `copy` mode +(`adept config set mode copy`) if your build tools don't follow symlinks. +::: diff --git a/site/src/content/docs/docs/harness-comparison.mdx b/site/src/content/docs/docs/harness-comparison.mdx new file mode 100644 index 0000000..832b904 --- /dev/null +++ b/site/src/content/docs/docs/harness-comparison.mdx @@ -0,0 +1,185 @@ +--- +title: "Harness comparison" +description: "How a single canonical skill produces correct output for every supported harness." +--- + +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +A single canonical skill produces correct output for every harness — proper frontmatter +schema, proper activation, proper aggregation, proper size budgets. This page shows what gets +written and why. + +## Canonical input + +```yaml +# skill.yaml +id: pr-review +description: Apply before opening a PR. Tests, security, performance. +activation: agent +allowed-tools: [Read, Grep] +``` + +```markdown +# SKILL.md +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff +``` + +## Rendered output per harness + + + + +`.claude/skills/pr-review/SKILL.md` + +```markdown +--- +name: pr-review +description: Apply before opening a PR. Tests, security, performance. +allowed-tools: [Read, Grep] +--- + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff +``` + +**Why correct:** Claude Code's progressive disclosure relies on `name` + `description` for +activation; `allowed-tools` enforces the security boundary. + + + + +`.cursor/rules/pr-review.mdc` + +```markdown +--- +description: Apply before opening a PR. Tests, security, performance. +--- + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff +``` + +**Why correct:** Cursor's "Agent Requested" mode activates rules whose `description` +matches the current task — description-only frontmatter, no `alwaysApply`. (`always` +skills get `alwaysApply: true`; `globs` skills get `globs:` + `alwaysApply: false`.) +Verbatim Claude frontmatter would leave `description` valid but add unrecognized +`name`/`allowed-tools` keys. + + + + +`.opencode/skill/pr-review/SKILL.md` + +```markdown +# pr-review + +Apply before opening a PR. Tests, security, performance. + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff +``` + +**Why correct:** OpenCode doesn't require frontmatter and prefers narrative markdown. + + + + +`AGENTS.md` (aggregated) + +```markdown + +## Apply before opening a PR. Tests, security, performance. + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff + +``` + +When multiple skills are enabled, they are packed by priority descending then byte size +ascending, emitted in skill-id order. If the total exceeds **32 KiB** (Codex's +`project_doc_max_bytes`), the lowest-priority skills drop and a truncation manifest appears +at the top: + +```markdown + +``` + +**Why correct:** Codex has *no per-skill concept*. It reads one or more `AGENTS.md` files +walking up from cwd. Naive copy-as-`SKILL.md` is invisible to Codex; the 32 KiB cap means +quiet truncation if you don't manage it. + + + + +Copilot has no agent-requested mode, so this `activation: agent` skill is **skipped** +(see the activation table below). A skill with `activation: always` renders into +`.github/instructions/always.instructions.md`: + +```markdown +--- +applyTo: "**" +--- + + +## Apply before opening a PR. Tests, security, performance. + +## Tests +- [ ] Unit tests added +## Security +- [ ] No secrets in diff + +``` + +Skills with `activation: globs` bucket into a per-glob file like +`.github/instructions/bucket-a63d8819677675ea.instructions.md` with +`applyTo: "**/*.ts,**/*.tsx"`. + +**Why correct:** Copilot uses `applyTo` glob match to decide when to inject the +instructions. Without it, the file is loaded for the wrong files or ignored entirely. + + + + +## Activation translation table + +| Canonical activation | Claude | Cursor | OpenCode | Codex | Copilot | +| --- | --- | --- | --- | --- | --- | +| `always` | description-only | `alwaysApply: true` | `# id` + desc + body | aggregated body | `applyTo: "**"` | +| `globs: [...]` | desc + glob hint | `globs:` + `alwaysApply:false` | `# id` + desc + body | aggregated body | bucketed by globs | +| `agent` | description-only | description-only | `# id` + desc + body | aggregated body | *skipped* (no agent mode) | +| `manual` | `disable-model-invocation:true` | desc + `@id` hint | `# id` + desc + body | aggregated body | *skipped* | + +## Sidecars + +Skills can bundle `scripts/`, `references/`, `assets/`. Where supported: + +- **Claude Code:** full sidecar tree preserved. +- **OpenCode:** full sidecar tree preserved. +- **Cursor:** dropped (single-file); a warning is reported on `sync`. +- **Codex:** dropped (aggregator file model); a warning is reported on `sync`. +- **Copilot:** dropped (aggregator file model); a warning is reported on `sync`. + +## Beyond the specialized five + +Everything above describes the five **specialized renderers**. 50+ more agents (Windsurf, +Gemini CLI, Cline, Continue, Roo, Goose, Junie, …) render through generic per-skill adapters +that write `SKILL.md` into that agent's convention. Run `adept harness list` for the live +registry, or add your own with a [config-driven adapter](/docs/concepts/harnesses/#config-driven-adapters-no-recompile). + +## Why this matters + +Prior art treated multi-harness sync as a path-multiplexing problem (write one file into N +paths). That breaks activation in Cursor and Copilot, produces nothing usable in Codex, and +silently loses size budget. `adept` makes content fidelity to each harness's actual loader the +headline guarantee — and proves it with golden files any contributor can inspect. diff --git a/docs/index.md b/site/src/content/docs/docs/index.md similarity index 79% rename from docs/index.md rename to site/src/content/docs/docs/index.md index 957ea45..8824faf 100644 --- a/docs/index.md +++ b/site/src/content/docs/docs/index.md @@ -1,4 +1,7 @@ -# adeptability +--- +title: "adeptability" +description: "Write an AI coding skill once, run it in every AI coding assistant." +--- **Write an AI coding skill once, run it in every AI coding assistant.** @@ -28,14 +31,10 @@ Think of it as **dotfiles for your AI coding agents**. ## Where to next -
- -- :material-download: **[Install](getting-started/install.md)** — Go, Homebrew, curl, Docker. -- :material-rocket-launch: **[Quickstart](getting-started/quickstart.md)** — author, sync, and see it in your harness in 60 seconds. -- :material-lightbulb-on: **[Concepts](concepts/canonical-skills.md)** — canonical skills, harnesses, libraries, layouts, drift. -- :material-console: **[Command reference](reference/commands.md)** — every command and flag. - -
+- 📦 **[Install](/docs/getting-started/install/)** — Go, Homebrew, curl, Docker. +- 🚀 **[Quickstart](/docs/getting-started/quickstart/)** — author, sync, and see it in your harness in 60 seconds. +- 💡 **[Concepts](/docs/concepts/canonical-skills/)** — canonical skills, harnesses, libraries, layouts, drift. +- ⌨️ **[Command reference](/docs/reference/commands/)** — every command and flag. ## The core loop diff --git a/docs/reference/commands.md b/site/src/content/docs/docs/reference/commands.md similarity index 97% rename from docs/reference/commands.md rename to site/src/content/docs/docs/reference/commands.md index 20e25f8..c9a25e9 100644 --- a/docs/reference/commands.md +++ b/site/src/content/docs/docs/reference/commands.md @@ -1,4 +1,7 @@ -# Command reference +--- +title: "Command reference" +description: "Every adept command and flag, generated faithfully from the cobra definitions." +--- Every command and flag, generated faithfully from the cobra definitions. `adept --help` is always the authoritative, version-matched source — this page mirrors it. @@ -46,7 +49,7 @@ library, and adopts any pre-existing harness files (`.claude/`, `.cursor/`, `.op | `--as-library` | `false` | Initialize a publishable library (skills at `/skills/`) | With `--as-library`, harness adoption, mode, and the bundled default skills are skipped — see -[Layouts](../concepts/layouts.md). +[Layouts](/docs/concepts/layouts/). --- @@ -307,7 +310,7 @@ references). High or critical findings exit `2` so CI can gate on it. Compose a loop — a scheduled system that discovers work, hands it to agents, verifies with an independent evaluator, persists state, and reschedules. A loop is not a synced resource: it is a composition of things adept already manages (a discovery skill + an evaluator agent) -plus a schedule that lives in CI or the harness. See the [loops guide](../guides/loops.md). +plus a schedule that lives in CI or the harness. See the [loops guide](/docs/guides/loops/). ### loop add @@ -329,7 +332,7 @@ first-loop checklist (state file, isolation, token cap, human review). ## library -Manage the project's library remotes. See [Libraries](../concepts/libraries.md). +Manage the project's library remotes. See [Libraries](/docs/concepts/libraries/). ### library add @@ -420,7 +423,7 @@ Providers: `anthropic`, `ollama`. `test` health-pings the configured provider. ## hook -Manage the git pre-commit drift hook. See the [Git drift hook guide](../guides/git-hook.md). +Manage the git pre-commit drift hook. See the [Git drift hook guide](/docs/guides/git-hook/). ``` adept hook install [--mode fail|fix] # Install a pre-commit hook that blocks commits on drift @@ -438,7 +441,7 @@ adept hook run [--fix] # Drift gate invoked by the installed ho The team **expertise billboard** — a request/answer board. One person hosts `serve`; everyone else registers with the bootstrap token and posts/answers requests. See -[Exchange](../exchange.md). A shared `--server ` flag applies to every client subcommand +[Exchange](/docs/exchange/). A shared `--server ` flag applies to every client subcommand (default: `$ADEPT_EXCHANGE_SERVER` or the last registered server). ### exchange serve diff --git a/site/src/content/docs/docs/reference/configuration.md b/site/src/content/docs/docs/reference/configuration.md new file mode 100644 index 0000000..6dc314c --- /dev/null +++ b/site/src/content/docs/docs/reference/configuration.md @@ -0,0 +1,82 @@ +--- +title: "Configuration reference" +description: "Every adept config key with its type, default, and effect, plus the LLM provider config and project vs global scope." +--- + +`adept config` reads and writes project settings. Sets are strict-typed: an invalid value fails +at parse time with the allowed list, so a typo never corrupts the config file. + +```bash +adept config list # all keys, current values, allowed values +adept config get mode # print one value +adept config set mode copy # set one value (validated) +adept config unset mode # clear back to default +``` + +Add `--json` to `list` for an array of `{key, value, allowed, help}` objects. + +## Keys + +Only the typed scalar keys below (plus the grouped `llm.*` fields) are exposed through +`config get/set`. Harness enablement lives under [`adept harness`](/docs/reference/commands/#harness) +and library remotes under [`adept library`](/docs/reference/commands/#library); they are stored +in the same file but managed by their own commands. + +| Key | Type | Default | Effect | +| --- | --- | --- | --- | +| `mode` | `symlink` \| `copy` | `symlink` | How canonical skills materialize into each harness: a symlink back to the canonical file, or a copied file. See [Layouts](/docs/concepts/layouts/). | +| `scan.onInstall` | `true` \| `false` | on when an LLM provider is configured | Run the safety scan and LLM intent pass before `skill install`. | +| `scan.blockSeverity` | `critical` \| `high` \| `medium` | `critical` | Lowest scan severity that aborts an install. | + +The `llm` provider is grouped. `config list` surfaces its three fields for a complete view, but +you set them through the `config llm` subcommand, not `config set`: + +| Key | Effect | +| --- | --- | +| `llm.provider` | Current provider name (`anthropic` or `ollama`), or `(unset)`. | +| `llm.model` | Model override; provider default when unset. | +| `llm.endpoint` | Endpoint override, for example a self-hosted Ollama. | + +## LLM provider config + +Safety scans can add an LLM intent pass on top of the static rules. `config llm` records which +provider to use. API keys are never stored in the config: they are read from the environment at +call time. + +```bash +export ANTHROPIC_API_KEY=sk-... +adept config llm set anthropic # provider: anthropic | ollama +adept config llm test # health-ping the configured provider +adept config llm unset # forget the provider + +# override the model or endpoint +adept config llm set anthropic --model claude-3-5-sonnet-latest +adept config llm set ollama --endpoint http://localhost:11434 +``` + +Supported providers are `anthropic` and `ollama`. Setting a provider flips `scan.onInstall` on +by default. See [Safety scans and LLM config](/docs/guides/safety-scans/) for how the pass is +used. + +## Scope: project vs global + +By default `config` operates on the current project. Pass `--global` to read or write the +home-level scope instead (the harness config adept applies outside any project): + +```bash +adept config list --global +adept config set mode copy --global +``` + +See [Scopes](/docs/concepts/scopes/) for when each applies. + +## Where config lives on disk + +Project config is a single JSON file at: + +``` +/.adeptability/config.json +``` + +It holds the typed keys above alongside harness state, materialization mode, and adapters. +Writes are atomic. Prefer the `config` commands over hand-editing so values stay validated. diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro new file mode 100644 index 0000000..239bbe8 --- /dev/null +++ b/site/src/pages/index.astro @@ -0,0 +1,528 @@ +--- +// adeptability landing page. Ported ~1:1 from the design reference. +// Self-hosted fonts (zero external requests) + scoped styles imported below. +import '@fontsource/space-grotesk/400.css'; +import '@fontsource/space-grotesk/500.css'; +import '@fontsource/space-grotesk/600.css'; +import '@fontsource/space-grotesk/700.css'; +import '@fontsource/jetbrains-mono/400.css'; +import '@fontsource/jetbrains-mono/500.css'; +import '@fontsource/jetbrains-mono/600.css'; +import '../styles/landing.css'; + +const title = 'adeptability: write an AI skill once, run it in every coding agent'; +const description = + 'adept lets you author an AI coding skill or subagent once, then render it accurately into Claude Code, Cursor, Copilot, Codex, OpenCode and 50+ more agents. Dotfiles for your AI coding agents.'; +const ogDescription = + 'One source of truth. The right on-disk format everywhere. Author a skill or subagent once and adept renders it into every coding agent.'; +const canonical = 'https://adeptability.itaywol.tools/'; +const socialCard = `${canonical}social-card.png`; + +// Structured data for search engines and AI answer engines. Everything here is +// factual: nothing invented. price 0 + MIT license reflect the open-source project. +const jsonLd = { + '@context': 'https://schema.org', + '@type': 'SoftwareApplication', + name: 'adeptability', + alternateName: 'adept', + applicationCategory: 'DeveloperApplication', + operatingSystem: 'macOS, Linux, Windows', + description: + 'Open-source Go CLI that lets you author an AI coding skill or subagent once, then render it accurately into Claude Code, Cursor, GitHub Copilot, OpenAI Codex, OpenCode, and 50+ other AI coding agents.', + url: canonical, + downloadUrl: 'https://github.com/itaywol/adeptability/releases', + softwareHelp: 'https://adeptability.itaywol.tools/docs/', + license: 'https://opensource.org/licenses/MIT', + isAccessibleForFree: true, + programmingLanguage: 'Go', + codeRepository: 'https://github.com/itaywol/adeptability', + offers: { + '@type': 'Offer', + price: '0', + priceCurrency: 'USD', + }, + sameAs: ['https://github.com/itaywol/adeptability'], + author: { + '@type': 'Person', + name: 'Itay Wolfish', + url: 'https://itaywol.com', + sameAs: [ + 'https://itaywol.com', + 'https://www.linkedin.com/in/itaywolfish/', + 'https://github.com/itaywol', + ], + }, +}; +--- + + + + + + + {title} + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/src/styles/landing.css b/site/src/styles/landing.css new file mode 100644 index 0000000..0706989 --- /dev/null +++ b/site/src/styles/landing.css @@ -0,0 +1,542 @@ +/* ============================================================================ + adeptability - landing.css + Dark, terminal-native landing page. Ported from the design reference. + Fonts are self-hosted via @fontsource (imported from the page) - no external + requests. Light JS only for clipboard copy. + ========================================================================== */ + +/* ============================================================================ + DESIGN TOKENS + ========================================================================== */ +:root { + /* --- Ink / surfaces (derived from the logo's deep navy #131C2B) --- */ + --ink: #0b111b; /* page background */ + --ink-1: #0f1725; /* elevated panel */ + --ink-2: #131d2e; /* card */ + --ink-3: #18243a; /* raised / terminal window */ + --ink-inset: #080d15; /* code wells */ + + /* --- Foreground --- */ + --fg: #eaf0f8; + --fg-muted: #9db0c6; + --fg-dim: #64788f; + + /* --- Lines --- */ + --line: rgba(148, 173, 210, 0.12); + --line-2: rgba(148, 173, 210, 0.20); + + /* --- Brand accents (gold, matched to the neon-gold logo) --- */ + /* Token names kept so every var(--spark)/var(--iris) caller follows the + retheme automatically. Values are now the gold family, varied by lightness: + pale #ffd77a · core #f6c667 · deep #e0a43b · depth #c98a2e */ + --iris: #e0a43b; /* deep gold - secondary accent */ + --iris-bright:#ffd77a; /* pale gold - highlight end of gradients */ + --iris-dim: #c98a2e; /* dark gold - strokes / outlines */ + --spark: #f6c667; /* core gold - primary bright accent */ + --spark-dim: #c98a2e; /* dark gold */ + + /* --- Prism: per-harness hues for the fan-out motif --- + Full gold monochrome, varied lightness (pale -> deep) so the six beams read + as one gold system while still separating each harness node. */ + --h-claude: #ffe0a3; /* pale */ + --h-cursor: #ffd77a; + --h-codex: #f6c667; /* core */ + --h-copilot: #edba55; + --h-opencode: #e0a43b; + --h-more: #c98a2e; /* deep */ + + /* --- Feedback --- */ + --ok: #7ed992; + + /* --- Type --- */ + --font-sans: 'Space Grotesk', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; + --font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', 'Cascadia Code', Menlo, monospace; + + --step--1: clamp(0.78rem, 0.76rem + 0.1vw, 0.84rem); + --step-0: clamp(0.95rem, 0.92rem + 0.15vw, 1.02rem); + --step-1: clamp(1.1rem, 1.02rem + 0.4vw, 1.3rem); + --step-2: clamp(1.35rem, 1.2rem + 0.7vw, 1.75rem); + --step-3: clamp(1.7rem, 1.4rem + 1.4vw, 2.6rem); + --step-4: clamp(2.4rem, 1.8rem + 3vw, 4.4rem); + + /* --- Spacing (4px base) --- */ + --sp-1: 0.25rem; --sp-2: 0.5rem; --sp-3: 0.75rem; --sp-4: 1rem; + --sp-6: 1.5rem; --sp-8: 2rem; --sp-12: 3rem; --sp-16: 4rem; + --sp-24: 6rem; --sp-32: 8rem; + + /* --- Radii --- */ + --r-sm: 8px; --r-md: 12px; --r-lg: 18px; --r-xl: 26px; --r-pill: 999px; + + /* --- Elevation --- */ + --shadow-sm: 0 1px 2px rgba(0,0,0,.4); + --shadow-md: 0 12px 30px -12px rgba(0,0,0,.7); + --shadow-glow: 0 0 0 1px rgba(224,164,59,.25), 0 20px 60px -24px rgba(246,198,103,.35); + + --container: 1120px; + --transition: 200ms cubic-bezier(.2,.7,.3,1); +} + +/* ============================================================================ + RESET / BASE + ========================================================================== */ +*, *::before, *::after { box-sizing: border-box; } +* { margin: 0; } + +html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; } +@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } } + +body { + font-family: var(--font-sans); + font-size: var(--step-0); + line-height: 1.65; + color: var(--fg); + background: var(--ink); + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + overflow-x: hidden; +} + +/* Ambient background: hex-dot grid + two soft accent auroras. Purely decorative. */ +body::before { + content: ""; + position: fixed; + inset: 0; + z-index: -2; + background: + radial-gradient(650px 420px at 82% -6%, rgba(224,164,59,.16), transparent 70%), + radial-gradient(720px 520px at 6% 8%, rgba(246,198,103,.10), transparent 68%), + var(--ink); +} +body::after { + content: ""; + position: fixed; + inset: 0; + z-index: -1; + background-image: radial-gradient(rgba(157,176,198,.13) 1px, transparent 1.4px); + background-size: 26px 26px; + mask-image: radial-gradient(120% 90% at 50% 0%, #000 30%, transparent 78%); + opacity: .5; +} + +img, svg { display: block; max-width: 100%; } +a { color: inherit; text-decoration: none; } + +h1, h2, h3 { line-height: 1.08; letter-spacing: -0.02em; font-weight: 600; } + +::selection { background: rgba(246,198,103,.35); color: #fff; } + +:focus-visible { + outline: 2px solid var(--spark); + outline-offset: 3px; + border-radius: 4px; +} + +.skip-link { + position: absolute; left: 12px; top: -60px; + background: var(--iris); color: #0b111b; font-weight: 600; + padding: 10px 16px; border-radius: var(--r-sm); z-index: 200; + transition: top var(--transition); +} +.skip-link:focus { top: 12px; } + +/* ============================================================================ + LAYOUT PRIMITIVES + ========================================================================== */ +.container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--sp-6); } +section { padding-block: var(--sp-24); } +@media (max-width: 640px) { section { padding-block: var(--sp-16); } } + +.eyebrow { + font-family: var(--font-mono); + font-size: var(--step--1); + letter-spacing: 0.02em; + color: var(--spark); + display: inline-flex; align-items: center; gap: var(--sp-2); +} +.eyebrow::before { content: "//"; color: var(--iris); opacity: .8; } + +.section-head { max-width: 62ch; margin-bottom: var(--sp-12); } +.section-head h2 { font-size: var(--step-3); margin-top: var(--sp-3); } +.section-head p { color: var(--fg-muted); margin-top: var(--sp-4); font-size: var(--step-1); } + +/* ============================================================================ + BUTTONS + ========================================================================== */ +.btn { + display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-2); + font-family: var(--font-sans); font-weight: 600; font-size: var(--step-0); + padding: 0.72em 1.3em; border-radius: var(--r-pill); + border: 1px solid transparent; cursor: pointer; + transition: transform var(--transition), background var(--transition), box-shadow var(--transition), border-color var(--transition); + white-space: nowrap; +} +.btn:active { transform: translateY(1px); } + +.btn--primary { + color: #0a0f18; + background: linear-gradient(135deg, var(--iris-bright), var(--spark) 45%, var(--iris)); + box-shadow: 0 10px 30px -10px rgba(246,198,103,.5); +} +.btn--primary:hover { transform: translateY(-2px); box-shadow: 0 16px 40px -12px rgba(224,164,59,.6); } + +.btn--ghost { + color: var(--fg); + background: rgba(148,173,210,.06); + border-color: var(--line-2); +} +.btn--ghost:hover { border-color: var(--iris); background: rgba(246,198,103,.12); transform: translateY(-2px); } + +.btn svg { width: 1.15em; height: 1.15em; } + +/* ============================================================================ + HEADER / NAV + ========================================================================== */ +.site-header { + position: sticky; top: 0; z-index: 100; + backdrop-filter: blur(12px); + background: color-mix(in oklab, var(--ink) 72%, transparent); + border-bottom: 1px solid var(--line); +} +.nav { display: flex; align-items: center; gap: var(--sp-6); height: 64px; } +.brand { display: inline-flex; align-items: center; gap: var(--sp-3); font-weight: 700; letter-spacing: -0.03em; font-size: 1.15rem; } +.brand .mark { width: 30px; height: 30px; } +.nav__links { display: flex; align-items: center; gap: var(--sp-6); margin-left: auto; } +.nav__links a { color: var(--fg-muted); font-size: var(--step-0); transition: color var(--transition); } +.nav__links a:hover { color: var(--fg); } +.nav .btn { padding: 0.5em 1em; } +@media (max-width: 760px) { + .nav__links a.nav-hide { display: none; } +} + +/* ---- Logo mark (inline SVG) - neon gold outline ---- */ +.mark .hex { fill: #131C2B; stroke: url(#goldStroke); stroke-width: 0.9; stroke-linejoin: round; } +.mark .spark { fill: #f6c667; } +/* blurred underlay = the glow */ +.mark .hexGlow { fill: none; stroke: #f6c667; stroke-width: 1.5; stroke-linejoin: round; } +.mark .sparkGlow { fill: #f6c667; } + +/* ============================================================================ + HERO + ========================================================================== */ +.hero { padding-top: var(--sp-16); padding-bottom: var(--sp-16); } +.hero__grid { + display: grid; + grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); + gap: var(--sp-12); + align-items: center; +} +@media (max-width: 900px) { .hero__grid { grid-template-columns: 1fr; gap: var(--sp-16); } } + +.hero h1 { + font-size: var(--step-4); + font-weight: 700; + margin-top: var(--sp-4); + max-width: 15ch; +} +.hero h1 .grad { + background: linear-gradient(100deg, var(--iris-bright), var(--spark) 45%, var(--iris)); + -webkit-background-clip: text; background-clip: text; color: transparent; +} +.hero__sub { color: var(--fg-muted); font-size: var(--step-1); margin-top: var(--sp-6); max-width: 52ch; } +.hero__cta { display: flex; flex-wrap: wrap; gap: var(--sp-4); margin-top: var(--sp-8); } +.hero__meta { + margin-top: var(--sp-8); display: flex; flex-wrap: wrap; gap: var(--sp-4) var(--sp-6); + font-family: var(--font-mono); font-size: var(--step--1); color: var(--fg-dim); +} +.hero__meta span { display: inline-flex; align-items: center; gap: var(--sp-2); } +.hero__meta b { color: var(--spark); font-weight: 500; } + +/* ============================================================================ + FAN-OUT MOTIF (hero signature) - pure SVG + CSS + ========================================================================== */ +.fanout { + position: relative; + width: 100%; + filter: drop-shadow(0 30px 60px rgba(0,0,0,.5)); +} +.fanout svg { width: 100%; height: auto; overflow: visible; } + +/* source + target nodes */ +.fo-node { fill: var(--ink-2); stroke: var(--line-2); stroke-width: 1; } +.fo-source { fill: url(#srcGrad); stroke: rgba(224,164,59,.5); } +.fo-label { font-family: var(--font-mono); font-size: 12px; fill: var(--fg); } +.fo-sub { font-family: var(--font-mono); font-size: 10px; fill: var(--fg-dim); } +.fo-title { font-family: var(--font-mono); font-size: 11px; font-weight: 600; } + +/* beams */ +.fo-beam { fill: none; stroke-width: 1.6; opacity: .9; stroke-linecap: round; + stroke-dasharray: 6 7; } + +/* animated packets travelling each beam */ +.fo-packet { r: 3.2; opacity: 0; } + +/* sparkle at source */ +.fo-star { fill: var(--spark); transform-box: fill-box; transform-origin: center; } + +@media (prefers-reduced-motion: no-preference) { + .fo-beam { animation: beamFlow 2.4s linear infinite; } + .fo-packet { animation: packet 2.8s ease-in-out infinite; } + .fo-star { animation: twinkle 3s ease-in-out infinite; } + .fo-target { animation: nodeIn 2.8s ease-in-out infinite; } + .fo-b1,.fo-t1,.fo-p1 { animation-delay: 0s; } + .fo-b2,.fo-t2,.fo-p2 { animation-delay: .28s; } + .fo-b3,.fo-t3,.fo-p3 { animation-delay: .56s; } + .fo-b4,.fo-t4,.fo-p4 { animation-delay: .84s; } + .fo-b5,.fo-t5,.fo-p5 { animation-delay: 1.12s; } + .fo-b6,.fo-t6,.fo-p6 { animation-delay: 1.4s; } +} +@keyframes beamFlow { to { stroke-dashoffset: -26; } } +@keyframes packet { + 0% { opacity: 0; } + 8% { opacity: 1; } + 50% { opacity: 1; } + 60% { opacity: 0; } + 100% { opacity: 0; } +} +@keyframes twinkle { + 0%,100% { transform: scale(1) rotate(0deg); opacity: .85; } + 50% { transform: scale(1.18) rotate(45deg); opacity: 1; } +} +@keyframes nodeIn { + 0%,100% { opacity: .78; } + 50% { opacity: 1; } +} +/* offset moving packets along their paths via CSS motion path set inline per node */ + +/* ============================================================================ + TERMINAL WINDOW (demo gifs) + ========================================================================== */ +.window { + border-radius: var(--r-lg); + border: 1px solid var(--line-2); + background: var(--ink-3); + box-shadow: var(--shadow-md); + overflow: hidden; +} +.window__bar { + display: flex; align-items: center; gap: var(--sp-3); + padding: 0.7rem var(--sp-4); + background: rgba(8,13,21,.6); + border-bottom: 1px solid var(--line); +} +.window__dots { display: inline-flex; gap: 7px; } +.window__dots i { width: 11px; height: 11px; border-radius: 50%; display: block; } +.window__dots i:nth-child(1) { background: #ff5f57; } +.window__dots i:nth-child(2) { background: #febc2e; } +.window__dots i:nth-child(3) { background: #28c840; } +.window__title { font-family: var(--font-mono); font-size: var(--step--1); color: var(--fg-dim); margin-inline: auto; padding-right: 44px; } +.window__body { padding: 0; background: var(--ink-inset); } +.window__body img { width: 100%; height: auto; } + +.hero-demo { margin-top: var(--sp-16); max-width: 820px; margin-inline: auto; } +.hero-demo .cap { + text-align: center; margin-top: var(--sp-4); + font-family: var(--font-mono); font-size: var(--step--1); color: var(--fg-dim); +} + +/* ============================================================================ + INSTALL + ========================================================================== */ +.install__grid { + display: grid; + grid-template-columns: repeat(6, 1fr); + gap: var(--sp-4); +} +/* Go card spans wider as the recommended path */ +.install__grid .card:nth-child(1) { grid-column: span 3; } +.install__grid .card:nth-child(2) { grid-column: span 3; } +.install__grid .card:nth-child(3) { grid-column: span 2; } +.install__grid .card:nth-child(4) { grid-column: span 2; } +.install__grid .card:nth-child(5) { grid-column: span 2; } +@media (max-width: 900px) { + .install__grid { grid-template-columns: 1fr 1fr; } + .install__grid .card { grid-column: auto !important; } +} +@media (max-width: 560px) { + .install__grid { grid-template-columns: 1fr; } +} + +.card { + background: linear-gradient(180deg, var(--ink-2), var(--ink-1)); + border: 1px solid var(--line); + border-radius: var(--r-lg); + padding: var(--sp-6); + display: flex; flex-direction: column; gap: var(--sp-4); + transition: border-color var(--transition), transform var(--transition), box-shadow var(--transition); +} +.card:hover { border-color: var(--line-2); transform: translateY(-3px); box-shadow: var(--shadow-md); } + +.card__head { display: flex; align-items: center; gap: var(--sp-3); } +.card__badge { + font-family: var(--font-mono); font-size: 0.7rem; font-weight: 600; + width: 34px; height: 34px; display: grid; place-items: center; + border-radius: var(--r-sm); background: rgba(246,198,103,.12); + color: var(--iris-bright); border: 1px solid rgba(246,198,103,.25); +} +.card__title { font-weight: 600; font-size: var(--step-1); } +.card__note { font-family: var(--font-mono); font-size: var(--step--1); color: var(--fg-dim); margin-left: auto; } + +.codeblock { + position: relative; + background: var(--ink-inset); + border: 1px solid var(--line); + border-radius: var(--r-md); + padding: var(--sp-4) var(--sp-6) var(--sp-4) var(--sp-4); + overflow-x: auto; + margin-top: auto; +} +.codeblock code { + font-family: var(--font-mono); font-size: var(--step--1); line-height: 1.6; + color: var(--fg); white-space: pre; display: block; +} +.codeblock .tok-prompt { color: var(--spark); user-select: none; } +.codeblock .tok-cmd { color: var(--iris-bright); } +.codeblock .tok-arg { color: var(--fg-muted); } +.copy-btn { + position: absolute; top: 8px; right: 8px; + background: rgba(148,173,210,.08); border: 1px solid var(--line-2); + color: var(--fg-muted); border-radius: 6px; cursor: pointer; + width: 30px; height: 30px; display: grid; place-items: center; + transition: all var(--transition); +} +.copy-btn:hover { color: var(--spark); border-color: var(--spark); background: rgba(246,198,103,.1); } +.copy-btn svg { width: 15px; height: 15px; } +.copy-btn.copied { color: var(--ok); border-color: var(--ok); } + +.install__foot { + margin-top: var(--sp-8); text-align: center; + color: var(--fg-dim); font-size: var(--step-0); +} +.install__foot a { color: var(--spark); border-bottom: 1px solid transparent; } +.install__foot a:hover { border-color: var(--spark); } + +/* ============================================================================ + HOW IT WORKS + ========================================================================== */ +.steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-6); } +@media (max-width: 820px) { .steps { grid-template-columns: 1fr; } } + +.step { + position: relative; + border: 1px solid var(--line); + border-radius: var(--r-lg); + background: linear-gradient(180deg, var(--ink-2), var(--ink-1)); + padding: var(--sp-8) var(--sp-6) var(--sp-6); + overflow: hidden; +} +.step::before { + content: ""; + position: absolute; inset: 0 0 auto 0; height: 3px; + background: linear-gradient(90deg, var(--spark), var(--iris)); + opacity: .8; +} +.step__num { + font-family: var(--font-mono); font-size: 2.6rem; font-weight: 700; + color: transparent; -webkit-text-stroke: 1.4px var(--iris-dim); + line-height: 1; letter-spacing: -0.04em; +} +.step h3 { font-size: var(--step-2); margin-top: var(--sp-4); } +.step p { color: var(--fg-muted); margin-top: var(--sp-3); font-size: var(--step-0); } +.step code, .step .kbd { + font-family: var(--font-mono); font-size: 0.85em; + background: var(--ink-inset); border: 1px solid var(--line); + padding: 0.1em 0.45em; border-radius: 5px; color: var(--spark); +} +.step__list { list-style: none; padding: 0; margin-top: var(--sp-4); display: flex; flex-wrap: wrap; gap: var(--sp-2); } +.step__list li { + font-family: var(--font-mono); font-size: 0.72rem; + padding: 0.25em 0.6em; border-radius: var(--r-pill); + border: 1px solid var(--line-2); color: var(--fg-muted); +} + +.punchline { + margin-top: var(--sp-12); + text-align: center; + font-size: var(--step-2); + font-weight: 600; + letter-spacing: -0.02em; +} +.punchline .grad { + background: linear-gradient(100deg, var(--iris-bright), var(--spark) 50%, var(--iris)); + -webkit-background-clip: text; background-clip: text; color: transparent; +} +.punchline::before, .punchline::after { color: var(--iris-dim); font-family: var(--font-mono); } +.punchline::before { content: "❯ "; } + +/* ============================================================================ + MORE DEMOS + ========================================================================== */ +.demos { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-8); } +@media (max-width: 820px) { .demos { grid-template-columns: 1fr; } } +.demo figure { margin: 0; } +.demo figcaption { + margin-top: var(--sp-4); + color: var(--fg-muted); font-size: var(--step-0); +} +.demo figcaption b { color: var(--fg); font-weight: 600; } + +/* ============================================================================ + GOODIES STRIP + ========================================================================== */ +.goodies { + border-top: 1px solid var(--line); + border-bottom: 1px solid var(--line); + background: linear-gradient(180deg, rgba(246,198,103,.05), transparent); +} +.goodies__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--sp-4); } +@media (max-width: 760px) { .goodies__grid { grid-template-columns: 1fr 1fr; } } +@media (max-width: 460px) { .goodies__grid { grid-template-columns: 1fr; } } +.goody { + display: flex; align-items: center; gap: var(--sp-4); + padding: var(--sp-6); + border: 1px solid var(--line); + border-radius: var(--r-lg); + background: var(--ink-1); + transition: border-color var(--transition), transform var(--transition), background var(--transition); +} +.goody:hover { border-color: var(--iris); transform: translateY(-3px); background: var(--ink-2); } +.goody__icon { + width: 40px; height: 40px; flex: none; border-radius: var(--r-sm); + display: grid; place-items: center; + background: rgba(246,198,103,.1); color: var(--spark); + border: 1px solid rgba(246,198,103,.25); +} +.goody__icon svg { width: 20px; height: 20px; } +.goody__text b { display: block; font-weight: 600; } +.goody__text span { color: var(--fg-dim); font-size: var(--step--1); font-family: var(--font-mono); } +.goody__arrow { margin-left: auto; color: var(--fg-dim); transition: transform var(--transition), color var(--transition); } +.goody:hover .goody__arrow { color: var(--spark); transform: translateX(3px); } + +/* ============================================================================ + FOOTER + ========================================================================== */ +.site-footer { padding-block: var(--sp-16) var(--sp-12); } +.footer__top { + display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; + gap: var(--sp-8); padding-bottom: var(--sp-8); + border-bottom: 1px solid var(--line); +} +.footer__brand { display: flex; align-items: center; gap: var(--sp-3); } +.footer__brand .mark { width: 30px; height: 30px; } +.footer__brand b { font-weight: 700; letter-spacing: -0.03em; } +.footer__tag { color: var(--fg-dim); font-family: var(--font-mono); font-size: var(--step--1); } +.footer__links { display: flex; flex-wrap: wrap; gap: var(--sp-6); } +.footer__links a { color: var(--fg-muted); transition: color var(--transition); display: inline-flex; align-items: center; gap: var(--sp-2); } +.footer__links a:hover { color: var(--spark); } +.footer__links svg { width: 16px; height: 16px; } +.footer__bottom { + display: flex; flex-wrap: wrap; gap: var(--sp-4); justify-content: space-between; + padding-top: var(--sp-6); + color: var(--fg-dim); font-family: var(--font-mono); font-size: var(--step--1); +} +.footer__bottom .license { display: inline-flex; align-items: center; gap: var(--sp-2); } +.footer__bottom .license b { color: var(--fg-muted); font-weight: 500; } + +/* ============================================================================ + MOTION SAFETY + ========================================================================== */ +@media (prefers-reduced-motion: reduce) { + * { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; } + .fo-packet { opacity: 0; } + .fo-star { opacity: .9; } +} diff --git a/site/src/styles/starlight-gold.css b/site/src/styles/starlight-gold.css new file mode 100644 index 0000000..20ea107 --- /dev/null +++ b/site/src/styles/starlight-gold.css @@ -0,0 +1,25 @@ +/* ============================================================================ + adeptability - starlight-gold.css + Retheme the Starlight docs accent from the default blue to the gold family + used across the landing page and the neon-gold logo. + Gold ramp: pale #ffd77a · core #f6c667 · deep #e0a43b · depth #c98a2e + Only the accent custom properties are overridden; Starlight's dark navy + surfaces and neutral grays are left untouched. + ========================================================================== */ + +/* Dark theme (Starlight default). Accent text sits on near-black surfaces, so + the high tone is a pale gold with strong contrast; the low tone is a deep + amber used for subtle backgrounds and active-item fills. */ +:root { + --sl-color-accent-low: #3f2f0b; + --sl-color-accent: #c08a1e; + --sl-color-accent-high: #f4d489; +} + +/* Light theme. Accent text sits on white, so the high tone is a deep gold and + the low tone is a pale wash. */ +:root[data-theme="light"] { + --sl-color-accent-low: #ffedc7; + --sl-color-accent: #9a6c11; + --sl-color-accent-high: #4d360a; +} diff --git a/site/tsconfig.json b/site/tsconfig.json new file mode 100644 index 0000000..8bf91d3 --- /dev/null +++ b/site/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +} diff --git a/site/wrangler.jsonc b/site/wrangler.jsonc new file mode 100644 index 0000000..f44991e --- /dev/null +++ b/site/wrangler.jsonc @@ -0,0 +1,15 @@ +{ + "$schema": "node_modules/wrangler/config-schema.json", + "name": "adeptability-site", + "compatibility_date": "2026-07-01", + "assets": { + "directory": "./dist", + "not_found_handling": "404-page" + }, + "routes": [ + { + "pattern": "adeptability.itaywol.tools", + "custom_domain": true + } + ] +}