From 25543bbb14dcfc269fb76f583adbb725918c2e55 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Sun, 5 Apr 2026 19:55:07 -0400 Subject: [PATCH 1/7] Add afdocs docs site --- .gitignore | 1 + README.md | 354 +-- docs/.vitepress/config.ts | 113 + docs/.vitepress/theme/HomeLayout.vue | 22 + .../theme/components/HeroScorecard.vue | 75 + .../theme/components/LlmsDirective.vue | 6 + docs/.vitepress/theme/index.ts | 7 + docs/about.md | 72 + docs/agent-score-calculation.md | 201 ++ docs/checks/authentication.md | 102 + docs/checks/content-discoverability.md | 223 ++ docs/checks/content-structure.md | 92 + docs/checks/index.md | 51 + docs/checks/markdown-availability.md | 73 + docs/checks/observability.md | 96 + docs/checks/page-size.md | 143 + docs/checks/url-stability.md | 72 + docs/ci-integration.md | 189 ++ docs/generate_llms_txt | 67 + docs/improve-your-score.md | 136 + docs/index.md | 84 + docs/interaction-diagnostics.md | 65 + docs/logos/afdoc_logo_dark.svg | 1 + docs/logos/afdoc_logo_light.svg | 1 + docs/package-lock.json | 2516 +++++++++++++++++ docs/package.json | 13 + docs/public/.htaccess | 49 + docs/public/favicons/android-icon-144x144.png | Bin 0 -> 21093 bytes docs/public/favicons/android-icon-192x192.png | Bin 0 -> 27953 bytes docs/public/favicons/android-icon-36x36.png | Bin 0 -> 4577 bytes docs/public/favicons/android-icon-48x48.png | Bin 0 -> 6480 bytes docs/public/favicons/android-icon-72x72.png | Bin 0 -> 10093 bytes docs/public/favicons/android-icon-96x96.png | Bin 0 -> 13756 bytes docs/public/favicons/apple-icon-114x114.png | Bin 0 -> 16509 bytes docs/public/favicons/apple-icon-120x120.png | Bin 0 -> 17268 bytes docs/public/favicons/apple-icon-144x144.png | Bin 0 -> 21093 bytes docs/public/favicons/apple-icon-152x152.png | Bin 0 -> 21930 bytes docs/public/favicons/apple-icon-180x180.png | Bin 0 -> 26282 bytes docs/public/favicons/apple-icon-57x57.png | Bin 0 -> 7763 bytes docs/public/favicons/apple-icon-60x60.png | Bin 0 -> 8229 bytes docs/public/favicons/apple-icon-72x72.png | Bin 0 -> 10093 bytes docs/public/favicons/apple-icon-76x76.png | Bin 0 -> 10703 bytes .../favicons/apple-icon-precomposed.png | Bin 0 -> 27953 bytes docs/public/favicons/apple-icon.png | Bin 0 -> 27953 bytes docs/public/favicons/browserconfig.xml | 2 + docs/public/favicons/favicon-16x16.png | Bin 0 -> 1703 bytes docs/public/favicons/favicon-32x32.png | Bin 0 -> 3899 bytes docs/public/favicons/favicon-96x96.png | Bin 0 -> 13756 bytes docs/public/favicons/favicon.ico | Bin 0 -> 1150 bytes docs/public/favicons/ms-icon-144x144.png | Bin 0 -> 21093 bytes docs/public/favicons/ms-icon-150x150.png | Bin 0 -> 22060 bytes docs/public/favicons/ms-icon-310x310.png | Bin 0 -> 45725 bytes docs/public/favicons/ms-icon-70x70.png | Bin 0 -> 9508 bytes docs/public/llms.txt | 39 + docs/public/log-agent-signal.php | 98 + docs/public/logos/afdoc_logo_dark.svg | 1 + docs/public/logos/afdoc_logo_light.svg | 1 + docs/quick-start.md | 149 + docs/reference/cli.md | 129 + docs/reference/config-file.md | 81 + docs/reference/index.md | 6 + docs/reference/programmatic-api.md | 96 + docs/reference/scoring-api.md | 72 + docs/run-locally.md | 92 + docs/what-is-agent-score.md | 90 + docs/why-agent-friendliness-matters.md | 80 + package.json | 5 +- 67 files changed, 5435 insertions(+), 330 deletions(-) create mode 100644 docs/.vitepress/config.ts create mode 100644 docs/.vitepress/theme/HomeLayout.vue create mode 100644 docs/.vitepress/theme/components/HeroScorecard.vue create mode 100644 docs/.vitepress/theme/components/LlmsDirective.vue create mode 100644 docs/.vitepress/theme/index.ts create mode 100644 docs/about.md create mode 100644 docs/agent-score-calculation.md create mode 100644 docs/checks/authentication.md create mode 100644 docs/checks/content-discoverability.md create mode 100644 docs/checks/content-structure.md create mode 100644 docs/checks/index.md create mode 100644 docs/checks/markdown-availability.md create mode 100644 docs/checks/observability.md create mode 100644 docs/checks/page-size.md create mode 100644 docs/checks/url-stability.md create mode 100644 docs/ci-integration.md create mode 100755 docs/generate_llms_txt create mode 100644 docs/improve-your-score.md create mode 100644 docs/index.md create mode 100644 docs/interaction-diagnostics.md create mode 100644 docs/logos/afdoc_logo_dark.svg create mode 100644 docs/logos/afdoc_logo_light.svg create mode 100644 docs/package-lock.json create mode 100644 docs/package.json create mode 100644 docs/public/.htaccess create mode 100644 docs/public/favicons/android-icon-144x144.png create mode 100644 docs/public/favicons/android-icon-192x192.png create mode 100644 docs/public/favicons/android-icon-36x36.png create mode 100644 docs/public/favicons/android-icon-48x48.png create mode 100644 docs/public/favicons/android-icon-72x72.png create mode 100644 docs/public/favicons/android-icon-96x96.png create mode 100644 docs/public/favicons/apple-icon-114x114.png create mode 100644 docs/public/favicons/apple-icon-120x120.png create mode 100644 docs/public/favicons/apple-icon-144x144.png create mode 100644 docs/public/favicons/apple-icon-152x152.png create mode 100644 docs/public/favicons/apple-icon-180x180.png create mode 100644 docs/public/favicons/apple-icon-57x57.png create mode 100644 docs/public/favicons/apple-icon-60x60.png create mode 100644 docs/public/favicons/apple-icon-72x72.png create mode 100644 docs/public/favicons/apple-icon-76x76.png create mode 100644 docs/public/favicons/apple-icon-precomposed.png create mode 100644 docs/public/favicons/apple-icon.png create mode 100644 docs/public/favicons/browserconfig.xml create mode 100644 docs/public/favicons/favicon-16x16.png create mode 100644 docs/public/favicons/favicon-32x32.png create mode 100644 docs/public/favicons/favicon-96x96.png create mode 100644 docs/public/favicons/favicon.ico create mode 100644 docs/public/favicons/ms-icon-144x144.png create mode 100644 docs/public/favicons/ms-icon-150x150.png create mode 100644 docs/public/favicons/ms-icon-310x310.png create mode 100644 docs/public/favicons/ms-icon-70x70.png create mode 100644 docs/public/llms.txt create mode 100644 docs/public/log-agent-signal.php create mode 100644 docs/public/logos/afdoc_logo_dark.svg create mode 100644 docs/public/logos/afdoc_logo_light.svg create mode 100644 docs/quick-start.md create mode 100644 docs/reference/cli.md create mode 100644 docs/reference/config-file.md create mode 100644 docs/reference/index.md create mode 100644 docs/reference/programmatic-api.md create mode 100644 docs/reference/scoring-api.md create mode 100644 docs/run-locally.md create mode 100644 docs/what-is-agent-score.md create mode 100644 docs/why-agent-friendliness-matters.md diff --git a/.gitignore b/.gitignore index 4a3a638..b21362f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules/ dist/ coverage/ *.tsbuildinfo +docs/.vitepress/cache/ .DS_Store diff --git a/README.md b/README.md index a03ba8e..5befe4a 100644 --- a/README.md +++ b/README.md @@ -1,148 +1,26 @@ -# afdocs +

+ AFDocs logo +

-[![CI](https://github.com/agent-ecosystem/afdocs/actions/workflows/ci.yml/badge.svg)](https://github.com/agent-ecosystem/afdocs/actions/workflows/ci.yml) -[![npm](https://img.shields.io/npm/v/afdocs)](https://www.npmjs.com/package/afdocs) +

AFDocs

-Test your documentation site against the [Agent-Friendly Documentation Spec](https://agentdocsspec.com). +

+ CI + npm +

-Agents don't use docs like humans. They hit truncation limits, get walls of CSS instead of content, can't follow cross-host redirects, and don't know about quality-of-life improvements like `llms.txt` or `.md` docs pages that would make life swell. Maybe this is because the industry has lacked guidance - until now. - -afdocs runs 22 checks across 7 categories to evaluate how well your docs serve agent consumers. +Test your documentation site against the [Agent-Friendly Documentation Spec](https://agentdocsspec.com). AFDocs runs 22 checks across 7 categories to measure how well AI coding agents can discover, navigate, and consume your docs. > **Status: Early development (0.x)** -> This project is under active development. Check IDs, CLI flags, and output formats may change between minor versions. Feel free to try it out, but don't build automation against specific output until 1.0. -> +> Check IDs, CLI flags, and output formats may change between minor versions. > Implements [spec v0.3.0](https://agentdocsspec.com/spec) (2026-03-31). ## Quick start ```bash -npx afdocs check https://docs.example.com -``` - -Example output: - -``` -Agent-Friendly Docs Check: https://react.dev - -content-discoverability - ✓ llms-txt-exists: llms.txt found at 1 location(s) - ✓ llms-txt-valid: llms.txt follows the proposed structure - ✓ llms-txt-size: llms.txt is 14,347 characters (under 50,000 threshold) - ✓ llms-txt-links-resolve: All 50 tested links resolve (177 total links) - ✓ llms-txt-links-markdown: 50/50 links point to markdown content (100%) - -Markdown Availability - ✗ content-negotiation: Server ignores Accept: text/markdown header (0/50 sampled pages return markdown) - ✗ markdown-url-support: No sampled pages support .md URLs (0/50 tested) - -URL Stability - ✓ http-status-codes: All 50 sampled pages return proper error codes for bad URLs - -Authentication - ✓ auth-gate-detection: All 50 sampled pages are publicly accessible - -Summary - 9 passed, 3 failed, 10 skipped (22 total) -``` - -## Install - -```bash -npm install afdocs +npx afdocs check https://docs.example.com --format scorecard ``` -## CLI usage - -```bash -# Run all checks -afdocs check https://docs.example.com - -# Run specific checks -afdocs check https://docs.example.com --checks llms-txt-exists,llms-txt-valid,llms-txt-size - -# JSON output -afdocs check https://docs.example.com --format json - -# Scorecard with overall score, category scores, and fix suggestions -afdocs check https://docs.example.com --format scorecard - -# Add fix suggestions to the standard text output -afdocs check https://docs.example.com --fixes - -# JSON output with scoring data -afdocs check https://docs.example.com --format json --score - -# Adjust thresholds -afdocs check https://docs.example.com --pass-threshold 30000 --fail-threshold 80000 -``` - -### Options - -| Option | Default | Description | -| ----------------------- | -------- | ----------------------------------------------------- | -| `--format ` | `text` | Output format: `text`, `json`, or `scorecard` | -| `-v, --verbose` | | Show per-page details for checks with issues | -| `--fixes` | | Show fix suggestions for warn/fail checks (text mode) | -| `--score` | | Include scoring data in JSON output | -| `--checks ` | all | Comma-separated list of check IDs | -| `--sampling ` | `random` | URL sampling strategy (see below) | -| `--max-concurrency ` | `3` | Maximum concurrent HTTP requests | -| `--request-delay ` | `200` | Delay between requests | -| `--max-links ` | `50` | Maximum links to test in link checks | -| `--pass-threshold ` | `50000` | Size pass threshold (characters) | -| `--fail-threshold ` | `100000` | Size fail threshold (characters) | - -### Sampling strategies - -By default, afdocs discovers pages from your site (via `llms.txt`, sitemap, or both) and randomly samples up to `--max-links` pages to check. The `--sampling` flag gives you control over how that sample is selected. - -| Strategy | Behavior | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `random` | Shuffle discovered URLs and take the first N. Fast and broad, but results vary between runs. | -| `deterministic` | Sort discovered URLs alphabetically, then pick every Nth URL for an even spread. Produces the same sample on repeated runs as long as the URL set is stable. | -| `none` | Skip discovery entirely. Only check the URL you pass on the command line. | - -```bash -# Reproducible runs for CI or iteration (same pages every time) -afdocs check https://docs.example.com --sampling deterministic - -# Check a single page without any discovery -afdocs check https://docs.example.com/api/auth --sampling none - -# Check a single page with specific checks -afdocs check https://docs.example.com/api/auth --sampling none --checks page-size-html,redirect-behavior -``` - -### Exit codes - -- `0` if all checks pass or warn -- `1` if any check fails - -## Programmatic API - -```ts -import { runChecks, createContext, getCheck } from 'afdocs'; - -// Run all checks -const report = await runChecks('https://docs.example.com'); - -// Run a single check -const ctx = createContext('https://docs.example.com'); -const check = getCheck('llms-txt-exists')!; -const result = await check.run(ctx); -``` - -## Scoring - -afdocs includes a scoring module that assigns a 0-100 numerical score to a documentation site's agent-friendliness. The score reflects how well agents can actually use the documentation, not just how many boxes are ticked: checks are weighted by impact, multi-page checks use proportional scoring (3/50 pages failing is different from 48/50), and interaction effects between checks are modeled as coefficients. - -For a full explanation of how scores are calculated, including check weights, warn coefficients, score caps, and interaction diagnostics, see [How the Agent-Friendly Docs Score Works](SCORING.md). - -### Scorecard output - -`--format scorecard` renders the full scorecard: overall score with letter grade, per-category scores, interaction diagnostics (system-level findings that emerge from combinations of check results), and per-check results with fix suggestions. - ``` Agent-Friendly Docs Scorecard ============================== @@ -160,8 +38,6 @@ Agent-Friendly Docs Scorecard Your site serves markdown at .md URLs, but agents have no way to discover this. ... - Fix: Add a blockquote directive near the top of each docs page ... - Check Results: Content Discoverability PASS llms-txt-exists llms.txt found at /llms.txt @@ -171,214 +47,34 @@ Agent-Friendly Docs Scorecard Fix: Add a blockquote near the top of each page ... ``` -### Letter grades - -| Grade | Score | Description | -| ----- | ----- | --------------------------------------------------------------------------- | -| A+ | 100 | Perfect. Every check passes. | -| A | 90-99 | Excellent. Agents can effectively navigate and consume this documentation. | -| B | 80-89 | Good. Minor improvements possible; agents can use most content. | -| C | 70-79 | Functional but with notable gaps. Some content is inaccessible or degraded. | -| D | 60-69 | Significant barriers. Agents struggle to use this documentation. | -| F | 0-59 | Poor. Agents likely cannot use this documentation in a meaningful way. | - -### Programmatic scoring - -The scoring module is available as a pure function for programmatic consumers: - -```ts -import { computeScore } from 'afdocs'; -// or import from the dedicated subpath: -// import { computeScore } from 'afdocs/scoring'; - -const report = await runChecks('https://docs.example.com'); -const score = computeScore(report); - -console.log(score.overall); // 72 -console.log(score.grade); // 'C' -console.log(score.categoryScores); // { 'content-discoverability': { score: 80, grade: 'B' }, ... } -console.log(score.diagnostics); // [{ id: 'markdown-undiscoverable', severity: 'warning', ... }] -console.log(score.resolutions); // { 'llms-txt-directive': 'Add a blockquote near the top...' } -``` - -`computeScore` takes a `ReportResult` and returns a standalone `ScoreResult`. It does not modify the report. Composition is the consumer's responsibility: the CLI formatters compose them; external consumers call `computeScore()` directly. - -## Test helpers - -afdocs includes vitest helpers so you can add agent-friendliness checks to your docs site's CI pipeline. For a ready-to-copy setup with a GitHub Actions workflow, see the [`examples/`](examples/) directory. - -### Setup - -Install afdocs and vitest: +## Install ```bash -npm install -D afdocs vitest -``` - -Create `agent-docs.config.yml` in your project root (or a `tests/` subdirectory): - -```yaml -url: https://docs.example.com +npm install -g afdocs ``` -Create a test file: - -```ts -import { describeAgentDocsPerCheck } from 'afdocs/helpers'; - -describeAgentDocsPerCheck(); -``` - -Run it: +Or as a dev dependency for CI: ```bash -npx vitest run agent-docs.test.ts -``` - -Each check appears as its own test in the output, so you can see exactly what passed, warned, failed, or was skipped: - -``` - ✓ Agent-Friendly Documentation > llms-txt-exists - ✓ Agent-Friendly Documentation > llms-txt-valid - ✓ Agent-Friendly Documentation > llms-txt-size - × Agent-Friendly Documentation > markdown-url-support - ↓ Agent-Friendly Documentation > page-size-markdown -``` - -Checks that fail cause the test to fail. Checks that warn still pass (they're informational). Checks skipped due to unmet dependencies or config filtering show as skipped. - -### Running a subset of checks - -If your platform doesn't support certain checks (for example, you can't serve markdown), you can limit which checks run via the config: - -```yaml -url: https://docs.example.com -checks: - - llms-txt-exists - - llms-txt-valid - - llms-txt-size - - http-status-codes - - auth-gate-detection -``` - -Only the listed checks will run. The rest show as skipped in the test output. - -### Config resolution - -The helpers look for `agent-docs.config.yml` (or `.yaml`) starting from `process.cwd()` and walking up the directory tree, so the config works whether your test file is at the project root or in a subdirectory. You can also pass an explicit directory: - -```ts -describeAgentDocsPerCheck(__dirname); +npm install -D afdocs ``` -### Timeouts - -The helpers set a 120-second timeout on the check run automatically. No vitest timeout configuration is needed. - -### Summary helper - -If you don't need per-check granularity, `describeAgentDocs` provides a simpler two-test suite (one to run checks, one to assert no failures): - -```ts -import { describeAgentDocs } from 'afdocs/helpers'; - -describeAgentDocs(); -``` - -### Direct imports - -For full control, use the programmatic API directly: - -```ts -import { createContext, getCheck } from 'afdocs'; -import { describe, it, expect } from 'vitest'; - -describe('agent-friendliness', () => { - it('has a valid llms.txt', async () => { - const ctx = createContext('https://docs.example.com'); - const check = getCheck('llms-txt-exists')!; - const result = await check.run(ctx); - expect(result.status).toBe('pass'); - }); -}); -``` - -## Checks - -22 checks across 7 categories. - -### Category 1: Content Discoverability - -| Check | Description | -| ------------------------- | --------------------------------------------------------- | -| `llms-txt-exists` | Whether `llms.txt` is discoverable at candidate locations | -| `llms-txt-valid` | Whether `llms.txt` follows the llmstxt.org structure | -| `llms-txt-size` | Whether `llms.txt` fits within agent truncation limits | -| `llms-txt-links-resolve` | Whether URLs in `llms.txt` return 200 | -| `llms-txt-links-markdown` | Whether URLs in `llms.txt` point to markdown content | -| `llms-txt-directive` | Whether pages include a directive pointing to `llms.txt` | - -### Category 2: Markdown Availability - -| Check | Description | -| ---------------------- | ------------------------------------------------- | -| `markdown-url-support` | Whether `.md` URL variants return markdown | -| `content-negotiation` | Whether the server honors `Accept: text/markdown` | - -### Category 3: Page Size and Truncation Risk - -| Check | Description | -| ------------------------ | --------------------------------------------------------------- | -| `rendering-strategy` | Whether pages contain server-rendered content or are SPA shells | -| `page-size-markdown` | Character count when served as markdown | -| `page-size-html` | Character count of HTML and post-conversion size | -| `content-start-position` | How far into the response actual content begins | - -### Category 4: Content Structure - -| Check | Description | -| ------------------------------ | -------------------------------------------------- | -| `tabbed-content-serialization` | Whether tabbed content creates oversized output | -| `section-header-quality` | Whether headers in tabbed sections include context | -| `markdown-code-fence-validity` | Whether markdown has unclosed code fences | - -### Category 5: URL Stability and Redirects - -| Check | Description | -| ------------------- | ----------------------------------------------- | -| `http-status-codes` | Whether error pages return correct status codes | -| `redirect-behavior` | Whether redirects are same-host HTTP redirects | - -### Category 6: Observability and Content Health - -| Check | Description | -| ------------------------- | ---------------------------------------------- | -| `llms-txt-freshness` | Whether `llms.txt` reflects current site state | -| `markdown-content-parity` | Whether markdown and HTML versions match | -| `cache-header-hygiene` | Whether cache headers allow timely updates | - -### Category 7: Authentication and Access - -| Check | Description | -| ------------------------- | -------------------------------------------------------------------- | -| `auth-gate-detection` | Whether documentation pages require authentication to access content | -| `auth-alternative-access` | Whether auth-gated sites provide alternative access paths for agents | +Requires Node.js 22 or later. -## Check dependencies +## Documentation -Some checks depend on others. If a dependency doesn't pass, the dependent check is skipped automatically. +Full documentation is available at **[afdocs.dev](https://afdocs.dev)**: -- `llms-txt-valid`, `llms-txt-size`, `llms-txt-links-resolve`, `llms-txt-links-markdown` require `llms-txt-exists` -- `page-size-markdown` requires `markdown-url-support` or `content-negotiation` -- `section-header-quality` requires `tabbed-content-serialization` -- `markdown-code-fence-validity` requires `markdown-url-support` or `content-negotiation` -- `llms-txt-freshness` requires `llms-txt-exists` -- `markdown-content-parity` requires `markdown-url-support` or `content-negotiation` -- `auth-alternative-access` requires `auth-gate-detection` (warn or fail) +- [Understand Your Score](https://afdocs.dev/what-is-agent-score) — what the score means and how it's calculated +- [Improve Your Score](https://afdocs.dev/improve-your-score) — prioritized fix guide +- [Checks Reference](https://afdocs.dev/checks/) — all 22 checks with fix suggestions +- [CLI Reference](https://afdocs.dev/reference/cli) — flags, output formats, sampling strategies +- [CI Integration](https://afdocs.dev/ci-integration) — vitest helpers for your pipeline +- [Programmatic API](https://afdocs.dev/reference/programmatic-api) — TypeScript API for custom tooling ## Responsible use -afdocs makes HTTP requests to the sites it checks. It enforces delays between requests (200ms default), caps concurrent connections, and honors `Retry-After` headers. The goal is to help documentation teams improve agent accessibility, not to load-test their infrastructure. +AFDocs makes HTTP requests to the sites it checks. It enforces delays between requests (200ms default), caps concurrent connections, and honors `Retry-After` headers. ## License diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts new file mode 100644 index 0000000..d028fc2 --- /dev/null +++ b/docs/.vitepress/config.ts @@ -0,0 +1,113 @@ +import { defineConfig } from 'vitepress'; + +export default defineConfig({ + title: 'AFDocs', + description: 'Test your documentation site against the Agent-Friendly Documentation Spec', + + head: [ + ['link', { rel: 'icon', type: 'image/x-icon', href: '/favicons/favicon.ico' }], + [ + 'link', + { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicons/favicon-32x32.png' }, + ], + [ + 'link', + { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicons/favicon-16x16.png' }, + ], + [ + 'link', + { rel: 'apple-touch-icon', sizes: '180x180', href: '/favicons/apple-icon-180x180.png' }, + ], + ], + + themeConfig: { + siteTitle: 'AFDocs', + logo: { + light: '/logos/afdoc_logo_light.svg', + dark: '/logos/afdoc_logo_dark.svg', + }, + + nav: [ + { text: 'Guide', link: '/what-is-agent-score' }, + { text: 'Checks', link: '/checks/' }, + { text: 'Reference', link: '/reference/cli' }, + ], + + sidebar: [ + { + text: 'The Score', + items: [ + { text: 'What Is the Agent Score?', link: '/what-is-agent-score' }, + { + text: 'Why Agent-Friendliness Matters', + link: '/why-agent-friendliness-matters', + }, + { + text: 'Score Calculation', + link: '/agent-score-calculation', + }, + { + text: 'Interaction Diagnostics', + link: '/interaction-diagnostics', + }, + ], + }, + { + text: 'Get Started', + items: [ + { text: 'Quick Start', link: '/quick-start' }, + { text: 'Run Locally', link: '/run-locally' }, + { text: 'Improve Your Score', link: '/improve-your-score' }, + { text: 'CI Integration', link: '/ci-integration' }, + ], + }, + { + text: 'Checks Reference', + items: [ + { text: 'Overview', link: '/checks/' }, + { + text: 'Content Discoverability', + link: '/checks/content-discoverability', + }, + { + text: 'Markdown Availability', + link: '/checks/markdown-availability', + }, + { text: 'Page Size', link: '/checks/page-size' }, + { text: 'Content Structure', link: '/checks/content-structure' }, + { text: 'URL Stability', link: '/checks/url-stability' }, + { text: 'Observability', link: '/checks/observability' }, + { text: 'Authentication', link: '/checks/authentication' }, + ], + }, + { + text: 'API Reference', + items: [ + { text: 'CLI', link: '/reference/cli' }, + { text: 'Programmatic API', link: '/reference/programmatic-api' }, + { text: 'Scoring API', link: '/reference/scoring-api' }, + { text: 'Config File', link: '/reference/config-file' }, + ], + }, + { + text: 'About', + items: [{ text: 'About AFDocs', link: '/about' }], + }, + ], + + socialLinks: [ + { + icon: 'github', + link: 'https://github.com/agent-ecosystem/afdocs', + }, + ], + + editLink: { + pattern: 'https://github.com/agent-ecosystem/afdocs/edit/main/docs/:path', + }, + + footer: { + message: 'Released under the MIT License.', + }, + }, +}); diff --git a/docs/.vitepress/theme/HomeLayout.vue b/docs/.vitepress/theme/HomeLayout.vue new file mode 100644 index 0000000..5872875 --- /dev/null +++ b/docs/.vitepress/theme/HomeLayout.vue @@ -0,0 +1,22 @@ + + + diff --git a/docs/.vitepress/theme/components/HeroScorecard.vue b/docs/.vitepress/theme/components/HeroScorecard.vue new file mode 100644 index 0000000..60e974c --- /dev/null +++ b/docs/.vitepress/theme/components/HeroScorecard.vue @@ -0,0 +1,75 @@ + + + diff --git a/docs/.vitepress/theme/components/LlmsDirective.vue b/docs/.vitepress/theme/components/LlmsDirective.vue new file mode 100644 index 0000000..a36cd82 --- /dev/null +++ b/docs/.vitepress/theme/components/LlmsDirective.vue @@ -0,0 +1,6 @@ + diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000..b594544 --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,7 @@ +import DefaultTheme from 'vitepress/theme'; +import HomeLayout from './HomeLayout.vue'; + +export default { + extends: DefaultTheme, + Layout: HomeLayout, +}; diff --git a/docs/about.md b/docs/about.md new file mode 100644 index 0000000..97b1e68 --- /dev/null +++ b/docs/about.md @@ -0,0 +1,72 @@ +# About AFDocs + +
+
+ +AFDocs is an open-source tool that tests documentation sites against the [Agent-Friendly Documentation Spec](https://agentdocsspec.com). The spec defines what makes documentation accessible to AI coding agents, based on observed behavior across real agent platforms. AFDocs automates those observations into 22 checks that produce a score and actionable fix suggestions. + +
+ +
+ +## The Agent-Friendly Documentation Spec + +The [Agent-Friendly Documentation Spec](https://agentdocsspec.com) is the foundation for everything AFDocs checks. It documents: + +- How agents actually discover, fetch, and consume documentation +- What fails in practice (truncation, empty SPA shells, auth gates, broken redirects) +- What works (llms.txt, markdown availability, content negotiation, proper status codes) +- Specific agent behaviors observed across Claude Code, Cursor, GitHub Copilot, OpenAI Codex, Gemini CLI, and others + +The spec is maintained at [github.com/agent-ecosystem/agent-docs-spec](https://github.com/agent-ecosystem/agent-docs-spec) and is open for contributions. + +AFDocs implements spec v0.3.0 (2026-03-31). + +## Status + +AFDocs is in early development (0.x). Check IDs, CLI flags, and output formats may change between minor versions. The tool is usable today, but don't build automation against specific output details until 1.0. + +## Contributing + +AFDocs is developed at [github.com/agent-ecosystem/afdocs](https://github.com/agent-ecosystem/afdocs). Issues, bug reports, and pull requests are welcome. + +If you've tested AFDocs against your docs site and found a check that doesn't accurately reflect agent behavior, or a failure mode that isn't covered, that's especially valuable feedback. The checks are based on observed behavior, and more observations make them better. + +## License + +MIT + + diff --git a/docs/agent-score-calculation.md b/docs/agent-score-calculation.md new file mode 100644 index 0000000..bed91f0 --- /dev/null +++ b/docs/agent-score-calculation.md @@ -0,0 +1,201 @@ +# Score Calculation + +The Agent Score is a weighted average of 22 check results, adjusted for interaction effects between checks. This page covers the mechanics: how checks are weighted, how multi-page results are scored proportionally, and how the system handles cases where checks influence each other. + +Each check corresponds to a section of the [Agent-Friendly Documentation Spec](https://agentdocsspec.com), which documents what the check measures and the observed agent behaviors that motivated it. For what each check measures, see the [Checks Reference](/checks/). + +## The formula + +``` +score = (sum of check scores) / (sum of weights for non-skipped checks) × 100 +``` + +Each check earns a proportion of its weight based on its result: + +- **Pass**: Full weight +- **Warn**: Partial weight (see [warn coefficients](#warn-coefficients) below) +- **Fail**: Zero +- **Skip**: Excluded from both the numerator and denominator + +The score is rounded to the nearest integer and mapped to a [letter grade](/what-is-agent-score#letter-grades). + +## Check weights by category + +Every check is assigned a weight tier based on its observed impact on agent workflows: + +- **Critical (10 pts)**: Agents cannot function without this. Failure means zero content, zero navigation, or zero access. +- **High (7 pts)**: Directly limits agent effectiveness. Failure means truncation, dead ends, or agents stuck on a worse path. +- **Medium (4 pts)**: Significant but not blocking. Failure degrades quality or misses an opportunity. +- **Low (2 pts)**: Refinements. Failure is a missed best practice, not an agent-blocking issue. + +### Content Discoverability + +| Check | Weight | +| ------------------------- | ------------- | +| `llms-txt-exists` | Critical (10) | +| `llms-txt-valid` | Medium (4) | +| `llms-txt-size` | High (7) | +| `llms-txt-links-resolve` | High (7) | +| `llms-txt-links-markdown` | High (7) | +| `llms-txt-directive` | High (7) | + +### Markdown Availability + +| Check | Weight | +| ---------------------- | ---------- | +| `markdown-url-support` | High (7) | +| `content-negotiation` | Medium (4) | + +### Page Size and Truncation Risk + +| Check | Weight | +| ------------------------ | ------------- | +| `rendering-strategy` | Critical (10) | +| `page-size-markdown` | High (7) | +| `page-size-html` | High (7) | +| `content-start-position` | Medium (4) | + +### Content Structure + +| Check | Weight | +| ------------------------------ | ---------- | +| `tabbed-content-serialization` | Medium (4) | +| `section-header-quality` | Low (2) | +| `markdown-code-fence-validity` | Medium (4) | + +### URL Stability and Redirects + +| Check | Weight | +| ------------------- | ---------- | +| `http-status-codes` | High (7) | +| `redirect-behavior` | Medium (4) | + +### Observability and Content Health + +| Check | Weight | +| ------------------------- | ---------- | +| `llms-txt-freshness` | Medium (4) | +| `markdown-content-parity` | Medium (4) | +| `cache-header-hygiene` | Low (2) | + +### Authentication and Access + +| Check | Weight | +| ------------------------- | ------------- | +| `auth-gate-detection` | Critical (10) | +| `auth-alternative-access` | Medium (4) | + +## Proportional scoring + +Checks that test multiple pages use proportional scoring. If `page-size-html` tests 50 pages and 3 exceed the threshold, the check scores ~94% of its weight rather than failing outright. This reflects reality: a site where a few pages are oversized is very different from one where nearly all are. + +### Multi-page checks (proportional) + +These checks sample pages from your site and score based on the pass rate across those pages: + +| Check | What's measured per page | +| ------------------------------ | ----------------------------------------------------------- | +| `rendering-strategy` | Whether the page is server-rendered or an SPA shell | +| `page-size-html` | Whether the HTML-to-text conversion fits within size limits | +| `page-size-markdown` | Whether the markdown version fits within size limits | +| `content-start-position` | How far into the response actual content begins | +| `content-negotiation` | Whether the server returns markdown for this page | +| `markdown-url-support` | Whether the `.md` URL variant returns markdown | +| `http-status-codes` | Whether a fabricated bad URL returns a proper 404 | +| `redirect-behavior` | Whether redirects use standard HTTP methods | +| `auth-gate-detection` | Whether the page is publicly accessible | +| `llms-txt-directive` | Whether the page includes a directive pointing to llms.txt | +| `tabbed-content-serialization` | Whether tabbed content creates oversized output | +| `section-header-quality` | Whether tab section headers include variant context | +| `markdown-code-fence-validity` | Whether code fences are properly closed | +| `markdown-content-parity` | Whether markdown and HTML versions match | +| `cache-header-hygiene` | Whether cache headers allow timely updates | +| `auth-alternative-access` | Whether auth-gated pages have alternative access paths | + +### Single-resource checks (all-or-nothing) + +These checks test a single site-wide resource and produce one pass, warn, or fail result: + +| Check | What's tested | +| ------------------------- | ------------------------------------------------------ | +| `llms-txt-exists` | Whether an llms.txt file exists at candidate locations | +| `llms-txt-valid` | Whether the llms.txt follows the standard structure | +| `llms-txt-size` | Whether the llms.txt fits within agent context limits | +| `llms-txt-links-resolve` | Whether links in the llms.txt return 200 | +| `llms-txt-links-markdown` | Whether llms.txt links point to markdown content | +| `llms-txt-freshness` | Whether the llms.txt reflects the current site state | + +Note that the llms.txt link checks (`llms-txt-links-resolve`, `llms-txt-links-markdown`) do test multiple URLs, but they test the links _within_ the llms.txt file rather than sampling pages from the site. Their result is a single pass/warn/fail based on the overall resolution or markdown rate. + +## Warn coefficients + +A warning is not a binary "half credit." Different warnings represent different degrees of degradation, and the score reflects this. + +| Coefficient | Meaning | Checks | +| ----------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0.75** | Content substantively intact | `llms-txt-valid`, `content-negotiation`, `llms-txt-links-resolve`, `llms-txt-freshness`, `markdown-content-parity` | +| **0.60** | Partial coverage or platform-dependent | `llms-txt-directive`, `redirect-behavior` | +| **0.50** | Genuine functional degradation | `llms-txt-exists`, `llms-txt-size`, `rendering-strategy`, `markdown-url-support`, `page-size-markdown`, `page-size-html`, `content-start-position`, `tabbed-content-serialization`, `section-header-quality`, `cache-header-hygiene`, `auth-gate-detection`, `auth-alternative-access` | +| **0.25** | Actively steering agents to a worse path | `llms-txt-links-markdown` (markdown exists but llms.txt links to HTML) | + +Two checks have no warn state and are strictly pass/fail: `http-status-codes` and `markdown-code-fence-validity`. + +## Score caps + +Some problems are severe enough that no amount of other passing checks should compensate. When AFDocs detects a critical issue, we cap the score regardless of how well everything else performs. + +| Condition | Cap | Why | +| ------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------ | +| `llms-txt-exists` fails | 59 (D) | Agents lose their primary navigation mechanism. | +| `rendering-strategy`: 75%+ SPA shells | 39 (F) | Most content is invisible to agents. | +| `rendering-strategy`: 50%+ SPA shells | 59 (D) | Significant content is invisible. | +| `auth-gate-detection`: 75%+ pages gated | 39 (F) | Most documentation is inaccessible. | +| `auth-gate-detection`: 50%+ pages gated | 59 (D) | Significant documentation is inaccessible. | +| [No viable path](/interaction-diagnostics#no-viable-path-to-content) diagnostic fires | 39 (F) | Agents have no effective way to access content at all. | + +When multiple caps apply, the lowest one wins. + +## Cluster coefficients + +Some checks only matter if agents can actually reach the content they measure. If agents can't discover your markdown path, measuring markdown quality is pointless. The score handles this through cluster coefficients that scale both a check's score and its weight proportionally. + +### Discovery coefficient + +**Affects**: `page-size-markdown`, `markdown-code-fence-validity`, `markdown-content-parity` + +These checks measure markdown path quality. But if agents can't discover that path, the quality is irrelevant. + +| Condition | Coefficient | Why | +| --------------------------- | ----------- | --------------------------------------------------------------- | +| Content negotiation passes | 1.0 | Agents that request it get markdown automatically. | +| llms.txt directive passes | 0.8 | Effective, but agents sometimes ignore the directive. | +| llms.txt links use .md URLs | 0.5 | Agents must find llms.txt first, then follow .md links. | +| None of the above | 0.0 | Agents won't find the markdown path. Check excluded from score. | + +If multiple conditions are met, the highest coefficient applies. + +Note that `markdown-url-support` is intentionally excluded from this coefficient. It measures whether the capability exists, not the quality of an established path. A site should get credit for serving markdown; the discovery coefficient only applies to downstream quality checks. + +### HTML path coefficient + +**Affects**: `page-size-html`, `content-start-position`, `tabbed-content-serialization`, `section-header-quality` + +If pages are SPA shells, measuring HTML quality is meaningless. This coefficient equals the `rendering-strategy` check's pass proportion: if 90% of pages render correctly, these checks count for 90% of their weight. + +### Index truncation coefficient + +**Affects**: `llms-txt-links-resolve`, `llms-txt-valid`, `llms-txt-freshness`, `llms-txt-links-markdown` + +If your llms.txt is truncated, agents only see part of the index. Measuring the quality of the invisible portion doesn't reflect real agent experience. + +| Condition | Coefficient | +| -------------------------------- | ---------------------------------------------------------- | +| `llms-txt-size` passes | 1.0 | +| `llms-txt-size` warns (50K–100K) | 0.8 | +| `llms-txt-size` fails (>100K) | Proportional to visible fraction (e.g., a 200K file ≈ 0.5) | + +### How coefficients combine + +When a check is subject to multiple coefficients, they multiply. Both the check's score and its weight in the denominator are scaled by the same combined coefficient, so a discounted check contributes proportionally less to the overall score rather than dragging it down. + +In the current scoring version, the three coefficient groups apply to disjoint sets of checks, so no check actually has more than one coefficient. diff --git a/docs/checks/authentication.md b/docs/checks/authentication.md new file mode 100644 index 0000000..bee0bb0 --- /dev/null +++ b/docs/checks/authentication.md @@ -0,0 +1,102 @@ +# Authentication and Access + +Whether agents can reach your documentation at all. Documentation that returns login pages, 401/403 responses, or SSO redirects is completely invisible to agents. These checks identify the problem and look for alternative access paths. + +## auth-gate-detection + +Whether documentation pages require authentication to access content. + +| | | +| ---------- | -------------------------------------------------------------------------- | +| **Weight** | Critical (10) | +| **Spec** | [auth-gate-detection](https://agentdocsspec.com/spec/#auth-gate-detection) | + +### Why it matters + +Auth-gated documentation is the most absolute barrier for agents. When agents encounter a login page or 401 response, they fall back on potentially outdated training data or seek secondary sources that may not reflect your official documentation or best practices. Competitors with ungated docs provide a better agent experience for their users. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------------------------------------------ | +| Pass | Documentation pages return content without authentication | +| Warn | Some pages are accessible while others require authentication (partial gating) | +| Fail | All or most documentation pages require authentication | + +AFDocs detects several forms of auth gating: + +- **HTTP status codes**: 401 (Unauthorized) and 403 (Forbidden) responses. +- **SSO redirects**: Redirects to known SSO providers including Okta, Auth0, Microsoft login, Google Accounts, and Salesforce, plus common SSO subdomain patterns (`sso.`, `idp.`, `auth.`, `login.`). +- **Soft auth gates**: Pages returning 200 but containing login form indicators: password input fields, page titles starting with "sign in" or "log in", or forms with SAML/OAuth/OpenID action URLs. + +### How to fix + +**If this check warns**, some of your docs are gated while others are public. This is common for products with tiered documentation. Consider ungating reference docs and API guides, which are the pages agents need most. + +**If this check fails**, all or most docs require authentication. Consider: + +- Ungating public API references and integration guides +- Providing a public `llms.txt` with links to whatever content can be public +- Shipping documentation with your SDK +- Providing an MCP server for authenticated access + +The [Agent-Friendly Documentation Spec](https://agentdocsspec.com/spec) covers options for making private docs agent-accessible, ordered by implementation effort. + +### Score impact + +This is a Critical check with two score caps: + +- At 50%+ pages gated, the score is [capped at D (59)](/agent-score-calculation#score-caps). +- At 75%+ pages gated, the score is [capped at F (39)](/agent-score-calculation#score-caps). + +--- + +## auth-alternative-access + +Whether auth-gated sites provide alternative access paths agents can use. + +| | | +| -------------- | ---------------------------------------------------------------------------------- | +| **Weight** | Medium (4) | +| **Depends on** | `auth-gate-detection` (warn or fail) | +| **Spec** | [auth-alternative-access](https://agentdocsspec.com/spec/#auth-alternative-access) | + +### Why it matters + +Sites that must gate their primary documentation can still serve agents through secondary channels. This check gives credit for agent access even when the main docs require login. It only runs when `auth-gate-detection` returns warn or fail; if your docs are public, this check is skipped. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------------------------------------------------------ | +| Pass | At least one alternative access path detected | +| Warn | Partial alternative access (e.g., public `llms.txt` covers only a subset of gated content) | +| Fail | No alternative access paths detected | + +### What the check detects + +AFDocs automatically detects three forms of alternative access: + +- **Public `llms.txt`**: Even if underlying docs are gated, a public `llms.txt` gives agents a navigational index. +- **Public markdown**: Pages that serve markdown via `.md` URLs or content negotiation without requiring authentication. +- **Partially accessible pages**: Some documentation pages are publicly accessible while others are gated. + +Some alternative access paths can't be detected automatically: bundled SDK documentation, CLI-based doc commands, and MCP servers. These are noted in the check output as requiring manual verification. + +### Other alternative access options + +If the check fails, these are additional approaches worth considering (even though AFDocs can't detect them): + +- **Bundled documentation**: Ship docs in your package/SDK so agents can access them locally. +- **CLI-based doc access**: Provide a CLI command that works with the developer's existing authentication (e.g., `yourproduct docs search "topic"`). +- **MCP server**: Expose documentation through tool calls with server-side authentication. + +If you provide any of these, document them on a public page (a setup guide, README, or your `llms.txt` itself) so agents have a chance of discovering the alternative path. An undiscoverable alternative isn't much better than no alternative. + +Because AFDocs can't detect these manual paths, you won't get score credit for them even if they're in place. If that's your situation, consider [defining a custom config](/improve-your-score#step-3-work-through-fixes-iteratively) that excludes `auth-alternative-access` so your score reflects the checks you can actually act on. + +### How to fix + +**If this check fails**, no alternative access paths were detected for your auth-gated content. The lowest-effort option is usually providing a public `llms.txt` that lists whatever documentation can be made available without authentication. See the [Agent-Friendly Documentation Spec](https://agentdocsspec.com/spec) for the full range of options. + +**If this check warns**, you have partial alternative access. Expand coverage to include more of the gated documentation, or add additional access paths. diff --git a/docs/checks/content-discoverability.md b/docs/checks/content-discoverability.md new file mode 100644 index 0000000..546b5b3 --- /dev/null +++ b/docs/checks/content-discoverability.md @@ -0,0 +1,223 @@ +# Content Discoverability + +How agents find and navigate your documentation. This category covers `llms.txt`: whether it exists, whether agents can parse it, whether the links work, and whether agents visiting individual pages know it's there. + +These six checks carry the most combined weight of any category. Without discoverability, everything else is less useful. + +## llms-txt-exists + +Whether your site has an `llms.txt` file at a discoverable location. + +| | | +| ---------- | ------------------------------------------------------------------ | +| **Weight** | Critical (10) | +| **Spec** | [llms-txt-exists](https://agentdocsspec.com/spec/#llms-txt-exists) | + +### Why it matters + +`llms.txt` is the most effective navigation mechanism observed for agents. When agents find one, or are intentionally pointed to it, this gives agents the ability to navigate a documentation site. Without it, agents resort to guessing URLs from training data. They do _not_ read your navigation structure, and in cases where agent platforms automatically convert HTML to markdown before providing it to agents, they literally can't _see_ your navigation structure. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------------------------------------- | +| Pass | `llms.txt` found at one or more candidate locations, returning 200 | +| Warn | Reachable only via a cross-host redirect (some agents don't follow these) | +| Fail | Not found at any candidate location | + +### Candidate locations + +AFDocs checks up to three URLs, depending on the URL you pass: + +| Candidate | Example | +| ------------------------ | ---------------------------------------------------------------------------- | +| `{baseUrl}/llms.txt` | `https://example.com/docs/llms.txt` (if you pass `https://example.com/docs`) | +| `{origin}/llms.txt` | `https://example.com/llms.txt` | +| `{origin}/docs/llms.txt` | `https://example.com/docs/llms.txt` | + +Duplicates are removed, so in practice fewer URLs may be checked (e.g., if your `baseUrl` is `https://example.com/docs`, the first and third rows produce the same URL). + +If any of these redirect cross-host (e.g., `example.com` redirects to `docs.example.com`), AFDocs also probes `{redirected_origin}/llms.txt` as a fallback. + +If your `llms.txt` lives at a location not covered by these candidates, AFDocs won't find it. You can either move it to one of the candidate locations or [open an issue](https://github.com/agent-ecosystem/afdocs/issues) to suggest expanding the candidate list. + +### How to fix + +**If this check fails**, create an `llms.txt` at one of the candidate locations above. The file should contain an H1 title, a blockquote summary, and markdown links to your key documentation pages. See the [llms.txt specification](https://llmstxt.org/) for the format. + +This is the single highest-impact improvement for agent access to your docs. It also unblocks five dependent checks that are currently skipped. + +**If this check warns**, your `llms.txt` is only reachable via a cross-host redirect. Serve it directly from the same host as your documentation, or add a same-host redirect. + +### Score impact + +If this check fails, the score is [capped at D (59)](/agent-score-calculation#score-caps) regardless of everything else. + +--- + +## llms-txt-valid + +Whether your `llms.txt` follows the [llmstxt.org](https://llmstxt.org/) structure so agents can parse it reliably. + +| | | +| -------------- | ---------------------------------------------------------------- | +| **Weight** | Medium (4) | +| **Depends on** | `llms-txt-exists` | +| **Spec** | [llms-txt-valid](https://agentdocsspec.com/spec/#llms-txt-valid) | + +### Why it matters + +A well-structured `llms.txt` gives agents a reliable map of the documentation. Inconsistent implementations reduce its value, though even a non-standard file with useful links is better than nothing. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------------------------------------------------------------------------ | +| Pass | Follows the proposed structure: H1 title, blockquote summary, heading-delimited sections with markdown links | +| Warn | Contains parseable markdown links but doesn't follow the proposed structure | +| Fail | Exists but contains no parseable links or is empty | + +### How to fix + +**If this check warns**, add an H1 title as the first line and a blockquote summary (lines starting with `>`) to improve agent parsing. + +**If this check fails**, add links in `[name](url): description` format under heading-delimited sections. + +--- + +## llms-txt-size + +Whether your `llms.txt` fits within agent context windows. + +| | | +| -------------- | -------------------------------------------------------------- | +| **Weight** | High (7) | +| **Depends on** | `llms-txt-exists` | +| **Spec** | [llms-txt-size](https://agentdocsspec.com/spec/#llms-txt-size) | + +### Why it matters + +An `llms.txt` that exceeds truncation limits defeats its purpose. Some agent platforms see only the first 50K-100K characters; links, structure, and content beyond that point are invisible. This is arguably worse than the truncation problem affecting documentation pages, because `llms.txt` is supposed to be the solution to navigation. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------------------------------------ | +| Pass | Under 50,000 characters | +| Warn | 50,000-100,000 characters (fits within some agent platforms but not all) | +| Fail | Over 100,000 characters (likely truncated by major agent platforms) | + +### How to fix + +**If this check warns**, keep an eye on it. If your `llms.txt` grows further, split it before it crosses the 100K threshold. + +**If this check fails**, split into a root `llms.txt` that links to section-level files, each under 50,000 characters. For example, a root index might link to `/api/llms.txt`, `/guides/llms.txt`, and `/reference/llms.txt`. + +### Score impact + +When `llms.txt` is oversized, the [index truncation coefficient](/agent-score-calculation#index-truncation-coefficient) discounts the value of downstream checks that measure the quality of content agents can't see. + +--- + +## llms-txt-links-resolve + +Whether the URLs listed in your `llms.txt` actually work. + +| | | +| -------------- | -------------------------------------------------------------------------------- | +| **Weight** | High (7) | +| **Depends on** | `llms-txt-exists` | +| **Spec** | [llms-txt-links-resolve](https://agentdocsspec.com/spec/#llms-txt-links-resolve) | + +### Why it matters + +A stale `llms.txt` with broken links is worse than no `llms.txt` at all. It sends agents down dead ends with high confidence, because agents treat `llms.txt` as an authoritative source. Broken links are often pages that were renamed or removed without updating `llms.txt`. + +### Results + +| Result | Condition | +| ------ | ------------------------------ | +| Pass | All links resolve (return 200) | +| Warn | Over 90% of links resolve | +| Fail | Under 90% of links resolve | + +### How to fix + +Run with `--verbose` to see which specific links are broken. These are usually pages that were renamed or removed. Either update the links in `llms.txt` or remove entries for pages that no longer exist. + +The best long-term fix is generating `llms.txt` at build time so it stays in sync automatically. + +--- + +## llms-txt-links-markdown + +Whether the URLs in your `llms.txt` point to markdown content rather than HTML. + +| | | +| -------------- | ---------------------------------------------------------------------------------- | +| **Weight** | High (7) | +| **Depends on** | `llms-txt-exists` | +| **Spec** | [llms-txt-links-markdown](https://agentdocsspec.com/spec/#llms-txt-links-markdown) | + +### Why it matters + +Markdown is more useful for agents than HTML. It omits the unnecessary tokens introduced by HTML in the page, and gives the agents clear content in an easy-to-parse format. An `llms.txt` pointing to HTML misses the opportunity to deliver content in the most agent-friendly format. Agents don't discover `.md` URL variants on their own; they follow whatever link `llms.txt` gives them. + +### Results + +| Result | Condition | +| ------ | --------------------------------------------------------------------------------------------- | +| Pass | All or most links point to markdown content | +| Warn | Links point to HTML, but markdown versions are available (detected by testing `.md` variants) | +| Fail | Links point to HTML and no markdown alternatives detected | + +### How to fix + +**If this check warns**, your site serves markdown but your `llms.txt` links to the HTML versions. Update the links to use `.md` URLs. This is usually a find-and-replace. + +**If this check fails**, your `llms.txt` links to HTML and no markdown is available. See [Markdown Availability](/checks/markdown-availability) for how to serve markdown. + +### Score impact + +A warning on this check carries a bigger penalty in scoring because it means markdown exists but agents are being actively steered away from it. + +--- + +## llms-txt-directive + +Whether your documentation pages tell agents where to find `llms.txt`. + +| | | +| ---------- | ------------------------------------------------------------------------ | +| **Weight** | High (7) | +| **Spec** | [llms-txt-directive](https://agentdocsspec.com/spec/#llms-txt-directive) | + +### Why it matters + +Agents don't know to look for `llms.txt` by default. When they land on an individual documentation page, they have no way to discover that a navigation index exists unless the page tells them. A blockquote directive near the top of each page is the agent equivalent of a "You Are Here" marker. + +In practice, agents that see the directive can follow it and use the index to navigate. In testing, Anthropic's Claude Code documentation used this pattern, and it worked reliably for Claude agents. However, agents are non-deterministic, and platforms implement functionality in different ways, so efficacy may vary across agents. This is more of a suggestion than a guarantee. + +### Results + +| Result | Condition | +| ------ | -------------------------------------------------------------------------- | +| Pass | Directive found on all or nearly all documentation pages, near the top | +| Warn | Found on some pages but missing from others, or buried past 50% of content | +| Fail | Not detected on any tested page | + +### How to fix + +Add a blockquote near the top of each documentation page pointing to your `llms.txt`. For example: + +```markdown +> For the complete documentation index, see [llms.txt](/llms.txt) +``` + +The URL in the directive should match wherever you placed your `llms.txt`. If it's at `/docs/llms.txt`, use that path instead. + +This can typically be added through your docs platform's page template or layout component. It can be visually hidden with CSS while remaining accessible to agents, as long as it's in the server-rendered HTML (not injected by client-side JavaScript). + +### Score impact + +This check is one of the signals used by the [discovery coefficient](/agent-score-calculation#discovery-coefficient). If neither this check nor content negotiation passes, downstream markdown quality checks are discounted because agents can't find the markdown path. diff --git a/docs/checks/content-structure.md b/docs/checks/content-structure.md new file mode 100644 index 0000000..c6ba684 --- /dev/null +++ b/docs/checks/content-structure.md @@ -0,0 +1,92 @@ +# Content Structure + +Whether page content is structured in ways agents can consume. These checks cover patterns that are great for humans but problematic for agents: tabbed interfaces that serialize into massive documents, generic headers that lose context when tabs are flattened, and code fences that corrupt everything after them when left unclosed. + +The checks in this section focus on structural patterns that have measurable impact on agents: serialization behavior, header disambiguation, and code fence integrity. How you organize your content (page granularity, information architecture, what to include) is a separate question that we don't yet have enough empirical data to score. + +## tabbed-content-serialization + +Whether tabbed UI components create oversized output when serialized. + +| | | +| ---------- | -------------------------------------------------------------------------------------------- | +| **Weight** | Medium (4) | +| **Spec** | [tabbed-content-serialization](https://agentdocsspec.com/spec/#tabbed-content-serialization) | + +### Why it matters + +Tabbed content is great for humans but can create truncation-based discoverability issues for agents. A tutorial showing the same steps in 11 language variants serializes into a single massive document in the HTML source. The agent sees only the first few variants before hitting truncation limits; everything past that point is invisible. Asking for a specific variant (like Python) doesn't help if that variant is beyond the truncation point. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------------------------------- | +| Pass | No tabbed content, or serialized content is under 50,000 characters | +| Warn | Serialized tabbed content is 50,000-100,000 characters | +| Fail | Serialized tabbed content exceeds 100,000 characters | + +### How to fix + +If tabbed content creates oversized output, consider these approaches: + +- **Separate pages**: Break each variant into its own page (e.g., `/quickstart/python`, `/quickstart/node`). Each page is self-contained and fits within limits. +- **Query parameters**: Provide a mechanism for agents to request a specific variant (e.g., `?lang=python`), returning only that variant's content. + +--- + +## section-header-quality + +Whether headers in tabbed sections include enough context to be meaningful without the surrounding UI. + +| | | +| -------------- | -------------------------------------------------------------------------------- | +| **Weight** | Low (2) | +| **Depends on** | `tabbed-content-serialization` | +| **Spec** | [section-header-quality](https://agentdocsspec.com/spec/#section-header-quality) | + +### Why it matters + +When agents see serialized tabbed content, headers are the only way to tell which section applies to which context. Generic headers like "Step 1" repeated across Python, Node, and Go variants are indistinguishable in the serialized output. Headers like "Step 1 (Python/PyMongo)" preserve the filtering context agents need. + +### Results + +| Result | Condition | +| ------ | ---------------------------------------------------------------------------------------------------- | +| Pass | 25% or fewer of headers within tabbed sections are generic (repeated without distinguishing context) | +| Warn | 25-50% of headers are generic across variants | +| Fail | Over 50% generic, or identical header sets repeated across tab groups with no variant context | + +### How to fix + +Add variant context to headers in tabbed sections. For example, change "Step 1" to "Step 1 (Python)" or "Installation (npm)". This change benefits agents without affecting the human reading experience because the tab UI already provides the variant context visually. + +--- + +## markdown-code-fence-validity + +Whether markdown content has properly closed code fences. + +| | | +| -------------- | -------------------------------------------------------------------------------------------- | +| **Weight** | Medium (4) | +| **Depends on** | `markdown-url-support` or `content-negotiation` | +| **Spec** | [markdown-code-fence-validity](https://agentdocsspec.com/spec/#markdown-code-fence-validity) | + +### Why it matters + +An unclosed code fence causes everything after it to be interpreted as code rather than prose. The agent sees the rest of the document as literal content to reproduce, not natural language instructions to follow. An early unclosed fence means the agent loses the entire rest of the page's meaning. + +Per CommonMark, a backtick fence (` ``` `) can only be closed by another backtick fence of equal or greater length. A tilde fence (`~~~`) closing a backtick-opened fence leaves the backtick fence unclosed. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------ | +| Pass | All code fences properly opened and closed | +| Fail | One or more unclosed code fences detected | + +This check has no warn state; it's strictly pass/fail. + +### How to fix + +Run with `--verbose` to see which pages have unclosed fences. Ensure every opening ` ``` ` or `~~~` has a matching closing delimiter of the same type and equal or greater length. Pay particular attention to nested code examples (code blocks inside code blocks) which are the most common source of fence mismatches. diff --git a/docs/checks/index.md b/docs/checks/index.md new file mode 100644 index 0000000..dd620e6 --- /dev/null +++ b/docs/checks/index.md @@ -0,0 +1,51 @@ +# Checks Reference + +AFDocs runs 22 checks across 7 categories. Each check implements a section of the [Agent-Friendly Documentation Spec](https://agentdocsspec.com/spec), which documents the observed agent behaviors and failure modes that motivated the check. + +## Categories + +| Category | Checks | What it covers | +| ---------------------------------------------------------- | ------ | -------------------------------------------------------------------- | +| [Content Discoverability](/checks/content-discoverability) | 6 | Whether agents can find and navigate your documentation via llms.txt | +| [Markdown Availability](/checks/markdown-availability) | 2 | Whether agents can get documentation as markdown instead of HTML | +| [Page Size and Truncation Risk](/checks/page-size) | 4 | Whether agents can process your pages without losing content | +| [Content Structure](/checks/content-structure) | 3 | Whether page content is structured in ways agents can consume | +| [URL Stability and Redirects](/checks/url-stability) | 2 | Whether documentation URLs behave predictably for agents | +| [Observability and Content Health](/checks/observability) | 3 | Whether agent-facing resources stay accurate over time | +| [Authentication and Access](/checks/authentication) | 2 | Whether agents can reach your documentation at all | + +## How to read check results + +Each check produces one of four results: + +- **Pass**: The check passed. Your site meets the spec recommendation. +- **Warn**: Partial success. Something works but could be better; the scorecard includes a specific suggestion. +- **Fail**: The check failed. Agents are affected. The scorecard includes a fix suggestion. +- **Skip**: A dependency didn't pass, so this check couldn't run. The dependency already carries the penalty. + +For checks that test multiple pages (like `page-size-html` or `rendering-strategy`), results are proportional. If 3 out of 50 pages fail, the check scores ~94% of its weight rather than failing outright. See [Proportional scoring](/agent-score-calculation#proportional-scoring) for details. + +## Check dependencies + +Some checks depend on others. If a dependency doesn't pass, the dependent check is skipped. + +- `llms-txt-valid`, `llms-txt-size`, `llms-txt-links-resolve`, `llms-txt-links-markdown` require `llms-txt-exists` +- `page-size-markdown` requires `markdown-url-support` or `content-negotiation` +- `section-header-quality` requires `tabbed-content-serialization` +- `markdown-code-fence-validity` requires `markdown-url-support` or `content-negotiation` +- `llms-txt-freshness` requires `llms-txt-exists` +- `markdown-content-parity` requires `markdown-url-support` or `content-negotiation` +- `auth-alternative-access` requires `auth-gate-detection` (warn or fail) + +When running a subset of checks with `--checks`, include the dependencies in your list. AFDocs handles execution order automatically, but it can only run checks you've asked for. If you pass `--checks llms-txt-valid` without including `llms-txt-exists`, the dependency won't run, so `llms-txt-valid` gets skipped. + +## Weight tiers + +Every check is assigned a weight based on its observed impact on agent workflows. Weights determine how much each check contributes to the overall score. + +- **Critical (10 pts)**: Agents cannot function without this. +- **High (7 pts)**: Directly limits agent effectiveness. +- **Medium (4 pts)**: Significant but not blocking. +- **Low (2 pts)**: Refinements and best practices. + +See [Score Calculation](/agent-score-calculation) for the full scoring mechanics. diff --git a/docs/checks/markdown-availability.md b/docs/checks/markdown-availability.md new file mode 100644 index 0000000..a7302a1 --- /dev/null +++ b/docs/checks/markdown-availability.md @@ -0,0 +1,73 @@ +# Markdown Availability + +Whether agents can get documentation as markdown instead of HTML. Agents work more effectively and efficiently with markdown: it's smaller, cleaner, and avoids the lossy HTML-to-markdown conversion that many agent web fetch pipelines apply. But agents don't discover markdown support on their own. Your docs must signal it. + +## markdown-url-support + +Whether appending `.md` to a documentation URL returns valid markdown. + +| | | +| ---------- | ---------------------------------------------------------------------------- | +| **Weight** | High (7) | +| **Spec** | [markdown-url-support](https://agentdocsspec.com/spec/#markdown-url-support) | + +### Why it matters + +Sites serving markdown directly bypass the entire HTML-to-markdown conversion pipeline, which is lossy and unpredictable across agent platforms. This is the core format capability agents look for when directed to it via `llms.txt` links or a page directive. + +Some docs platforms support this natively. VitePress, for example, serves markdown at `.md` URLs out of the box. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------------ | +| Pass | `.md` URLs return valid markdown with 200 status | +| Warn | Some pages support `.md` but not consistently | +| Fail | `.md` URLs return errors or HTML | + +### How to fix + +Configure your docs platform to serve `.md` variants for all documentation pages. The implementation depends on your platform: + +- **VitePress**: Works out of the box; `.md` URLs serve the raw source files. +- **Other static generators**: You may need to copy source markdown files into the build output directory, or configure the server to serve them alongside the HTML. +- **Server-rendered platforms**: Add a route that serves the markdown source when the `.md` extension is requested. + +### Dependencies + +`page-size-markdown`, `markdown-code-fence-validity`, and `markdown-content-parity` all require either this check or `content-negotiation` to pass. If neither passes, those downstream checks are skipped. + +--- + +## content-negotiation + +Whether your server returns markdown when agents send `Accept: text/markdown`. + +| | | +| ---------- | -------------------------------------------------------------------------- | +| **Weight** | Medium (4) | +| **Spec** | [content-negotiation](https://agentdocsspec.com/spec/#content-negotiation) | + +### Why it matters + +Some agents, including Claude Code and Cursor, send `Accept: text/markdown` as their preferred content type. If your server honors this, agents get clean markdown automatically without needing to know about `.md` URL patterns. This is the most transparent form of markdown delivery because it requires no changes to agent behavior. + +Most agents don't request markdown this way, but those that do benefit significantly. + +### Results + +| Result | Condition | +| ------ | --------------------------------------------------------------------------- | +| Pass | Server returns markdown with `Content-Type: text/markdown` | +| Warn | Server returns markdown content but with an incorrect `Content-Type` header | +| Fail | Server ignores the `Accept` header and returns HTML | + +### How to fix + +**If this check warns**, your server returns markdown content but doesn't set the `Content-Type` header correctly. Set the response `Content-Type` to `text/markdown` when the `Accept` header requests it. + +**If this check fails**, configure your server to honor content negotiation. This requires server-side support: when a request includes `Accept: text/markdown`, serve the markdown source instead of the HTML page. + +### Score impact + +Content negotiation passing sets the [discovery coefficient](/agent-score-calculation#discovery-coefficient) to 1.0 for downstream markdown quality checks, because agents that request markdown get it automatically with no decision involved. diff --git a/docs/checks/observability.md b/docs/checks/observability.md new file mode 100644 index 0000000..cdd513f --- /dev/null +++ b/docs/checks/observability.md @@ -0,0 +1,96 @@ +# Observability and Content Health + +Whether agent-facing resources stay accurate over time. Getting `llms.txt` and markdown support working is the hard part; keeping them working is a different problem. These checks catch the silent failures: a stale index, drifting content between formats, and cache headers that delay updates. + +## llms-txt-freshness + +Whether your `llms.txt` reflects the current state of your documentation site. + +| | | +| -------------- | ------------------------------------------------------------------------ | +| **Weight** | Medium (4) | +| **Depends on** | `llms-txt-exists` | +| **Spec** | [llms-txt-freshness](https://agentdocsspec.com/spec/#llms-txt-freshness) | + +### Why it matters + +An `llms.txt` that was accurate at launch but never updated is a silent failure. New pages won't appear in the index, deleted pages send agents to 404s, and renamed pages produce redirect chains. Unlike `llms-txt-links-resolve` (which catches broken links), this check catches missing coverage: pages that exist on your site but aren't listed in `llms.txt`. + +### Results + +Based on coverage of your site's documentation pages (excluding non-docs pages like blog posts, pricing, login): + +| Result | Condition | +| ------ | --------------------------------------------------------------- | +| Pass | `llms.txt` covers 95% or more of the site's documentation pages | +| Warn | 80-95% coverage (some live pages missing from the index) | +| Fail | Under 80% coverage (missing large documentation sections) | + +### How to fix + +**If this check warns or fails**, regenerate `llms.txt` from your sitemap or build pipeline. The best long-term fix is generating `llms.txt` at build time, so every deployment automatically includes an up-to-date index. Run with `--verbose` to see which pages are missing. + +--- + +## markdown-content-parity + +Whether markdown and HTML versions of pages contain the same content. + +| | | +| -------------- | ---------------------------------------------------------------------------------- | +| **Weight** | Medium (4) | +| **Depends on** | `markdown-url-support` or `content-negotiation` | +| **Spec** | [markdown-content-parity](https://agentdocsspec.com/spec/#markdown-content-parity) | + +### Why it matters + +When markdown is generated separately from HTML (not served directly from source), the two can drift. A site updates its HTML but forgets to regenerate the markdown, leaving agents with outdated instructions or code examples. Or a build pipeline that generates markdown misses some of the content. This is particularly insidious because agents receiving the markdown version have no signal that content is missing or outdated, and humans typically don't look at both page formats to spot discrepancies. + +### Results + +Based on the percentage of HTML content segments missing from the markdown version, after normalization: + +| Result | Condition | +| ------ | --------------------------------------------------------------------------------------------- | +| Pass | Under 5% of content segments missing | +| Warn | 5-20% missing (minor differences like formatting or navigation elements) | +| Fail | 20% or more missing (substantive differences like missing sections or outdated code examples) | + +### How to fix + +**If this check warns**, review the differences for formatting variations. Minor parity issues (navigation elements present in one format but not the other) may be acceptable. + +**If this check fails**, your markdown and HTML versions have substantive content differences. Regenerate markdown from source, or fix the build pipeline to keep both formats in sync. The most reliable approach is serving markdown directly from the same source files used to generate HTML, rather than maintaining two separate outputs. + +--- + +## cache-header-hygiene + +Whether cache headers on `llms.txt` and markdown endpoints allow timely updates. + +| | | +| ---------- | ---------------------------------------------------------------------------- | +| **Weight** | Low (2) | +| **Spec** | [cache-header-hygiene](https://agentdocsspec.com/spec/#cache-header-hygiene) | + +### Why it matters + +Aggressive caching means that after you update `llms.txt` or markdown content, agents and CDNs continue serving the stale version for hours or days. Conversely, missing cache headers lead to ambiguous behavior where CDN providers apply their own defaults. + +This isn't only a CDN concern. Some agents appear to cache fetched content locally or through a server proxy, using cache headers to decide whether to re-fetch a page or serve a stored copy. In testing, agents have been observed returning stale content for pages they previously fetched, even after the source was updated. The exact mechanism varies by agent platform, but the practical effect is the same: long cache lifetimes delay how quickly agents see your changes. + +For small, infrequently fetched resources like `llms.txt`, short cache lifetimes with revalidation headers are appropriate. + +### Results + +| Result | Condition | +| ------ | ------------------------------------------------------------------------------------------- | +| Pass | `max-age` under 3600, or uses `must-revalidate` with `ETag`/`Last-Modified` | +| Warn | Moderate caching (1-24 hours) that could delay updates | +| Fail | Aggressive caching (over 24 hours) with no revalidation, or no cache-related headers at all | + +Responses that lack `Cache-Control`/`Expires` but include `ETag` or `Last-Modified` pass, because they enable conditional revalidation. + +### How to fix + +Set reasonable cache lifetimes on `.md` and `.txt` files. A `max-age` of 300-3600 seconds (5 minutes to 1 hour) with `must-revalidate` is a good default. Include `ETag` or `Last-Modified` headers so clients can conditionally revalidate without re-downloading unchanged content. diff --git a/docs/checks/page-size.md b/docs/checks/page-size.md new file mode 100644 index 0000000..7c3024b --- /dev/null +++ b/docs/checks/page-size.md @@ -0,0 +1,143 @@ +# Page Size and Truncation Risk + +Whether agents can process your pages without losing content. Agent platforms have diverse truncation limits, from 5K characters on some platforms to over 100K on others. Pages that exceed these limits are silently truncated: the agent sees the beginning of the page and loses the rest. + +This category also covers the related problem of pages that technically fit within limits but waste most of that budget on boilerplate (inline CSS, JavaScript, navigation chrome) instead of documentation content. + +## rendering-strategy + +Whether pages contain server-rendered content or are empty client-side application shells. + +| | | +| ---------- | ------------------------------------------------------------------------ | +| **Weight** | Critical (10) | +| **Spec** | [rendering-strategy](https://agentdocsspec.com/spec/#rendering-strategy) | + +### Why it matters + +Many agents fetch pages using HTTP libraries that don't execute JavaScript. When a site relies on client-side rendering, agents receive an empty shell with framework boilerplate but none of the documentation content. This isn't a truncation problem; it's a zero-content problem. + +The rendering strategy is a property of the framework and its configuration, not the content. Sites using Next.js, for example, can be fully agent-accessible (like react.dev) or deliver empty shells, depending on whether server-side rendering is enabled. + +### Results + +| Result | Condition | +| ------ | --------------------------------------------------------------------------------------------------------- | +| Pass | Pages contain substantive server-rendered content (headings, prose, code blocks) | +| Warn | Some content present but sparse (possible partial hydration or lazy loading) | +| Fail | SPA shell detected (framework markers like `id="__next"`, minimal visible text, no page-specific content) | + +### How to fix + +**If this check warns**, verify that key content is present in the server-rendered HTML response. Some pages may use component-level client rendering or lazy loading for specific sections. + +**If this check fails**, enable server-side rendering or static site generation in your docs platform. This is typically a configuration change, not a code rewrite. + +### Score impact + +This is a Critical check with two score caps: + +- At 50%+ SPA shells, the score is [capped at D (59)](/agent-score-calculation#score-caps). +- At 75%+ SPA shells, the score is [capped at F (39)](/agent-score-calculation#score-caps). + +The `rendering-strategy` pass rate also drives the [HTML path coefficient](/agent-score-calculation#html-path-coefficient). If 90% of pages render correctly, HTML quality checks (`page-size-html`, `content-start-position`, `tabbed-content-serialization`, `section-header-quality`) count for 90% of their weight. + +--- + +## page-size-markdown + +Character count when documentation is served as markdown. + +| | | +| -------------- | ------------------------------------------------------------------------ | +| **Weight** | High (7) | +| **Depends on** | `markdown-url-support` or `content-negotiation` | +| **Spec** | [page-size-markdown](https://agentdocsspec.com/spec/#page-size-markdown) | + +### Why it matters + +This is the best-case scenario for agent consumption. Markdown size directly corresponds to what the model sees, with no conversion overhead. If the markdown version fits within limits, agents that can request it get full, untruncated content. + +### Results + +| Result | Condition | +| ------ | ---------------------------------------------------------------------------- | +| Pass | Under 50,000 characters | +| Warn | 50,000-100,000 characters (fits within some platforms but may exceed others) | +| Fail | Over 100,000 characters (truncated by all major agent platforms) | + +### How to fix + +**If pages are too large**, break them into smaller pages or restructure serialized tabbed content. See [tabbed-content-serialization](/checks/content-structure#tabbed-content-serialization) for guidance on the most common source of oversized pages. + +--- + +## page-size-html + +Character count of the HTML response and the post-conversion size when converted to markdown. + +| | | +| ---------- | ---------------------------------------------------------------- | +| **Weight** | High (7) | +| **Spec** | [page-size-html](https://agentdocsspec.com/spec/#page-size-html) | + +### Why it matters + +Many agents receive HTML, either because they don't request markdown or because the server doesn't support delivering markdown when requested. When agents receive HTML, the page size that matters isn't the raw HTML; it's how large the page is after the agent's platform converts it to text. Pages with a lot of inline CSS and JavaScript may be less likely to convert cleanly to text; the version of the page that the agent "sees" may still contain a lot of inline CSS and JavaScript. This can push the actual documentation content past agent truncation limits. + +AFDocs measures both the raw HTML size and the post-conversion size, and scores based on the conversion result. See [content-start-position](#content-start-position) below for more on how boilerplate affects what agents see. + +### Results + +Based on post-conversion character count: + +| Result | Condition | +| ------ | ------------------------- | +| Pass | Under 50,000 characters | +| Warn | 50,000-100,000 characters | +| Fail | Over 100,000 characters | + +The output also reports the conversion ratio. A page that converts from 505KB HTML to 12KB markdown has 98% boilerplate, meaning only 2% of the HTML was documentation content. + +### How to fix + +**If pages convert to too many characters**, the fix depends on where the bloat comes from: + +- **Inline CSS/JS**: Move styles and scripts to external files. This is the most common cause of high boilerplate percentages. +- **Large pages**: Break long reference pages into smaller sections. +- **Tabbed content**: See [tabbed-content-serialization](/checks/content-structure#tabbed-content-serialization). + +**If you also serve markdown**, this check matters less for agents that can request it. But most agents (4 of 6 tested) still fetch HTML, so the HTML path remains important. + +--- + +## content-start-position + +How far into the response actual documentation content begins. + +| | | +| ---------- | -------------------------------------------------------------------------------- | +| **Weight** | Medium (4) | +| **Spec** | [content-start-position](https://agentdocsspec.com/spec/#content-start-position) | + +### Why it matters + +When agents convert HTML to text, they don't always strip out the non-content parts of the page. Inline CSS and JavaScript can end up mixed in with your documentation from the agent's perspective. If enough of this boilerplate appears before your actual content, the agent may never see your documentation at all because it hits truncation limits first. + +In observed cases, actual content didn't start until 87% through the converted page: 441,000 characters of styling code before the first paragraph of actual documentation. The agent reported seeing a documentation page _about_ CSS instead of the actual documentation content. + +### Results + +Based on where content begins in the converted output: + +| Result | Condition | +| ------ | ----------------------------------- | +| Pass | Content starts within the first 10% | +| Warn | Content starts between 10-50% | +| Fail | Content starts after 50% | + +### How to fix + +**If this check warns or fails**, move inline CSS and JavaScript to external files. This is the most effective fix because external resources aren't included when agents process the page. + +If your platform inlines critical CSS, check whether you can reduce the amount. Navigation chrome, theme variables, and third-party widget styles all contribute to the boilerplate before content. diff --git a/docs/checks/url-stability.md b/docs/checks/url-stability.md new file mode 100644 index 0000000..d6ec9dc --- /dev/null +++ b/docs/checks/url-stability.md @@ -0,0 +1,72 @@ +# URL Stability and Redirects + +Whether documentation URLs behave predictably for agents. Agents retrieve URLs from training data and `llms.txt`. When those URLs don't resolve cleanly, the agent either silently consumes the wrong content or fails to reach the page at all. + +## http-status-codes + +Whether error pages return correct HTTP status codes. + +| | | +| ---------- | ---------------------------------------------------------------------- | +| **Weight** | High (7) | +| **Spec** | [http-status-codes](https://agentdocsspec.com/spec/#http-status-codes) | + +### Why it matters + +In empirical testing, soft 404s (pages returning 200 with "page not found" content) performed _worse_ than real 404s for agents. When an agent sees a 200 response, it trusts the content and tries to extract information from whatever is on the page. With a soft 404, that means the agent tries to use the error page content as if it were documentation. A clean 404 tells the agent to try a different approach. + +### Results + +| Result | Condition | +| ------ | -------------------------------------------------- | +| Pass | Fabricated bad URLs return proper 4xx status codes | +| Fail | Bad URLs return 200 (soft 404) | + +This check has no warn state; it's strictly pass/fail. + +AFDocs tests this by generating non-existent URLs based on your site's URL structure and checking whether the server returns 404 or 200. + +### How to fix + +Configure your server or hosting platform to return a 404 status code for pages that don't exist. Most docs platforms handle this correctly by default; the common exception is single-page applications that serve the shell HTML for all routes and handle 404s client-side. + +### What about serving helpful content on missing pages? + +It's tempting to serve something useful when an agent requests a page that doesn't exist. For example, you might return your `llms.txt` as a fallback, or a "did you mean?" page with links to related content. This seems like an elegant solution to agents hallucinating URLs. + +The problem is the status code, not the content. If you serve a helpful fallback with a 200 status, the agent doesn't know the page it asked for doesn't exist. It trusts the 200 and tries to extract an answer from whatever you returned. If that's your `llms.txt`, the agent may try to answer a specific question using your table of contents. In testing, this performed worse than a clean 404 because the agent confidently uses the wrong content instead of recognizing its mistake and trying a different approach. + +The good news is that HTTP lets you do both: **return a 404 status code with a helpful response body.** Agents that check status codes will know the page doesn't exist; agents that read the body anyway get something useful. This is the best of both worlds. + +A more interesting long-term approach: if you notice agents consistently requesting pages that don't exist (the same hallucinated URL appearing repeatedly in your 404 logs), consider creating content at that URL. Agents hallucinate URLs based on patterns in their training data, and if many agents expect a page to exist, there may be a real content gap worth filling. + +--- + +## redirect-behavior + +Whether redirects use standard HTTP methods and stay on the same host. + +| | | +| ---------- | ---------------------------------------------------------------------- | +| **Weight** | Medium (4) | +| **Spec** | [redirect-behavior](https://agentdocsspec.com/spec/#redirect-behavior) | + +### Why it matters + +Same-host redirects (where the path changes but the host stays the same) work transparently because HTTP clients follow them automatically. Cross-host redirects are a known failure point: some agents, including Claude Code, don't automatically follow them as a security measure against open redirects. JavaScript-based redirects don't work at all because agents don't execute JavaScript. + +Agents often retrieve URLs from training data, which may point to old paths. Redirects from old paths to new ones are expected and fine, as long as they're same-host HTTP redirects. + +### Results + +| Result | Condition | +| ------ | --------------------------------------------------------------------------------------- | +| Pass | All redirects are same-host HTTP redirects (301/302) | +| Warn | Cross-host HTTP redirects present (agents may or may not follow, depending on platform) | +| Fail | JavaScript-based redirects detected | + +### How to fix + +**If this check warns**, you have cross-host HTTP redirects. Where possible, use same-host redirects or update URLs to point directly to the final destination. Common causes: migrating docs from one subdomain to another, or CDN configurations that redirect between `www` and non-`www`. + +**If this check fails**, JavaScript-based redirects were detected. Replace them with HTTP 301/302 redirects. Agents don't execute JavaScript and will never follow these. diff --git a/docs/ci-integration.md b/docs/ci-integration.md new file mode 100644 index 0000000..0ac49ef --- /dev/null +++ b/docs/ci-integration.md @@ -0,0 +1,189 @@ +# CI Integration + +AFDocs includes vitest helpers so you can add agent-friendliness checks to your CI pipeline. Checks run as tests: each check is its own test case, so you can see exactly what passed, warned, failed, or was skipped. + +## Quick setup + +Install AFDocs and vitest as dev dependencies: + +```bash +npm install -D afdocs vitest +``` + +### Config file + +Create `agent-docs.config.yml` in your project root: + +```yaml +url: https://docs.example.com +``` + +The helpers look for this file starting from `process.cwd()` and walking up the directory tree. + +### Test file + +Create `agent-docs.test.ts`: + +```ts +import { describeAgentDocsPerCheck } from 'afdocs/helpers'; + +describeAgentDocsPerCheck(); +``` + +### Run it + +```bash +npx vitest run agent-docs.test.ts +``` + +Each check appears as its own test in the output: + +``` + ✓ Agent-Friendly Documentation > llms-txt-exists + ✓ Agent-Friendly Documentation > llms-txt-valid + ✓ Agent-Friendly Documentation > llms-txt-size + × Agent-Friendly Documentation > markdown-url-support + ↓ Agent-Friendly Documentation > page-size-markdown +``` + +Checks that fail cause the test to fail. Checks that warn still pass (they're informational). Checks skipped due to unmet dependencies show as skipped. + +## Running a subset of checks + +If certain checks don't apply to your site (for example, you don't serve markdown), limit which checks run in the config: + +```yaml +url: https://docs.example.com +checks: + - llms-txt-exists + - llms-txt-valid + - llms-txt-size + - http-status-codes + - auth-gate-detection +``` + +Checks not in the list show as skipped in the test output. + +## Config options + +```yaml +url: https://docs.example.com + +# Optional: run only specific checks (omit to run all 22) +# checks: +# - llms-txt-exists +# - llms-txt-valid +# - llms-txt-size + +# Optional: tune sampling behavior +# options: +# maxLinksToTest: 50 +# samplingStrategy: deterministic +``` + +### Config resolution + +The helpers look for `agent-docs.config.yml` (or `.yaml`) starting from `process.cwd()` and walking up the directory tree. You can also pass an explicit directory: + +```ts +describeAgentDocsPerCheck(__dirname); +``` + +## Summary helper + +If you don't need per-check granularity, `describeAgentDocs` provides a simpler two-test suite (one to run checks, one to assert no failures): + +```ts +import { describeAgentDocs } from 'afdocs/helpers'; + +describeAgentDocs(); +``` + +## Direct imports + +For full control, use the programmatic API directly: + +```ts +import { createContext, getCheck } from 'afdocs'; +import { describe, it, expect } from 'vitest'; + +describe('agent-friendliness', () => { + it('has a valid llms.txt', async () => { + const ctx = createContext('https://docs.example.com'); + const check = getCheck('llms-txt-exists')!; + const result = await check.run(ctx); + expect(result.status).toBe('pass'); + }); +}); +``` + +## GitHub Actions + +Add a workflow file at `.github/workflows/agent-docs.yml`: + +```yaml +name: Agent-Friendly Docs + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + agent-docs-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-node@v6 + with: + node-version: 22 + + - run: npm install + + - name: Run agent-friendly docs checks + run: npx vitest run agent-docs.test.ts + timeout-minutes: 5 +``` + +### Add a test script + +Alternatively, add a script to your `package.json`: + +```json +{ + "scripts": { + "test:agent-docs": "vitest run agent-docs.test.ts" + } +} +``` + +Then reference it in the workflow: + +```yaml +- name: Run agent-friendly docs checks + run: npm run test:agent-docs +``` + +## Other CI providers + +The GitHub Actions workflow is just Node.js setup + `npm install` + running the test. The same steps work on any CI provider. The test exits with code 0 if all checks pass (or warn) and code 1 if any check fails. + +## Organizing files + +If you prefer to keep test files out of your project root, move `agent-docs.config.yml` and `agent-docs.test.ts` into a subdirectory (e.g., `tests/`). Update the test file to tell AFDocs where to find the config: + +```ts +import { describeAgentDocsPerCheck } from 'afdocs/helpers'; + +describeAgentDocsPerCheck(__dirname); +``` + +## Timeouts + +The helpers set a 120-second timeout on the check run automatically. No vitest timeout configuration is needed. + +## Ready-to-copy example + +The [`examples/`](https://github.com/agent-ecosystem/afdocs/tree/main/examples) directory in the AFDocs repo contains a complete, ready-to-copy setup with all the files from this page, including the GitHub Actions workflow. diff --git a/docs/generate_llms_txt b/docs/generate_llms_txt new file mode 100755 index 0000000..8883dae --- /dev/null +++ b/docs/generate_llms_txt @@ -0,0 +1,67 @@ +#!/bin/sh +# +# Generates public/llms.txt from the docs directory structure. +# Called before vitepress build. + +DOCS_DIR="$(cd "$(dirname "$0")" && pwd)" +OUTPUT="$DOCS_DIR/public/llms.txt" +BASE_URL="https://afdocs.dev" + +cat > "$OUTPUT" << 'HEADER' +# AFDocs + +> Test your documentation site against the Agent-Friendly Documentation Spec. AFDocs runs 22 checks across 7 categories to measure how well AI coding agents can discover, navigate, and consume your docs. + +## The Score + +HEADER + +echo "- [What Is the Agent Score?](${BASE_URL}/what-is-agent-score.md)" >> "$OUTPUT" +echo "- [Why Agent-Friendliness Matters](${BASE_URL}/why-agent-friendliness-matters.md)" >> "$OUTPUT" +echo "- [Score Calculation](${BASE_URL}/agent-score-calculation.md)" >> "$OUTPUT" +echo "- [Interaction Diagnostics](${BASE_URL}/interaction-diagnostics.md)" >> "$OUTPUT" + +cat >> "$OUTPUT" << 'SECTION' + +## Get Started + +SECTION + +echo "- [Quick Start](${BASE_URL}/quick-start.md)" >> "$OUTPUT" +echo "- [Run Locally](${BASE_URL}/run-locally.md)" >> "$OUTPUT" +echo "- [Improve Your Score](${BASE_URL}/improve-your-score.md)" >> "$OUTPUT" +echo "- [CI Integration](${BASE_URL}/ci-integration.md)" >> "$OUTPUT" + +cat >> "$OUTPUT" << 'SECTION' + +## Checks Reference + +SECTION + +echo "- [Checks Overview](${BASE_URL}/checks/index.md)" >> "$OUTPUT" +echo "- [Content Discoverability](${BASE_URL}/checks/content-discoverability.md): llms.txt existence, validity, size, link resolution, markdown links, directive" >> "$OUTPUT" +echo "- [Markdown Availability](${BASE_URL}/checks/markdown-availability.md): .md URL support, content negotiation" >> "$OUTPUT" +echo "- [Page Size](${BASE_URL}/checks/page-size.md): rendering strategy, HTML/markdown size, content start position" >> "$OUTPUT" +echo "- [Content Structure](${BASE_URL}/checks/content-structure.md): tabbed content serialization, header quality, code fence validity" >> "$OUTPUT" +echo "- [URL Stability](${BASE_URL}/checks/url-stability.md): HTTP status codes, redirect behavior" >> "$OUTPUT" +echo "- [Observability](${BASE_URL}/checks/observability.md): llms.txt freshness, markdown content parity, cache headers" >> "$OUTPUT" +echo "- [Authentication](${BASE_URL}/checks/authentication.md): auth gate detection, alternative access paths" >> "$OUTPUT" + +cat >> "$OUTPUT" << 'SECTION' + +## API Reference + +SECTION + +echo "- [CLI Reference](${BASE_URL}/reference/cli.md): flags, output formats, sampling strategies" >> "$OUTPUT" +echo "- [Programmatic API](${BASE_URL}/reference/programmatic-api.md): TypeScript API for running checks" >> "$OUTPUT" +echo "- [Scoring API](${BASE_URL}/reference/scoring-api.md): computing scores from check results" >> "$OUTPUT" +echo "- [Config File](${BASE_URL}/reference/config-file.md): agent-docs.config.yml format and options" >> "$OUTPUT" + +cat >> "$OUTPUT" << 'SECTION' + +## About + +SECTION + +echo "- [About AFDocs](${BASE_URL}/about.md)" >> "$OUTPUT" diff --git a/docs/improve-your-score.md b/docs/improve-your-score.md new file mode 100644 index 0000000..85e706b --- /dev/null +++ b/docs/improve-your-score.md @@ -0,0 +1,136 @@ +# Improve Your Score + +This guide walks you through improving your Agent Score in priority order. Start at the top: the fixes are ordered by score impact, so each step moves the needle as much as possible. + +## Step 1: Run the scorecard + +If you haven't already, get your baseline: + +```bash +npx afdocs check https://docs.example.com --format scorecard +``` + +Note your overall score and letter grade. This is your starting point. + +## Step 2: Read the scorecard + +The scorecard gives you two levels of information: + +**Interaction diagnostics** are system-level problems that emerge from combinations of check results. If any appear, start here. They typically have outsized score impact because they affect multiple checks at once. For example, "Markdown support is undiscoverable" means you've done the work to support markdown but agents can't find it, which causes three downstream checks to be excluded from your score entirely. See [Interaction Diagnostics](/interaction-diagnostics) for what each diagnostic means and what to do about it. + +**Check results** show individual pass/warn/fail outcomes with fix suggestions for each failing check. The scorecard includes these by default. To see _which specific pages_ have problems, run the text format with `--verbose`: + +```bash +npx afdocs check https://docs.example.com --verbose --fixes +``` + +The scorecard tells you _what's wrong_. The verbose text output tells you _where_. + +## Step 3: Work through fixes iteratively + +You don't need to run all 22 checks every time you make a change. Target just the check you're fixing for fast feedback: + +```bash +# Iterate on llms.txt +npx afdocs check https://docs.example.com --checks llms-txt-exists,llms-txt-valid,llms-txt-size + +# Test a single page for size or rendering issues +npx afdocs check https://docs.example.com/api/auth --sampling none --checks page-size-html,rendering-strategy +``` + +If your docs platform can't support certain checks (for example, you can't serve markdown on a platform that doesn't support it), don't let those checks distract you. Create a [config file](/run-locally#use-a-config-file) that lists only the checks you can control: + +```yaml +url: https://docs.example.com +checks: + - llms-txt-exists + - llms-txt-valid + - llms-txt-size + - llms-txt-links-resolve + - llms-txt-directive + - rendering-strategy + - page-size-html + - content-start-position + - http-status-codes + - auth-gate-detection +``` + +This focuses your score on what's actionable. You can expand the list as your platform adds capabilities. + +## Step 4: Prioritize fixes by impact + +Not all fixes are equal. Here are the highest-impact changes, ordered by the score points they can recover: + +### Critical impact (10 points each) + +**Add an llms.txt file** + +If `llms-txt-exists` fails, create an `llms.txt` at your site root listing your documentation pages with markdown links. See the [llms.txt specification](https://llmstxt.org/) for the format. + +This also unblocks five dependent checks (`llms-txt-valid`, `llms-txt-size`, `llms-txt-links-resolve`, `llms-txt-links-markdown`, `llms-txt-freshness`) that are currently skipped. + +**Enable server-side rendering** + +If `rendering-strategy` warns or fails, your site is delivering empty JavaScript shells to agents. Enable SSR or static site generation in your docs platform. This is typically a configuration flag, not a code change. + +At 50%+ SPA shells, the score is [capped at D](/agent-score-calculation#score-caps) regardless of everything else. + +**Remove or work around authentication gates** + +If `auth-gate-detection` warns or fails, agents can't reach your docs. Consider ungating public API references and integration guides, providing a public `llms.txt` with links to ungated content, or shipping documentation with your SDK. + +At 50%+ gated pages, the score is [capped at D](/agent-score-calculation#score-caps). + +### High impact (7 points each) + +**Serve markdown at .md URLs** + +If `markdown-url-support` fails, agents are stuck with HTML. Many docs platforms support this natively (VitePress, for example, serves markdown at `.md` URLs out of the box). Others need a server configuration change. + +**Add an llms.txt directive to pages** + +If `llms-txt-directive` fails, agents visiting individual pages have no way to discover your llms.txt. Add a blockquote directive near the top of each page, typically through your docs platform's page template or layout component. + +**Fix broken llms.txt links** + +If `llms-txt-links-resolve` warns or fails, run with `--verbose` to see which specific links are broken. These are often pages that were renamed or removed without updating llms.txt. + +**Point llms.txt links to markdown** + +If `llms-txt-links-markdown` warns or fails, your llms.txt links point to HTML pages even though markdown versions exist. Update the links to use `.md` URLs. This is usually a find-and-replace. + +**Keep llms.txt under size limits** + +If `llms-txt-size` warns or fails, agents are seeing a truncated version of your index. Split into a root llms.txt that links to section-level files, each under 50,000 characters. + +### Medium impact (4 points each) + +These are worth addressing but won't move the score as dramatically: + +- **Content negotiation** (`content-negotiation`): Return markdown when agents send `Accept: text/markdown`. Requires server-side support. +- **Content start position** (`content-start-position`): Reduce boilerplate (inline CSS/JS, navigation markup) before the main content. Move styles and scripts to external files. +- **Tabbed content** (`tabbed-content-serialization`): If tabbed UI components create oversized output, consider restructuring into separate pages or using query params to retrieve only specific tab versions. +- **Code fence validity** (`markdown-code-fence-validity`): Fix unclosed code fences in your markdown sources. +- **Redirect behavior** (`redirect-behavior`): Replace JavaScript and cross-host redirects with standard HTTP redirects. +- **llms.txt freshness** (`llms-txt-freshness`): Generate llms.txt at build time to keep it in sync with your site. +- **Content parity** (`markdown-content-parity`): Ensure markdown and HTML versions of pages contain the same content. +- **llms.txt validity** (`llms-txt-valid`): Follow the [llmstxt.org](https://llmstxt.org/) structure. + +### Low impact (2 points each) + +- **Section header quality** (`section-header-quality`): Add variant context to headers in tabbed sections (e.g., "Step 1 (Python)" instead of just "Step 1"). +- **Cache header hygiene** (`cache-header-hygiene`): Set reasonable cache lifetimes on `.md` and `.txt` files so agents see updates within hours, not days. + +## Step 5: Re-run and verify + +After each fix, re-run the scorecard to verify improvement: + +```bash +npx afdocs check https://docs.example.com --format scorecard +``` + +Use `--sampling deterministic` for consistent results between runs, so you can be confident the score change is from your fix, not from a different page sample. + +## Step 6: Add to CI + +Once you're happy with your score, add AFDocs to your CI pipeline to prevent regressions. See [CI Integration](/ci-integration) for setup. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..e4f791c --- /dev/null +++ b/docs/index.md @@ -0,0 +1,84 @@ +--- +layout: home + +hero: + name: AFDocs + text: Test your docs against the Agent-Friendly Documentation Spec + tagline: Measure how well AI agents can read, navigate, and use your documentation site. + actions: + - theme: brand + text: Understand Your Score + link: /what-is-agent-score + - theme: alt + text: Improve Your Score + link: /improve-your-score + - theme: alt + text: Run It Yourself + link: /quick-start + +features: + - title: 22 Checks, 7 Categories + details: From content discoverability to markdown availability, AFDocs tests everything that affects how agents interact with your docs. + - title: Actionable Fixes + details: Every failing check comes with a specific fix suggestion. Run with --fixes to see exactly what to change. + - title: CI-Ready + details: Add agent-friendliness checks to your test suite with the built-in vitest helper. Catch regressions before they ship. +--- + +
+
+ +## Your docs have a new audience + +Claude Code, Cursor, GitHub Copilot, Windsurf, Codex, Gemini CLI; millions of developers use AI coding agents that read your documentation in real time. When an agent can't read your docs, it falls back on training data or other sources, and developers get bad answers. You won't get bug reports about it. The developer blames the agent, or your product, and moves on. Or the agent recommends a different product it can understand and use better, and developers never discover your product at all. + +Many documentation sites have problems agents can't work around: client-side rendering that delivers empty shells, pages so bloated with CSS and JavaScript that content gets truncated, no discovery path to clean markdown versions. These are invisible to human readers but dealbreakers for agents. + +The good news: most fixes are configuration changes, not content rewrites. Adding an `llms.txt`, enabling server-side rendering, or serving `.md` URLs can move a site from an F to a B in a single sprint. [Read the full business case →](/why-agent-friendliness-matters) + +
+ +
+ + + +## Get your score + +```bash +npx afdocs check https://docs.example.com --format scorecard +``` + +The scorecard shows category breakdowns, system-level diagnostics, and per-check results with fix suggestions. Run with `--verbose --fixes` for detail on which specific pages have issues. diff --git a/docs/interaction-diagnostics.md b/docs/interaction-diagnostics.md new file mode 100644 index 0000000..91ae2bc --- /dev/null +++ b/docs/interaction-diagnostics.md @@ -0,0 +1,65 @@ +# Interaction Diagnostics + +Some problems only become visible when you look at multiple checks together. The scorecard surfaces these as **interaction diagnostics**: system-level findings that emerge from combinations of check results. + +These diagnostics appear in the "Interaction Diagnostics" section of the `--format scorecard` output and as entries in the `diagnostics` array of the scoring API response. + +## Markdown support is undiscoverable + +**Triggers when** your site serves markdown at `.md` URLs, but none of the discovery mechanisms exist: no content negotiation, no llms.txt directive on pages, and no `.md` links in llms.txt. + +**What it means**: You've done the work to support markdown, but agents have no way to find out. They'll default to the HTML path every time. In observed agent behavior, agents do not independently discover `.md` URL variants; they need to be told. + +**What to do**: Add a [directive](/checks/content-discoverability#llms-txt-directive) on your docs pages pointing to llms.txt, or implement [content negotiation](/checks/markdown-availability#content-negotiation) for `Accept: text/markdown`. Either change makes your existing markdown support visible to agents. + +**Score impact**: Markdown quality checks (`page-size-markdown`, `markdown-code-fence-validity`, `markdown-content-parity`) are excluded from the score entirely when this diagnostic fires, because their results don't reflect real agent experience. + +## Truncated index + +**Triggers when** your llms.txt exists but exceeds agent context limits (the `llms-txt-size` check warns or fails). + +**What it means**: Agents see roughly the first 50K–100K characters of your llms.txt. Everything beyond that point (links, structure, descriptions) is invisible to agents. Quality checks on the truncated portion are discounted in the score. + +**What to do**: Split into a root llms.txt that links to section-level llms.txt files, each under 50,000 characters. The [llms-txt-size check](/checks/content-discoverability#llms-txt-size) details the thresholds. + +**Score impact**: The index truncation coefficient scales down `llms-txt-links-resolve`, `llms-txt-valid`, `llms-txt-freshness`, and `llms-txt-links-markdown` proportionally. A file that's twice the limit counts those checks at roughly half weight. + +## SPA shells invalidate HTML path + +**Triggers when** more than 25% of sampled pages use client-side rendering (the `rendering-strategy` check warns or fails). + +**What it means**: When humans visit the page in a browser, JavaScript loads the content. Agents don't visit a page in a browser, so they never see the content, only the shell. Page size and content structure scores for the HTML path are discounted because they're partially measuring shells, not actual content. + +**What to do**: Enable server-side rendering or static generation for documentation pages. If only specific page templates use client-side content loading, target those templates. The [rendering-strategy check](/checks/page-size#rendering-strategy) explains how AFDocs detects SPA shells. + +**Score impact**: The HTML path coefficient scales `page-size-html`, `content-start-position`, `tabbed-content-serialization`, and `section-header-quality` in proportion to the fraction of pages that render correctly. If 60% of pages are SPA shells, these checks count for 40% of their weight. At 50%+ SPA shells, the overall score is also [capped at D or F](/agent-score-calculation#score-caps). + +## No viable path to content + +**Triggers when** there's no working llms.txt (missing or nearly all links broken), no server-rendered HTML, and no discoverable markdown path. + +**What it means**: Agents have no effective way to access your documentation. They will fall back on training data or secondary sources, both of which may be inaccurate or outdated. + +**What to do**: If your site uses client-side rendering, enable server-side rendering. The second highest-impact action is creating an llms.txt at your site root with working links, ideally pointing to markdown pages. See [Improve Your Score](/improve-your-score) for a prioritized fix list. + +**Score impact**: Caps the overall score at 39 (F). + +## Auth-gated with no alternative + +**Triggers when** all documentation requires authentication and no alternative access paths exist (the `auth-gate-detection` check fails and `auth-alternative-access` also fails). + +**What it means**: Agents that encounter your docs will hit a login wall and fall back on training data or secondary sources. + +**What to do**: Consider providing a public llms.txt with links to ungated content, removing auth gates from API references and integration guides, or shipping documentation with your SDK. The [auth-alternative-access check](/checks/authentication#auth-alternative-access) covers the options. + +**Score impact**: Caps the overall score. If 75%+ of pages are gated with no alternatives, the cap is 39 (F). At 50%+, it's 59 (D). + +## Pages exceed size limits with no markdown escape + +**Triggers when** HTML pages exceed agent truncation limits and there's no discoverable markdown path that could offer smaller representations. + +**What it means**: Agents will silently receive truncated content on oversized pages, with no alternative path to the full content. This is particularly common on sites that inline large amounts of CSS and JavaScript. + +**What to do**: Either reduce HTML page sizes (break large pages into smaller ones, move inline CSS/JS to external files) or provide markdown versions and make them discoverable via content negotiation or llms.txt links. See [Page Size checks](/checks/page-size) for the specific thresholds. + +**Score impact**: No direct score cap, but the combination of failing page-size checks with no markdown alternative typically results in low category scores for both Page Size and Markdown Availability. diff --git a/docs/logos/afdoc_logo_dark.svg b/docs/logos/afdoc_logo_dark.svg new file mode 100644 index 0000000..19fb894 --- /dev/null +++ b/docs/logos/afdoc_logo_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/logos/afdoc_logo_light.svg b/docs/logos/afdoc_logo_light.svg new file mode 100644 index 0000000..6a0185c --- /dev/null +++ b/docs/logos/afdoc_logo_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 0000000..4397dbc --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,2516 @@ +{ + "name": "afdocs-docs", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "afdocs-docs", + "devDependencies": { + "vitepress": "^1.6.3" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.16.1.tgz", + "integrity": "sha512-Xxk4l00pYI+jE0PNw8y0MvsQWh5278WRtZQav8/BMMi3HKi2xmeuqe11WJ3y8/6nuBHdv39w76OpJb09TMfAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.7" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.50.1.tgz", + "integrity": "sha512-4peZlPXMwTOey9q1rQKMdCnwZb/E95/1e+7KujXpLLSh0FawJzg//U2NM+r4AiJy4+naT2MTBhj0K30yshnVTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.50.1.tgz", + "integrity": "sha512-i+aWHHG8NZvGFHtPeMZkxL2Loc6Fm7iaRo15lYSMx8gFL+at9vgdWxhka7mD1fqxkrxXsQstUBCIsSY8FvkEOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.50.1.tgz", + "integrity": "sha512-Hw52Fwapyk/7hMSV/fI4+s3H9MGZEUcRh4VphyXLAk2oLYdndVUkc6KBi0zwHSzwPAr+ZBwFPe2x6naUt9mZGw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.50.1.tgz", + "integrity": "sha512-Bn/wtwhJ7p1OD/6pY+Zzn+zlu2N/SJnH46md/PAbvqIzmjVuwjNwD4y0vV5Ov8naeukXdd7UU9v550+v8+mtlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.50.1.tgz", + "integrity": "sha512-0V4Tu0RWR8YxkgI9EPVOZHGE4K5pEIhkLNN0CTkP/rnPsqaaSQpNMYW3/mGWdiKOWbX0iVmwLB9QESk3H0jS5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.50.1.tgz", + "integrity": "sha512-jofcWNYMXJDDr87Z2eivlWY6o71Zn7F7aOvQCXSDAo9QTlyf7BhXEsZymLUvF0O1yU9Q9wvrjAWn8uVHYnAvgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.50.1.tgz", + "integrity": "sha512-OteRb8WubcmEvU0YlMJwCXs3Q6xrdkb0v50/qZBJP1TF0CvujFZQM++9BjEkTER/Jr9wbPHvjSFKnbMta0b4dQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.50.1.tgz", + "integrity": "sha512-0GmfSgDQK6oiIVXnJvGxtNFOfosBspRTR7csCOYCTL1P8QtxX2vDCIKwTM7xdSAEbJaZ43QlWg25q0Qdsndz8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.50.1.tgz", + "integrity": "sha512-ySuigKEe4YjYV3si8NVk9BHQpFj/1B+ON7DhhvTvbrZJseHQQloxzq0yHwKmznSdlO6C956fx4pcfOKkZClsyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.50.1.tgz", + "integrity": "sha512-Cp8T/B0gVmjFlzzp6eP47hwKh5FGyeqQp1N48/ANDdvdiQkPqLyFHQVDwLBH0LddfIPQE+yqmZIgmKc82haF4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.50.1.tgz", + "integrity": "sha512-XKdGGLikfrlK66ZSXh/vWcXZZ8Vg3byDFbJD8pwEvN1FoBRGxhxya476IY2ohoTymLa4qB5LBRlIa+2TLHx3Uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.50.1.tgz", + "integrity": "sha512-mBAU6WyVsDwhHyGM+nodt1/oebHxgvuLlOAoMGbj/1i6LygDHZWDgL1t5JEs37x9Aywv7ZGhqbM1GsfZ54sU6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.50.1.tgz", + "integrity": "sha512-qmo1LXrNKLHvJE6mdQbLnsZAoZvj7VyF2ft4xmbSGWI2WWm87fx/CjUX4kEExt4y0a6T6nEts6ofpUfH5TEE1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/react": "3.8.2", + "preact": "^10.0.0" + } + }, + "node_modules/@docsearch/react": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.76", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.76.tgz", + "integrity": "sha512-lLRlA8yaf+1L5VCPRvR9lynoSklsddKHEylchmZJKdj/q2xVQ1ZAEJ8SCQlv9cbgtMefnlyM98U+8Si2aoFZPA==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/transformers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz", + "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/types": "2.5.0" + } + }, + "node_modules/@shikijs/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", + "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.32.tgz", + "integrity": "sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.32", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.32.tgz", + "integrity": "sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.32.tgz", + "integrity": "sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.32", + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.32.tgz", + "integrity": "sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.32.tgz", + "integrity": "sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.32.tgz", + "integrity": "sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.32.tgz", + "integrity": "sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.32", + "@vue/runtime-core": "3.5.32", + "@vue/shared": "3.5.32", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.32.tgz", + "integrity": "sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32" + }, + "peerDependencies": { + "vue": "3.5.32" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.32.tgz", + "integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", + "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/integrations": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz", + "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "12.8.2", + "@vueuse/shared": "12.8.2", + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", + "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", + "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "vue": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/algoliasearch": { + "version": "5.50.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.50.1.tgz", + "integrity": "sha512-/bwdue1/8LWELn/DBalGRfuLsXBLXULJo/yOeavJtDu8rBwxIzC6/Rz9Jg19S21VkJvRuZO1k8CZXBMS73mYbA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@algolia/abtesting": "1.16.1", + "@algolia/client-abtesting": "5.50.1", + "@algolia/client-analytics": "5.50.1", + "@algolia/client-common": "5.50.1", + "@algolia/client-insights": "5.50.1", + "@algolia/client-personalization": "5.50.1", + "@algolia/client-query-suggestions": "5.50.1", + "@algolia/client-search": "5.50.1", + "@algolia/ingestion": "1.50.1", + "@algolia/monitoring": "1.50.1", + "@algolia/recommend": "5.50.1", + "@algolia/requester-browser-xhr": "5.50.1", + "@algolia/requester-fetch": "5.50.1", + "@algolia/requester-node-http": "5.50.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/focus-trap": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", + "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "tabbable": "^6.4.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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==", + "dev": true, + "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-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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "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/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==", + "dev": true, + "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-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==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "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==", + "dev": true, + "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-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "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==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "dev": true, + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "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/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "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.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.29.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.1.tgz", + "integrity": "sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.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==", + "dev": true, + "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==", + "dev": true, + "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-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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.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==", + "dev": true, + "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": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitepress": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", + "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docsearch/css": "3.8.2", + "@docsearch/js": "3.8.2", + "@iconify-json/simple-icons": "^1.2.21", + "@shikijs/core": "^2.1.0", + "@shikijs/transformers": "^2.1.0", + "@shikijs/types": "^2.1.0", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/devtools-api": "^7.7.0", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.4.0", + "@vueuse/integrations": "^12.4.0", + "focus-trap": "^7.6.4", + "mark.js": "8.11.1", + "minisearch": "^7.1.1", + "shiki": "^2.1.0", + "vite": "^5.4.14", + "vue": "^3.5.13" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz", + "integrity": "sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-sfc": "3.5.32", + "@vue/runtime-dom": "3.5.32", + "@vue/server-renderer": "3.5.32", + "@vue/shared": "3.5.32" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..31dc50f --- /dev/null +++ b/docs/package.json @@ -0,0 +1,13 @@ +{ + "name": "afdocs-docs", + "private": true, + "type": "module", + "scripts": { + "dev": "vitepress dev", + "build": "./generate_llms_txt && vitepress build", + "preview": "vitepress preview" + }, + "devDependencies": { + "vitepress": "^1.6.3" + } +} diff --git a/docs/public/.htaccess b/docs/public/.htaccess new file mode 100644 index 0000000..fcfe577 --- /dev/null +++ b/docs/public/.htaccess @@ -0,0 +1,49 @@ +# Prevent Apache's MultiViews from serving index.html when index.md is requested +Options -MultiViews + +RewriteEngine On + +# --- Agent signal tracking --- +# Routes requests likely from agents through a PHP shim that logs +# full request headers before serving the file. Three triggers: +# +# 1. Content negotiation: Accept header requests text/markdown +# 2. Direct .md requests: explicit markdown URL +# 3. llms.txt requests: agent discovery file + +# 1. Content negotiation — directory with index.md +RewriteCond %{HTTP_ACCEPT} text/markdown +RewriteCond %{REQUEST_FILENAME} -d +RewriteCond %{REQUEST_FILENAME}/index.md -f +RewriteRule ^(.*)$ /log-agent-signal.php?path=$1/index.md&trigger=content-negotiation [L,QSA] + +# 1. Content negotiation — file with .md equivalent +RewriteCond %{HTTP_ACCEPT} text/markdown +RewriteCond %{REQUEST_FILENAME}.md -f +RewriteRule ^(.*)$ /log-agent-signal.php?path=$1.md&trigger=content-negotiation [L,QSA] + +# 2. Direct .md file requests +RewriteCond %{REQUEST_URI} \.md$ +RewriteCond %{REQUEST_FILENAME} -f +RewriteRule ^(.*)$ /log-agent-signal.php?path=$1&trigger=direct-md [L,QSA] + +# 3. llms.txt requests +RewriteRule ^llms\.txt$ /log-agent-signal.php?path=llms.txt&trigger=llms-txt [L,QSA] + +# Serve .md files with the correct content type +AddType text/markdown .md + +# Cache headers for agent-facing resources +# The PHP shim serves .md and .txt files; set cache headers on its responses +# so Dreamhost's proxy doesn't add its default max-age=172800 + + Header set Cache-Control "max-age=3600, must-revalidate" + + + + Header set Cache-Control "max-age=3600, must-revalidate" + + + + Header set Cache-Control "max-age=3600, must-revalidate" + diff --git a/docs/public/favicons/android-icon-144x144.png b/docs/public/favicons/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..48d37fc4a43e3d2e17606a850eeb11db1698dc46 GIT binary patch literal 21093 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 AKmY&$ literal 0 HcmV?d00001 diff --git a/docs/public/favicons/android-icon-192x192.png b/docs/public/favicons/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..92288e9e5bc700566925fdd6f7f87ac87c92fc5a GIT binary patch literal 27953 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 LNkvXXu0mjfF~cHB literal 0 HcmV?d00001 diff --git a/docs/public/favicons/android-icon-48x48.png b/docs/public/favicons/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..adc09719a70a9d38e4b1d96c273a22ef9ea85c8a GIT binary patch literal 6480 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 P00000NkvXXu0mjfzV?U> literal 0 HcmV?d00001 diff --git a/docs/public/favicons/android-icon-96x96.png b/docs/public/favicons/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..5468a86830d7b84ecdab28e4f2655a265b5443bd GIT binary patch literal 13756 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

pg`rKQ;7 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 Oe0vYZ2AA3@RpBJuar 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 literal 0 HcmV?d00001 diff --git a/docs/public/favicons/apple-icon-144x144.png b/docs/public/favicons/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..b738419a7bf7ee60f6b82959cc67ace1772c0496 GIT binary patch literal 21093 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 Ag#Z8m literal 0 HcmV?d00001 diff --git a/docs/public/favicons/apple-icon-152x152.png b/docs/public/favicons/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..bd51897c75c37e0318a64a8664f30303a773b908 GIT binary patch literal 21930 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 literal 0 HcmV?d00001 diff --git a/docs/public/favicons/apple-icon-180x180.png b/docs/public/favicons/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf82ff6754e38ffb226434b0a365c431af37742 GIT binary patch literal 26282 zcmX6^V|*Rm*S)cAHMVWrjnzht+1PH-*tT(_8|TJ$(xkC%r!n3<|M$bp`JFE_Yu1^w z_u4qWzpBWhAQB=1000zuIVttevGKnP9rp8X|9!>jbAWS|SC)o5fri1OBt}fuw+8?$ z4CST7H9c3(bIgsgWud}0GdjVo;Oz^C-Vm^c{#s-TMac|WB<_l7iEdCccBDa+B3UaK zRvDgL3^M{CvN964~_3Ywo;_S?)p$M9Rfj?0uCOCNG@GUq*QUWA6 z$-uz+IY2UyGP2^c?K5<~6Fz^{2A6>ZvQy@@=PrN;H0+JPktBbmGs+PndJ=U>Jv+lHakkuynE z|0Qsu9UDUpzs(McFQ&YDaa^fxG>+cO>nWt9Z_~bCWAyjC z|NHoWVzr|D{E3@>L!pDo7(1@Z#?v_k?eI2>psP}7s|G=C$1R*|r3=>6%U8IgVOWri zBNsULXOYEMwI{rC*y%Vk#M_M_)IH@B7Rrx@-)2#2=Q}Z-njqBJB3KBRk+Jg}| zP%f#tJITJxTi7241_q8w@v08$+A4P5E&E9%&r8FEBn!N#Z=q)@p`l*V?G9QAZfuSX z8;2(DIr>G~UW`XzxPlv#TM43ui~_DUhSOO@kOg6b7s|CH=YdX1R2g{0I+xX#*gc8S z;;{Zf6hoGpw{Rg}%di&-w$L^8da5CF?dSUhtF3>-RPTfeC=RE=w{=`L$n{XvO7`@6 zcY42SC8PXC_3tMer*->dF>PN9fiAS;nbs2uS!crz6Nna1iJRXS+C<0n>2gVRWTKY3 z%v%{q32adG2cy&6AXlylyt~08E6e2I9|(chuxYv@xA3G}e~^aX$fil}eyu?&IjdM3 z4O`0H%O`TD#G&a3VrUskRf|{sG_;y!a4uf3gnZgI16 zm5{2tD*V?`z4Rt-JOk>}s}d06%cGNdSpEfbzaQr>B5Fy@L@_dX#^QA{fW0)-GINV0 z%hc3`X^@0G#E)11G#0#$Gov9#ELcxr=c?T?IZ7})56^;M=of{b6=id$X2_Un!@jsW zH1D`bsEkk+{bjtr*yLs*t%d0!XB-+40FbhL!Pg&5T8G+w z+fOvvJ5OVR7!TJ?Vh+gOPcC1dbVu1q{TP-9$8GG)K8Z&i6SxygUEe?yuar0CtZzk8-U!gJlp#LevBTVx=w1qlRR9XQTQ$qtU@Y4B+jx% zdS7lhVYHG7P$5H7877Z3hgNoLB%bj4RKdoy9fhwkBD{{g~IX~AO=5hGM+5B-w zDn}(Fr_8sq8*H-NL#Pdy)nnoe)@{?}UK~^`A~dXZ2aZW-c#cyv-OhVbB)fGVC+@vA zv3>csH4s+V*eI=FE@oYy>8jC=5@-xH1u^oG=#ve_M)>=u6q0^waUxN1sH!a*oQ~DZ zjaZHm)S;=}zhLwBv{z}ShVuoJmR&~VYahlOWP!Jk10uh~u1fLZ&HgY?bVk7ONZ^L) zlYMGj&YIcxOw|R&T2B@RQX(6a=b}S%?xRbeF@XcLsLd%@?X`5rI;);uGtu6Q;?|az z-?%}_HBm*UzJ^Y!ZMQ2X5?tppw(%FUrtaZ`=HE|_0qPO0P=(=*-vs)!zht`9ObsRu zEeB|?`@4FmndpNQ$0q*5N?L(lN-a1p2)|_MhrFk&2_lH<8(K_= z?3>%`4WIRZJqoSK!~l{4j1yx}?oW1#%dZq07lPpPq*RoFEAM#*B%E0{YHOw(W!a>Q zSxEP!L5nvfL2D84sAoNKjCE$BOpyiUjE-)1y}1zgEnWvh zb2g+hb2mM|NRgMU73)X#BEq}jm}NZ8rX~>XZ=W}>4+yOLU37SRrdMj;>E|ZLKgP1_ zQKl(9=ll1`3#UU3$k>)C^})=>r^}nhYw!*4NO7Ct|ILhyCjt|J4B9ZcEFSHR)feIS z=Y-IUoebJ#%Awt%q`CprBzj37(vO8o^UeA~A6m}TmEr+w>GNABx7SlE39o3E8~5}? zWPsy<*=bL8e~)@`>5k}iBH?Ox@EGKzX0i-9wivQIsE7|@D7>>XKvMmpYCtkp$F69= zrloRX(bvetv7R;Z5g!aSt82~jMN~0Odg}@Jrm*mwU@<(;EhwU{8KMobH83u|FFJ|Z z;q$~+|Hlr}cy7KlZPKkmfBa6s1yW;FeU)TEP1|Tz90+^b3mX^|9DER%Nf8&0$+~L4 zkf1Gj9Ekhd%>r74x_i~vbZ-6tgk4@dZtCF|H0DcUKYSNJnmiW%>(d1RUR&7@vYs8b zg=8&+)0NGTf)YcK+V?!z&Y1*+9bW>iGfC7jPkXum`60L~#Ksc`SDy6OOwZpp79f(i zR~5an{~nZ;Rx7lFO1tvnYO~HQ+nf#<+A!zywE%l4@$)5lgTZE=!F&K^Yro7mdtgWD zUYlu7-6Vrdi{@(fng!#s3U2oLv451=m8U-SiMG{h{Ax-|N{1m3uDJlATJ{zclX2Wg z#}Z;bi5I_qtTSq;8S;MQxm*qi=%S2ph}*yD536Sn^n+Q&&r&T0h0a1kzFE!=0|B-{ zQ$K?NnT!ggakPvB`h}d?NYt>J|2~3fR?-?{K-R2UkV|a$F(rC7MvM;T%zqbtG4p8G0^zyQ6d(d#wDi!AbnxMpHd|a8x$DHWt=o&* zSwp+hW0T;ASb#E?cVic>A4sJ?2(%%z4_&R>!yCIL8`nJzs;xNy7(W_LO7G#GK9a{T z_NvU#{J&Xj+$hh~PmhK5Zp#xbcnB}+^ z6dIJ|Fk_?Y0Xs~au+{m(x$DQ;|FNhIVLXONc@+$2TuCj0a|_Q~%wos9DrGg3Yx_j!)T98v!a;snU06l)j% z{hgF%U>HT4G&giibmXC+Gm2(LM-ad6b&Wf^b*=QGy(!kM(eA$UcRzIzb3`h)W_Ehk zT0Z#@y?|xyBjHonAqK)3jS)H>ulISOmfD>tyvsgA@S@3h$_^o6NhtnO#Gv1SR~XIP zlLf%yn|xB!4gG~xVZ`}{5?!C-TcjLr_$Ko2tH@|98pdPqR24-`C+!6|BQp=4ax>OX z`38_9q&Ypduz+K#%OoKX^M(rR@($_ZC8^(k3>uWx?~B*u{3o$OH=662@Ir+hh(Iww zTxUZR2X{@CK!q)5lkLrUZZK*xUIG>HFi{}Or@?4AR8gmOqphE#Cv`@HE2(p8F zB0ZLD54qymd~p2x+Oh>4} zFO-KuWRCK*dgeK0pro+hng5@g$iT?mv(GJvnwau=$ZQNWrGpIHV9G2>Ix!d`W%9X; zbsz3pDa+0N$KznKh(6S}t)Lx$InqML)&oE1!)D`8dPAEbF%(RO$Q}{;(&ebSFT6PL zxR^=~cS|ZHuxHlA?j_|3_q>g6}jS( z@WIo_YYIc+YCOX!djMy8n>A^8DmL0Q_bUwRRF%t%i=L>p!UoAcn?>%lL|8Fbj=Fes zmI5#;Cr!BF=cQUQxdh=}2Xmw)5PJ`Y%o{zil5 zwLYk{Ke9MJ+&9fpQoECPH*!?qUt3Uw&EeK?wEpK-f4`ROq}N_}@%n#4On>rFWe7nl zUS@4@@AAYLEe9Ol3F|Z-D{}DgJECwebawN$J5Ts(IIiSCqr){8$vhLip^D)oOCSJt z44U;A54FVUvEj;t-W9r`tVGoVTMO6ye%$q>|0sP|JaM$CpC8pVH}9ER=A!N{ji#fi ztG>b6y@LD%ar00j0StgARC(C*P(;NfHWpbFVhi>I(*)cS$>$<$N89%8Nkh!H%2{_3}F6IX85ph6j0CuGCbGZx5l&fm>y1uV6 z+K%^uHYTUzkk;~<7f~t_8P&4*G;@b1&@XOMVgr;Cv}%DU1^BmMUN1T!PN`)w1ScwF zfR%whQBu;bhEM5lS6_j*K5tYNH}r5vW| zLLh;H^70VVrj{n)zp&MNw#~UHc5l}u{3m6b_w3ngHlMYiAlrDjt+W}5X(Bg>Q?%!n zn=?;K(@^aDB+K|?KF<>uXS`wuv-cLAUfMgg?Y6tcB0YB>T4$Jju1YnNM=J!H9ocEg zkj0{KT5VfrN4YYmUXaa<<0KO6OanU{DYxwS$jWXV@YX+}X-CYzFZ{p2@>u9WbD<#A zOgPsd4at5wsmv7>Ej9G*dRk-i1n!{iL5BOTMV$L6;7USVBQtP9mNA{6L70^FY@F9+ z>~t!nR^cFtri!!HdPOBs%Ox7_iVv*u#;Ru6h_5#g0xCV*TD~O_Jr{SEy?g6>{FQ{= zb)@OBk^H9$TC~@IpB?<;8TMja;>r1IGuRyGscxLs*Hu-B)bEBZ5BPB6q`VVwD5^=X zkT>XZ>_6{QO89VF4*O;*u67gBf|E(qfLAN7X-#Fj{`|UmlXy<&sinOr2+|MDSfB89 z13fS2cq83bFL#TAXi%Lc7X&=jMDbU;-s^H%G0>;GiThfE@(yrPLe{oaZ&_>b4Nbh> zg>C=KBs@J_?ed((&Ey-gnKk?-h-BArXx#UlY^Cfje1g!6dS|Js!RdC;b}wTHzbPQP z9ZsF%H6FCx5b;#=3MG>C%o|kpHy&2f@s< z*aS-#t~y|wJpycJSpOy)u}?KZe1zuqr7c%jh)Akf zV^P+A#lcDWn5sg~s(Mh+8@?9h-NGvA+TR_0Sl@w@dhZf_$PLitK1KUni(vLum;E8T zee%;ZRkQC6nhQ2B6Od{vg(<#jD0Q;Ww{B`9(_wL=MjlK1=rwAwxUcVAFV1U&jSWrm0rwHwv~RCA_n5r$-Z2+M zx4Ot^OQq{T^5c_F#EmQuz!^EcRxEnG3(L7V!o63hM$Fns zpMf%Wj8A?_C!(bC)xBiFrD^QuNO<-4E`1^(P}x)z0AL)fgaWJ-F#@)TSs($?8MioE zhERf&4p63KPZ_QuBvpM~rVZ!_f=gRm0J7tzwAEhN1wbXJ<|yvPl-D}(FE;m2S!7&C zC_se*gSiKx3yl5+E{+;1;0jM063`~00sv%)4FSl022LF zJItIW-!5~Kj*=7!J12-kJq|-BVZLTra5(nW>4*d+Pjv%rLomg}AtLP1i4X$oGwk>Q zGcI>*NDabPs}l$D$&32|sBgsH^(<4AB>o_y=;MX%)3IZTK?4btZ8Vc;XiX^uY^cyr zZMOD+l((Nf!0y>2+n`1#%UU|WWQwxzwB@+aJCbw5FsKx zVU^LuDP0e?{yLUdOnQmevaaS(G0!e}=qc7$w^Rp^70ICiAoav7AkfM6etwX+BqQPn zT%LOw+?hH2)hQh%94pKI_)(}IOO1!$H}3tT`e5YQKvEB!`iKYd&g(iOfz;DeT6YZS z(QYs%Zpg6|9Jx=#|LW`J5AJ}G*4_@^agg@dZs|L}@x2TPeLuNxx}_eravnIS(=x2e zagF?$!BaG75+`Uzq&HlO*%l_dp%Fv*&`Y*Bl)Vjr+mTU7G`k6m?$J4lWl2YXimv@0 zs_*5{a7DXdj13+mPAAO@m7=1|7#v---4A=%67KJY*JGGXKn)89QlBaf{iZIlpXH`1 z(V5-+3n#yurzFSp`Zqxf+`w{k3P)WWbV&P6wSAc|q~@WGaRbaMXZ>R?wL}Y#0%A6W zOC05BgpUK!bJwMTj`68b)i1|ve%i~O$#SvSMZDMU(`b%#Ojby`=zV;nsET0~b!e+t z98(-OPLwrQa4F#q)cTZ*RZ+7#S|N%pbZvvlYezQ!C{t+T1B2mSPaoe3o|YNJTO?L9 zvrTfA=%Qss+|#`3f&nj>bL?TRrDSZ!*c)Zb0C zmGmz7DVM_6j6X~#nzf8&wg2XqPLnulPHg|^0p5cBAp^yrAnJbp8<>Eb^;&i16`62P z+QHLznBjLX`c3>z%1GPAeLD)vetZ1eg1Y-%-5Sf>P1JbLPqYVdfOV}a>MG>Ilgd>y z&%#TwNm2;PyD=W)1%qMH5%c*sdn{#_7-2ouHc){bL*PHA^m8~dFRX~jvEjghEH;6J zAu9NM1Tz)_Bz)dXp7bvb?uUrsHDGI7;`;le+@TlP_@0+dkypx_!~7q5ZxGKZ!)f7|BnTEBG5|a^{!^?0URiMBeMYaT;!!%qIZ-_P>GvKn&ZE z)O~|Ae2t0zrHj)q!mz&2=}hHczIt2BtLbRY$?{P#QJj_-SCng#A`>l(xT9CHSNUes z?fX-%j-vu*zf?qMqAA^${M6S~d9U2)m`F%`a+Q|-cfx)&M{B0-wTKxLB|`*;1hUx1 zx*NBK{CvmNuUWA=K;j-6TRE#-_TqOB)<*@3cLNXXc-0rWp8$7ZQBM$xsCkNs;Vlic z6Tg;I##2rVcM1y*4%tZ-8WC~&zF7$JxDwO5CO}uT+=-UwjW95Lz-~xM6MUBm0PGM^ zG0PEB)qJyC(shi=(meo9&#x}N9HRmTvUGP90jL>BJRO1-A{Z0lht0dnB^A@mPw@>l zv;0?SMaI35Fca0au%uS+|D^P)JD6|-O0eXUy%l~KGYM1xZrTU~2>t?Z``w-T@*JLW zNU|3YZ>jK(k*pc^dS%+|&!Qp~+>2ZVPV^A8aq8CXN$iCaQ|aBwHj6r3&|R}OXw_1r zG}hi8w-G2qwPzAe_mH8HV&2(q5mdYQR>ZqX7CX%|>ZNp-*1^j;deb8nq`MX*u#?}- z-00peL%hw$=;85^C&IiSrfO6Ki7z9n!Qo9-%T$C~LhWs?E*CV}DUou!B`^S>Ns7-Q z<)^PifApckNgR^D1;pvGXylZ^>wrb={&dL;jR{ioF*^%Uxd#U=b2tk5s4_?P1N5@8 zJU9fGcb^1t3~wwV1q6sR-kM(R7lxmP{C4oQoTDlwx-5~EB-!9uUk1i z%=D{o(}i2;#b8Pwh82$BZk!G*t9^Lqfpo~9&f%ZRMI&CW##!)s!BMYn-ZGv2!2cbG zp&==n0}r5i4y&m)>ip<46wA&=+vAt%(yCGUwc?=q##Ui7H4>^A6+vp!^0J!R$vv%U z4RkgYremoZTgr85-n5r&zmS6hIQsw*8T))aGhlCej4y1yqgmU6rj7RN=FHaA)C34+ z=^Y`ddK!O|KHd2d6u?&RLyaLNgM63H z=#XF_gF8k36{|<6%EzfWC?9e0=ou!X*E_`Y^qK@gfkPQh*+8jTe zmr*Wkh%1`htMLo$PemsrYxs!n_{d)(m|RDsjE6y#DOQ`$6F9&N1iX{hrRv~@U%0!| zu4aGYyMteZMuN?ZMGo8}XK(F4Ie|X+o2=dQk)n(pJRBfM`TVQc>mw`?W^}n{ysf7b zxzxjow=rIj#bB9uOQR%HNOYMT-Yz3yXqda%9KIeK`V3$9mlg`8U*jrOb>y3T@x)T) zN&J;$JR6K7^QE;2_CWVanbsem{ej~Wl1O$%P$qzj=j<3QcUR+`{-!ID7gr5U&J zc4%A@j0yLjg4?vWkNf!4z*1|zj%=Jin)i{+e9(5DV}LcjFRqMTM;P1V@AXcv9k8#@ z)1G3J?>?B5@nk{b;n=CM$b3O$J*NLjTwPdmCaupm!ph1S8|yVK1v77ARn0T#6+KNU z?Fs4;Tq4Z{u-N)iiN=w}9T=RI&~slM`p)~9pSj_;2s&Mr*w&Lxmtc#|$jHdCQ>T3qPRBB!9g?W= zxLY+7#RIeOLp}6`ZHvdKcZ80d$IU!1t8)=Ax0gHXplrxzv7E#2E~R5A->96PQ7gc_ zRBG3l$?U~?R*|7sDJ zl9j2Zf?G1KQi0BRS^#?$BXx2cfVQv9Civ)v^r$aUhIWOe-qtO0SjAea*Ik@+1@pt* z6Bhtja!hrbkkD(XNpAAt)mz8yqR4W=A0Wl>jF5%jsWPu9FW;l0gQx4c*v2U2%wa8y zZRWV;=k3BV^4Mquhc1o`PsGprLy4+YTnThkPQLJm_*bysUXK|1`fl}!n&pfg*7?vI zjCI(UnNBr`U`a)o72nYt(1yZeZKHU!ntK#~S^&eqOOjDo5Xr230iIL@`sm>@Nwv-u zL*8!J(WIX{!{w#^V-(Pk_t9(3^27S?0k>5a9_!VXeJ>K;$cjB@H;`UbRS$;YfoX*P z@{BFfFQiRZYRv?N3TxqJOMvzMr|zePxn$&mTj5 zdFKDVu9V{xY5U?Q3pShn_5D@gCahQH%U}z>oOA$kIUEjApY6Y!FdpSb`Atf8#?JZF0N1;C1oJYuov^oJRw-*oDuE1XZGLSw6QBEo;WBKeXicYS8x*^zZyf7f zxXcE2$OYlr+vDah-|sWD!HRnJL6M0UBUZqZq3^4~ia|W~!u8loQ6ToHed{p~Jh!x5 z@&f$v3~oJ(eU*j21k(JIH&=%cQ-04zq(pm#__Yi11%huVPXk_XatgvTaEXaDxiV2J z{mJG}t=ahy?Ul0nN-k6@yT_6-ZV&jftSXUvgp(r3hAt!#@RpcNCK6cpJGB%QFew{y z>^x!qkdDVVaDT!}=s*;uAX-c!znQG2$&>|RVCFuTb&}V&k+G6ttOtq=9$BBURR0*9 zfz1OYH3|r;w(Rnnz%VN{0p5OjV%Y-B)u2NGA`OcB%5?vwr$&b-eD|LwA`7|O>ypM? zzUC?(xa>?Td&M#(dKIv(%HICzbmc!l$g-lh`2Z5r?Nc;lm+zTP_-bF91Ps~ExIIp! z^-)ik^`qqli>IO~VOjp@<8oRfPLoS0&=n1JRnytwgKDuua7PY{GR-5XvR-{B?mK<6HT1QhsYe zI?m;TtERe(#H{F|BbTS5QHH{AwH+pBDNY$H)y4Ylh5c$E@b0eS)H3!Rl`^B@q3oh; zeZg2ZsLX$=Ym$xbQhjrI%8SKAJLwvOoqi3@C4jAyCUS4ji0M>qWl#*4tGU?=TgOQVTV z1e}Tr7}L+5!e&zl_Yb=>x|en-6-Nv&0#HdI z8e2dcxC##iaP6f77~9q%07md0iRYo=CZ%FXz}xEcYR>o!UlR*9l!;lT$xfXG4YTh3s@CA1NIaM@y_sF^b2fJm@;-SQ=i; z5L@q+9#{!D4h|_t+~Tx@0&q!+yFz^>egHh0#t1=VDEAx!P~&5*qHJ6fEwYAEv|MqC z1y;~-B_qQQ3=$68>$RIqO1>+^_V#l4MH16JHhf)Fv(;I0i29l1HyXUmk8SyV37-cd z5OoF3xN%^$KPE%F%xRBei)*|qPLhf27s7ey4d6>XEfeZ5dkci^-gZN2>T}W9 zZ(4rX=g{c!RE^<*H*`?27?{N#EQf0z)sM*Mu!^nXX{-+JJK*lG6b{>{@D*Z_n5sjS ztjr#ruH;2Nb4NYa^Y>VIE%PdaB(h0OdjNj1W{mi;VkV5hVKCMTEqo79Az;eL2Te{W z!Ihy61`yBYeC;RPX%~3?@ogJg7XA6xRKX^|nuH^fQzXS-1jET|sfoO_v6E6YT4X)@ z6?1{{NO_a5S7Jo){7?UmZ|5%-?^ zVJ5JXN>qze%np+L5T3BcZGQgceD{{%ip+hy2ldZ~U@}JwMM3dI)x|Px;82p zR~QbqSR?9+)@7Q^2c@PdC?u6g1Jw8T4PD++O{01Bmi|jbbt;zqVHM{Py6e1KEk-JX zs*y1yHAmd!JR2CBLy0&&FO~~`$>Gi|%&Tv!U^z#O-x(lM0kkQyY$L!kODaMd3vEJ( z<>EFg)YNw-s+2H3^n@T?fC3hV&oIx9rB0fRJb;Xh1^`(hBeYGWf`KO2h0Tk;uy>*3`tLj?!JzO! zZYYvI4GvG(>bYrmHf+PKc18gv_L27iX$BbITqiYjMZZvQ+)Rp02#@ZZ0Fh260WE1c z8}S#ep!zo_xh}~UtoheoKaCcY&If%GCgw@O#edJKS;v|FraC{&ciC3H@dGeTRZH_En)U2Mom1&!G1{|c3w_ezh`;%_@} z9?_EB-HBZZYdKY>@Vt%@qv`SLJ;ZoyvH&aTnG_InuL3Xp<2ub&q>@-Y~5FD zke2xcS_Yo#AAS{EAYW(3_P*H%^$2Vg6-mkIS!QDZLq1cFX!QnZ;cQyqN;!m> zBI&G#v8j$m9et{eDq5@1r47mVqT|CfVLf3?M%1Tlu+MhkHjORi8~wQ%+KA1Ka0a08 zmCgL&hbQG28eJT(En}Iad|ILk^}2!x-BV(Q>h#U|+ZFKJ$o{W1BJ0d=u~VC!+Q&n% z-xH2))84vP(zup9F8)qiq7h6*^6XGJv1X}Gjqa<{mo2~Hg8<7qtBCETUXE+TvwOzYyQ!PBuOxME z>7^^vq)C1+nbqFKnmRDn4vY;U{B7k>Y?gSkNu z9^6gS*>6iHo>qhPr9<_lQKiy51lnnKl%h$b;>N)Url?$iFRawLr7oqRJM`KfRr3WU zvPAgZTC*j^8uA_%B4!7QsM~sN3F8>7ItVzq?sAnC_UK8=gpzxO7W#eCcLI7ZvWE37SYkkZPklRj#2F#Yt!UK%C zGlZ_W5YetLSEKg{X^o|QW^s+5-=6Qoa$HX{H^7|tFjl+{EZ#FOS6aKwe{}SjbIh_v z@IQMOV7B{vL7MkD-1?w3C^rjvs1$%#A-in^y0$Zsy+N@+4tIFMR`k$_K!E0 z#9MyO&6LCVr*FxJ#X`LA#Cm$Tk83XPEz|P!Ivv>rtVBoz;WKJk?U!@J5sRryS3fW3 zp$=nEVmg)Gl#BEnOV$|n`M{(a%>~i3^x}wQq!}n4eEkH5dafcG>+eZN?P$AG^ z$VVo1zWbt!7!l5ND1GXBYT6jhf~TYvE<1rvPYXBUs3hlA>r^Bdc=9hJ5>}%EAmr!( z{jR4JtmJKVAkryRpgck%6y_)cN7$W(aJD_MqafdJYNUy2mxay#$JVpl9R%rv(-)me zjgwkTe*&-Z1$v%NIqEmkr$ZQ_f3{|S1u??8UMfv(6T_|K8HmtmO5|$LA?~S(P_CMH zd5gj!V9}38^qc`oK*vfGLUDDT`Q?_&nc7TypK}$e9D4I_2)4T7;ibM3GWUyoNR+Iv z;`t%4gk0-USoM~O1d9$fB+e%@gp&^S1r@2sjERNCjGQ@+6r7u$A~(L&UcXa|>wl{Z zkWY4HE(v_}1)6o2%5>g*V2k_*0B`S|Ic= z;Y`-C&n8fkZ9VD@LRJ!>V@VDk-Kh>mJ?DF_aNnIul_kpKb9js?sW$~;+9f+@ugB4^ zs`)Bkw*h<2f`k#Y43TQ_W=R@(?L&PmR}7K5-z&&%=GNlr!=DjooFeJvgj9tJD7zDX zvf&#CA9J$?u37gRn-MKpphwtYto}lBFZ2@yH<(H+he*p6Q2o(u^BzSRq%E@U&3l#f zvz@h=Y9L8G&x5yjbIMd)Iqt)qjcvt%NGYK|YixwiK_QA!RYIl9`pIMM?CfMMwp3oe zS>%9Ut@_Zua`Q}`-2wV=*Yt!dFk4Az%(PDWrTJg0&NduM@K?CA6lK<%GWH-Geku1r zf^O~_Hk!G}(;?{9P*;rCw+><2)-<+U7MG%t0STz4M5*H3S>F5^v0Fnt-1samF~=DM zSF(ZezUl%Gf3BfgPFP;}-{_I}v;-N~j`|qdRA^3HMm)7XDj;&sbo5|JGB)|$k|$4N zgZ}$md$d0_uAP0Mh<50bRoRS9EuLC?jE`v_W*-cHm-o|m^H6z1o!hna@h082iQiH+ z3qp-ebC#&JQO}VbNSX%X=mR%QZ91$82sp!B@Mf-Lltlf2wk;%MPaNR6Vv#D1{{8)DV5V|f6r+>9osN9 zGg#?w?6U^{8mlYCJN^bBaP-`^H-`D__npY}3WndbLPV$l%B5T-mMKhdxZ7uxO?CAk z6?=+1epq)UtZ=TJtOyXsA5Z+|uLlJ3gT$ZVN9x}IiB!o@vDo=<&TwqG(Axo0-Y zGEpv&AsI_bj9LSZXCyxoA5TpJF`ySdmj*g9K#nC1(qy9&2i$)4o$ep}(dqdfzjXGg z??6FJzncj@xPMLeeImyZGzGaw`c)<}v5X3nsz72kv$%ezL(9cua#fI^Br%*OAZu3r zkznBt(hWNPI*jnP;ZQSJ3!-51S5}`tPkvu=VgSx9XS2OqyNdDTn3+aGwO0!)^1{X+ zoCSrqGL;iuRXJ?Z8#OuD1U|*6*!n5xcdzzuJi-IOByg-`ZnuW zQ0LixdIu{?C5}wmScobB?x=I?rqkY}LCm_|` zo=qj1|MvH`YuQ3f*t{y|7O*z->F zhk(U(s3X2-9Dmucj?&Rj8cioW^dODFe-CuB;1ac7?okxxt8Ez8Jq=?Vv~aB$mQ)&_ zdn*yXQ*wK+W;G!u!knzf&`LlEsJ>sSrd42*4M1fvX5)ruk^_rayJ##H#t{|!C+MXUDZ;I51xbV{H75SW=j!>e zF&T`w9IL{#m(WJ z?k_G1apBaN@p&3R-~f!FFJDg692b>)fVwC#QkUcGju`Nh;eG2 z3gmRR?0NVc#`D#7g>^6PA8zz-JFCl0c9w(=qN6oI=a)Ok#hiWF`4dV$ZqIZbTL`dQ z21=p+o7Wn7xjAwVGRjeUAAEy<6W^7HW+OcxuGeaV!>iV4PhQed;xv@1C0Mdg-0pqa z(R!ejB!^tCefbpxyxPxcSGeoGGfW*lwC1>t^OTxYM=j)NbABspiT#5z&;RFLL4@JS zrv7js53G*rIwZ{}mly?aTX&fDX%|3@5Q7M(CvnoG%=WpC1Rxf;sK>|PMB(0{R7HCF@yYHN0d zch{HGq(<_mvb|Ud#lSTx%WFGvXBRpnD6#4G`ggJgWuT)0N_^%+_NueXoQ-Lx4VD62 z@~g@N-t@$7s0v;`n`k=y>`%K2h;GPSqmve zS8EmaU4T4XAC~C|?HKSsk?R@QRq!+@{Yh+ai}GQy zYiqJbsc&|}I$hPyQ=Ck3PSv}Z7-cGRZd2Az5@KxY{5(Oj!6|-dQ1`B$_*eWnm>>bp z@Jcg_k157x1~*KTj9`!bs?|theV{V&vaPvbb`s(aEAUkwcYD&OQa(Z!5u;WzH0#CTb~x$_^Q>U+6v)^Dft;XewYc(fvH>PX^MOD zW}E&Ru2)Sbo#?jS6jB`@hc3MwNQ5dQ|qI#-nF(t({9`@+t-9=&zjbzqR>jOfge- zZ{51MNn$zp%NPiM$(~_j|9V5Q|2ub}tL3jBS2?UbeX{Do{XmXYJZ>g!$5$x~C)2a@ zUq}dtzhnVURJAXF31F{WRI#$yhIp5@h$uc9FOk|U_+&vsQa_BCmPnqYIr!YzhhtG; zM5J}QZq$z50Jc+B#3H@^Qs~F)DPQNdY(}14DLzXmXxRl%TAgwh~^F z-kknO+)O%QJWzxTYP&*MD^$LYw{|Mu9gc5r5Mw%V-#FIyQpVA~?3(_fqW)6*YCNqJ zp3Raw1!fMY-c`G0Y*$Jut)S6O%1ie3x*U4Fd6b~%Rp7Vb0UdbE+yBb%fbw$_*(5@v z-@i!VKDLAqz=RzzRN+hcDd9=y%oc!N*^+Lp=4yNB&(L$QncXtB9lY zL-}QNtZKXubxk-HMjh%NX*Ccuwj*^JO=4#ZCFi#6+l*>n^G=9M><=GR!cdA(DruI2 z8K=`1Pf-@~8X-SoRO?gHylw7#r|2%4tK`|HHkR-Le|W2c_RCOw zN~=usY_zlx`YlDpINs@Q)8+}dpC5nBqizlVR2BZXMv#6x zMm`t})@9@xy(hfQiVwGh@VEw`UEA+xmBixJ$|~|p3)FbD(&7Si-4?F67e%vV`5+~~ z(oRsGJixihJ3n_t|9O^8WPM7#qZHm0&NL%Fmh}c4!*LFs{3s5rOH>OGwUa~!$QZMo zba;tSR`n7>s-ThZ@<~NLF>cbi0X@I#YyTHe?`b9zHnn`KVQ9zwsId|en0ymVQ=S4# zdju}CUoL*j(~I4A_G>u`!HttRZlTXBn^v5r*c`T_4k|L+ir(RQbl=GS;X|Ow4_4C$F$Ox>bYk?U{qU#uB zwUN><&yea(*3{i7QX?U8H)rd5zRGIJh~_bIdHm2*7UeqZQ)%!;C#FtL-Xr#dd|!^- zxy`wDi(~1D$V9Cm62j>5JOvZr^>@Z#Z;!+oB4Rp;OQ3?9AhBGYhCX~LZa{7-K4dwk z9Sv?ipBcI>8bueCD%!W5)tVm$TjWMm@mL0|BkoTFXLKoo7W0tf);w3-TRbo3n9DM6_ROyK94 zQ0-z_bEu;l^Yo3nn?i&PeFufu0WklKJ}0lI=Lm5BunWso`g-v~nCuDegPB8WyuH24 z8M--Uusv@IAGM-hZ-X_gX-xX%)+eV9HYWYR?pFOt)IkjCs85{`O(7X{C-L0y%upQA z*HgBdR9a6uVs1BZbEdKu9%3_-x}!0h%muA}PC-fdgyI+10=7?~WF(5N{eqOmlR5zG&o`avWaaL)& zwB5Q+oh$e+by0IltTBeeYH9fLeYg#|z(9_3TgL?Zg{b3OS6Ck%bi`*T;U`2UbCu`& zX#G2)ec`Y5$d%#-h?GhbzxJXBpA(4LW1;{wdI>KhCB$!V0315zyCm&cYc6w#MvRHt9A* z*P?i!%$J1G$w6*e26^HHi@rj<>Gu0cGFKF}CgCKW)M*1cHtT5gIMe~Tu}ICZL;G1cp;~QwFEiWp$>1Q{I(vK}LbRQ(KK8%sr_MDRy|LIrUOT3Lg#i#W!Ef zJU}AYpPLHXNp3)cPd8=Z`7n(&Zy^*>3I4{1deB>>TW;en0^j!)g%R6CF&LqM#I~^JL#vz|yv!;33U3g#eGYiv z9~2~SQm@XBa0&<*C(Y89{g4Kt{;#vMP>ZAM!ffNN!6kTb*Wj)Jg1fs*kl+mjw?>1z z26uONZy>n4d$8&6pJ#4h>H<#Ld8$tB{jOD>2m8!Nt3#(L2X@sRj#m1f@UXG7>`x4@cgFc>OwIt~HzEv0 zI%Yx*tYVpZps(AeNYX^M42Qjv zZgKJ)N*vK%z^AN@P0BTwCf$Y=$iaN_`avkugQt2fa1R2^KLk%x?d30UR_PkvX_~-Z zRs94nm3?S5S*^I5S}a!RWga5S1G9=**hK49o@kuOu4PGTqHB}}P`UWsIETAU4vc!i z=Z8CU=q1Fk3(TzdS1V^1J9vzDsv9u4&PTo|wXZ-x}sKaAsM&B^l{t~=XR=t^37t?^h@kEW%i`(>t!JY3?aZSBJa%ZuDrGC zb(urW&3&Ev&{oMWW$TpCmYi>qXc1bObU1OpwY|6;CHS1J+v!2IK9qZK9CH;TxI6VtJU3tO{vB<|63$u}ktxFUpQH&QWYQ4w6A6;hX>;MUK)5;B zV`Up!ARXibqt#OI-0ns~`t#J_6KZ|3RK}jd$ZmmDyoT2}{DhQ?3bx;%MMX=EJ|FD@ z1rl|PWWqTC^(4q2xe#G?f>31#pwr5@o8wkiny%a$kDGxtNomRuaX>jSooKz9?TYx8!*|gj2XI>6W z+so1{D(muGckreb0UZl&R5cCUL_c9!>4N;9(692XVON2BGU#I5 z)(QnoU)%_rvEXGv!pYLm%hB%yak~p)96QoIlsa&DFg4^&APp$cFPuWkN8m-6Uhk}I-$ckDRy3U>%g+||>Y*go;_&@X>#N}SR z_ENIAB|mU58mu;hf|XF<#C@3vj+y3n)&B839BSqy9>7cw5%?*@U*_CK5Q>`VPULR8&+(^B`DLetv#} zgbJE2BndIM2xnK5U%`DEwDJXGUJ5He!pRF35`r_(~5YHpA8+@}0(NTCn zvV^j1U(h=!hHDkGx@#~lMRx|UDYmhy;2?gS2441)7E7G{Xj0@ymzfJ|pqR`lR~*;d zr_;j}dg09lw?fXl?sL%63npN&S=*>dhaWktMudz{WX+mCkgSkSPLzVK%SvTV&v`n4 zLqStO;n&zF={Y&nF22{t=bhhf=^BGYukAOAyc4B3T6OZZrhh}z_4>?B*pOhLM9Jd? z%sEC8;_b;7<#_ib{4>Ko69d+ugFV4Qq>#%WhlvDPAi?%v%$gIGiB`;(&ILt zEGJP(Cx7=L1&3ySK>!vGjY_E^BjqqJHz_@hNAA&UG|yy1Zw#qdyH+)^d}EO6DhMou zC5q>;j=>67TuJE?D&VC54Hog!l(s5Y1*DrXWCNbCVK&Eu)l^iTuhL@5ME@?|nGzy= zx1CP_#fO29t(Je+(pz=L8kh&yV%Kkv4#^E`(*>Ea43*GedcU8v3TSR?rf1kx&M6cP z&&V!=)b`MUZcziH6P`{Q2k?G-g%xNo*PnJapEV(sU5uVc$wWO-h(kc=*l2EKzU6gs zv7R6BGu-;D570u12MttNMj0;7%l#rm-%L-qu&SB~Q~tpL&DYELErw;5;vG$;X?{hH-qs$B|yGXkxKk1cH;jWitwcS4f{pAaO6RK3o=ZH$n%QQ$T3c(A1C)w!)7w zzKmI!e^Xzk82Y@4NsAT0p|;p%Fai^jmKZ$@^91U3307UIpB7EfW_<4WY@z5-XzPDC z7(FdPPr&9*kBtmUkF+)8@*YJAm<#pAwE0>27h|K9KV}6mtiYTr!GsG@PS2kzI>oS8 z8DMuDpJ^JYZe1t-a*2@OdTd;5$WG^+_@f`64;Av5TIJVPVk0iWybc;3^+{avo#agj z`!A~T-V!1!8F-z(9cILvL@ov`A)!jDAv&V+Du%byKC^EkvYzFb)C3lAdtY{bp!?(Y zt$Nw@XzTLKVD?Am!q&X1Vki%tLNGLo*V0W}UfR$DC(Jy6Os=YIB=z|$UZc)XFfV#X zHs0OlS4G)e6n<&{jP38?Q-`y)%z zG26h|Ku6(Suh!Q_#x`9}Jr-rddD3x~*v{wq^YS5vJ**X(rhLZdY+o^9gl+C*jON#H zOp2iR_d+2XH1V6hu%CHY6eNTr#Dpn6hRRP@ckK+Y7W@=42gsA8|~2p&--OBMlnbf)4yOD>XF>18*ZR>S)EL%cil; z2aydP=%3zupoEeMTnd1`a~{3Wy>BHox25bF<(DL|s*n>fLbeHzHJT%Z%&`rrG=!u2wzS`up)i{A`?x8 zK`}>Lx%abDzULEIG}fLonYYq=^vN&aVwjzKWT_0^|u^dH_Nb=Fhq@I5 z(soi0n}WiMKaZQy)iF6M9A<5&50{HS7S%Y#-(GC{vbpr7WI?-uyp-Lck-LE=mj<3K*(-}fmL+9YQ1A^z)idm~? zD4(jbl`L`G@xFhxqh~Tb7it+qJgY}nZIz6?e`bKm6!*V;`dGmDlq@?p3SEU9xnWSi z*yT^3Qjhb?Qp;%FSLTmWf7Ufm*&Jl=?`n#~zjtZUR|GuCni+9qp;85ZPhL*c+tauF zBs(RwCqn(d;He3Y#ocGj4~4nOz5AUH|LV8L>~n)?FRf$Gxh?oM4npO-fMdU7KkZNW z;=LR)oED+O|LXIAilvo}lUk-(y2OkPi~=dIN(i%V-cdMWIHs5xC;=^Xkr;O1+MSFw znSx*o(owr9-l5d29I?QyEf8ozB()RR4yV(Nn0%jiv+5{ZASHg$he+BmL-`!+{fY-< zw!mV-!Y$8XQOn<>R+KEe3CYH3vCxN>buUuBK2d>(h#{b%XsAXo*?_NN{=E^zaeZ3S zOpBkhBlZQrc)1rDP3LyrH5C-}HtzDn>I{asUAf-g2;@fb7lkN*Pv0=>Ibm98w8s_s z-3aLAe8pzasn}D5T2=R_@~@bOcky)s z8ge?7)B2B=Jv^}W{=Dh8nUCfSZiI+T&QAuE9VDm&W0DWVk4e-saB!0z)xR`zC#1bl zK2C-~K+v7iiuT*oEEyal|0*>8|8e0}zwoCwmnFa#9Sr`$U?x!-5*qQZOAoN$zc+>W zOE7?ZcN7OGvuVsd3tiDG7*2=&!929v3;ew(85Z#7Vlu2oCENiWVVaAmkRS?~O(2c6 z90mwmd9ATRZ6SFAH1D|Hh-D+?RzPzKPbO&Vo&KA+=MQ9;%#58UK(2fBh;pM}@}YX6 zqGrUqzVwDq@>O{WUglhc=;qI3%wv4}$aJxkfVV`C+L1PI3Tdc|$0r6O&E%=%>$O^uEFL7Y1&bfzqVsR)W zO;8V~!mnEzfvDJ^6bbx|qP{kfbTESCb)&=SGgTlBv>O|}yx;&ABBrR$h(K6IBi*#} zwOGAy*X?$lM-KJr5WVFRily*t-DpH_F9k)KJ3;*}g_XI3h#|N&uufQxQ$XYp44^|q zv{Pa+CVdWW6h)q6;zBv<7pUZa3>`iw?KG^^2mP}0umu;ji#k|kudf9x(?{Bk&E zwCORwu1(dMu~B--tccwL#7c8!QMiA!S?Gu_ziby!l#A{seruSR6~GTn#B`daw_luPKfT$6+9fhF z3)k3xZF5@rxwX7)!~c6B-9~RN9XTeqfcQud03_DWdj$y^nWfwgjvUkulHUcfDOvYL zHW3?ktDgJMd3trT^7i zk*W)x=%qs)8+cF z*0Q=Qb}wTj8^vna?se-Sgww5Z>KH%b+ZPU7QX-M#Uv&$;tXeUE3q+@+0bug=L7~EP zN@#xPSCcv$62=6)xDYg>ak-wMVp2SIuL#xDPvF%nfRl!JLy8$z8knbTPk%tb|`&H%wit=A{2GQ%;Q8 z9XL>aRDzRyigP9M#qR6p*_+?ylhee*S&k!rhzI&tM;jZNn(Qnpv1rTPcRj~NlLOGm z9D3Sn*zKWHs}jJaF;qJx$>}VPn0aN{>DjaF1)bZ6W;}Nh!M05n!OfU)0RLb;!Ze~bS@GVDVPL0=~IWBp%EV@zYE$qxzC`?iy| zKKBmwwdN)(1W%)5l;-2uL{ipS+&1jL>WVIZRo9p!R4L9DKP(pre`oL%-N{vEf{`?` zvt?V8{*ls?E`1#TEqv1^aQc}JT1dH2e)(!7C(>WYTzD(3EJLFZ zSe62VCSlc9GwX33CkTDag{EYb3;p`yoVNdd!|NB<$-zs!XQ@s#+=?PF(5J9l_;_+J znz*oXoN(GRs>r?)2TIqcH{QfQ!^M$*SS@_hX=XfJOqL=TV^!nWiDkkzLND8b(s|?s zEnXTOzS@xk2*}Qoves2vVOmFnYt+7(vKXWDuZA?id*@dhWkfP(TSwYyAvcDkhngaw zWcqn;cX`m**6^IE&EaZ7NN<#(489F}(Yibs@=iHkz%NWnkuvt>&<3vQhSuXvq?V|K zU!_H|-BBZ{rLk;)0Sq|IIEAaepS~dqvJ(6W0Q0TdDz=_iHgp-l9E|&RsLFEmJU}!y z(GDOAj>o!!%_}NhQ;!Gw004T+(A8Y#a7FX#(+LD{SnxKsC`uEx*Xbt`4R_IYg(X{A z17DKNK^l7nEY4SGP$Emb_#`CQHN8Il zKRzpS5>T`4#8OjJ;W~&tm8vH%nZYn>2g-`nmY+dw%}iC5og;g9PFFVl&^5O%ZqNP^ zv}?J$N7@+oi^M5+<&Q{at*TL26~d8L11+F0=FCChEj!DK_0caeXXLS`-pPnbLh1;x z0O0st-~aVmNI#k31LP6Nyup%fcTB)siIT zdCC%1TT`*KssADIz4~VGLmIC_XsbBUnhFzSooYtTU&<6`G?5sRkt zjZsh^@7De7o8k{PY(+;iFRpn=Yk+bWi7 zx=OM-7vexsy16;c64nVs_SSlh3f9v~1GpZ9jg%=Rs>{=oWyYB6)&!^gnii0IDX_k6CQ11D0e^KG9Y$43no!Dp6YsN_<39J1 zUqMXXv+`L0chHyteU|ZGY-~5%gO#$K#@k}zoV9;?bXmT1UgGke6sSOfH8x^$ZdrB! zd9W-Q02KCSLBZ>c0?>vaHHFJEpAP4rOJQYWiVPt@ zRp@;G(`+5D!hV0qd~%xqSIgcd$SFs%4`A;AZVI`-|lBSO%tyR*mYkGUVjbF zx0@5$hyho_2j0$<0$3z#DZThe3t0=-&rk`<g$|>4K~Xm%;C$;w-^5$rY5!=t zC$^(m*5YYpw5~cfx0>a5)AtO+W&w~N2HC)aFE&l|6ymJUG0Lp7sO|_4B@X%eHIgsj zHPj0r+C}~b1)%v(0{D*k3;;Yn-L{XmXY-nJ0%{-yaDeeHMYBa*FPpD|mTjc9n|;i< zZj z%QX6M)bVnvdThGEceI-cvmqX^ch^ppQhBHEOK<)mGUeOu*$bJ}?lFG|SKnP~S~xnc z-q0{~)0NiOZ?8rQ2A4nALxAHB6fErDMGZ=$4fk19HrLOF%wzo|`y$q{@<}9&wn>Z!Mpo_7`EYn@yvX?j#Ss1TaZ6@E*QP`c zp=8d|lvT+i2W49tgnw_GS6XymBAMl)9WNqV_VOTBn&T?NtPksW2>*QZr0*r7xR}a} zC`UOg%XZ~vHTO8$Sj32BB>c+gjokU@wmfEE!+Xd2Vhkm*03taf*;14GBv6A-4BFrb54|;tuI`USz z{=!Qrra>XWL8pfdd#k^NsyNl4ZmEq892%knnGKdJyfk(3Ix8B~%IKzIkBL_Hy+JY1Rt70l$BxSvf*FB*8X+d+joWDT}u zdeY50Sqtb3N;o{oc5wJ6yk!yx31p%*Ar8q0wM4)M?6(!#Wv0Kfo3g(F1LPQcWcFU% z{EMJ^_(Z{p1eQEzIkYXyFrP{)(g7#4%H0?00ox4dfk6AoKN*`x^o-*!ikV+aOFQj< z8lrTy%@^C&o#=MoI&cUCQpY5bm1#^ToqzwQ)jw*|l+)_b@rSgCxr8vcOnj<-(H?&_ zW8Ets+KR8|Gr5DTkScMHIjT4r@Y@ji9o$SbY=SN5H~T%DGZ}k0lrzEM3Jq}5c)W(F z$DFB`1Nhe4R6`1&#EQ{2=NW}~j|v%Wl!%~)NQ>!<4Jz(3cgtg|mk9AQi2~^Vov0en ze77y!u4z2G<(PTQ7c%HV=Z z`$F#mhDYnWV;lA^-}d|%6uXAs11kyAV~|?mxIme@y0GD13P{4A-7ovaN0aXx|G z0YUJY)1-%B2>a(VEHm>Fc%1lac1NuB6+FJZ7^R1)heH4)5{ZKp>6NTc|EVFyG)7R&*Y(0UY2{}I-LRdDF3v4X+PP?(4fxMIe2eJiYzOe_70)n_W&Xx%lDB#w zVB#ic!Un|22FwLEz{mfoA+-N0P~)(&Jv=;|p;{H)`h!JK^#>}*^Q89b*Ov?8=<3$m zM2vFI>qZ{eY_fwEM3)KOH1VerS#9q6+l_TLxFkszwgyYuWoA{I)qV-mSQ=|vlGlrg zpxdYz1vV&{8Dd3Qr@7DufQsD$M0^5OG_)4hK*KD?hP*xtCx$?rdFoU{?lt_$y zwuZhYZ12mL{fbBzXo}}EJ<*4>o6^16!A>=NFTK~pV;%C_ooH$+iq_BK`9i?Ul0*Vt z!4!62V})g*DROT`sLLXvxVPBj{ziRFPq?}XgHVPc9=ed@hjCy97RQn@q}AhvKKP77z{~hJ?f#ILFhJMPF2ny3Fd3*G*I;Qg%Y_FX$PQ;+i66?J*oxx! zH8@(?bk$s~7gwqj>!$Q)Y#aGE^4i<^!kVK>ZXeDG1xiTO;yUO(H_-w1)14&ZRGlu>HRJM?)QGbt%RPsZT@YHNR#TKFD3hW3j+F zSa&sFK?RuA7fJAJuCpuM@-0$Ts{Dl^LLuIfrS9n)vOhqO@hd1zz9FCWH)PS z+C6)LL2xKI-{0~2Il&pMFxmz9BF3#ox)#cUcBaZ)#>KK~p=H>|UJm{1d5{0*>b4g@ zFAKl+a}99km?6kex_dJ2sSg}euNSmS{mq|<1#n!GXG zxI99+i6#&}mYc2Xxu$3nv;GS2x;Q4;_kbLn>cpNrKLVFB`=5*K00ZeVgqckneD162 z;bLLpVBzUHe%?Vo9d3r{f~5t~69KuPj(LXcfU|#B5m0I5xV)Uqf!eAHg3ml&F&F0xDbK~gz ztW~9!;!}IGNA{i|v40b8Wrm*7+}T_M&U>+ltQQEQ>uLyHIFTW2>P-Fl2xK*vju{vh zF8yPkr?!$SRJu58d^uiaYT<6Qc%U{y;+oBMu>hSN0h2HVXYs)Vb)9JaC4xXJJev(7 z65}$=Cj#D4RBmA~KZm^jsxY(!pLH&6rnrlG>HIEwzfH(od8h!Ppz7xR?{^1JH%5|- zU4GBLUB*6}e=mh}lUScvO{zOc1Kkw85dn0uW8pB)gu}CeN%-(6F*>|$v3Mm-M@k;X z!j?6gt=nO@T>HySY{_xxt?J{Ux%xFr#!l^lTdbEH#lpSan3>~CgR9j;h;3*#r zFEFLB3qVJd&jRWURtvDBI0d!Uog_C|CCq2=;6T)Fj9mYD@QB|rx|qsDHv63&cy(Z& zO%-&s6a9UXviMD}2>@4!>;Pc&1O_|g(HF<<#C8>k59s-H!xfh~(`@>XO|~z9V|EJJGx8PkTb^vRNHG{B@O_?EG<8K3s05Iw~A=^9+CJ1Z=NH<9AwnxF}ge zLmJ3lLe)Q&odiMdx%CwY=aW_A+zyk~ln8Ob{(60V7aMR-KW*yCG7&eTd=f-jRFUf7 z7xroC4jFUgTN_7Zr1m8wy;vs?PCg$hroHKodiQOfwdp%eAd>;b7(1p)$z07gUVc|h z`DWZF_^RplE;6z0_xb~j2pAwni`&OotyEOswVRxdQP&Y{9j68M_V-|R%MgsK`S&7> zaL+Frhth(j*jn$GdIuT$X~ee(w>=u_u9ydx$tymdoH}5!ju@{QYn@BRag0?#fyaK1 z11;uF56JT}({pGBxL8 z%_mbp;A0~tt|xcW%bv!X@a$VCO8av^Q;+X4|EM(kdeN?h{qTY|zWY)!+ zOpLfrOlC%6V~=%&rC--ygvEn3f96?Mx}m3I^uMU31o?)VQgyvJaSB(}y^`p33XC!c zj$NojbW|jg?{Gw&>R=Qh^YvaCqcb6LJ8jr*V~`GDy7M=ghvKt_?*P2R6iTQ=6JO$2 zO_sWYNm{!!;kuN=toXsM@W0nR^~D)67MQGXwfd&g-R-&LneysY^=x)9ZU{Ug>Lk01Slt4MW#C}7?w zKvgb87UwYT`D+$+xA&R|7WKQzXzP{Kh_;Z9V#hJ7LvsbaFHDTOFoV4POXyX$Pn|iN|IIL#zFrFK+?y? literal 0 HcmV?d00001 diff --git a/docs/public/favicons/apple-icon-57x57.png b/docs/public/favicons/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..485c7abcadd6935e0711e315ccfaf0a74c159309 GIT binary patch literal 7763 zcmV-Z9<1SsP)#@XyWw03HWPL_t(|+T~n#SX4*%e&_D8EG)1TK}1Cm6%ho*hP{9_c8!T$V>hu! zjWPKdqb4?tB~fGavnG~^#$LfLSg>M26cGdk6r{7T_nzM$cP>qhHBrCsJkLJwbMMZa znK|#&Gc%XrgOOIP{QV0abR4sahq2l%qxU`;JuGF^ZAl~Cs^4`6UQ(16!U?qZmGMVTP`^7enw3}XJTR!Cf(E3d0RZbc!y`H4ncEBPb?{(taM7^uhY0UF122#g z1{?6DjJ-bv;}jC&@c;lwL#6P@-p1D3rXuZWwz%$zS}Vz>o37>R=BwyG&6dc|_SW+M zO8A2Kte{E&=-r#AH}3EA^Zv*O(zQA!$~d%?jDjBs*~ozi&}f>ByR`;-j;Sh9jXtYB zYTG&k!^_QeNVk8&7O9MasjwTZ#B9kRm4^NOM@h-ao^)ixz&*hSbo5F1`fESm?7%L8 z*m|}Ct^mxS6$bP4@?_llK*on<-nAv3C+}g4EH=5};&)0$j|PSBq;1kMsLFp+W}-YI$7i)9T{K<6FdZSY%A+(-?)?-D*VBIWYbXfg`=4AKM&92n;=Z^5X`W> zK!5S{PrPdjyhuI}B6Iac9<eRC5XzsG|8r*=${MDl<3+oh4Wni;A4OlG{$lBm!+S0t2$9@@gG58&JGO{@ z4P2UXt6$VI)@T2k)A?t*O0&gHVjFQR##OK1E{S~B8u}iuw`Ebixr(^sUGuc!CA|yykx*PAxxMr=46#2fo>i&V6 zR&08%w0P$BT=qQ-Fdz^4N~aoeO~!7+WW06iRdV?^Qp6r_ zw?e!Hhd?pnlxae4VTJ*Kt&>r|M@HRB8C83EIPP+L?wpgq&t4*9Aa5b_hsgxk-2&KX zHVk0HSwrRlE11C-rm%&G42Y0NJ`L>HNMX4!9eP?yC+Hdg0~}zl5crs{Qv=)b^mx9U zxsUd_6+fH*%`1S!iO=xh#p}q6F`$IqirDMTh&$m{w25?-XY_ z_b5HLqH#i)12+fPlfugzaazVbm1R7@DNA#H+MWjw1_!@-5B3^FK9fK$O?b=O}BAHxs^}SkMD#UsDf{Z^qY)E(L{sO?|V9>*1R<=v7U|?!K94_77D zCG-`DEY^jVNZ{kKGA`nigEGg9IJI+OfC$hing|s@4X7mmAQDjkP}Eud+M)%Jgk*r0 zvL>uLoN)%e6oDuVz)S=J=!GftH5i?e&PY|@4A4=!0swG;{cBf%qN41dxT7)vu+!`i z0I(%&9z-x`VXD3k0)blaC?0%SGlp+?|EcV}#jx#s!i!_iEyvdGeXM?+NgRfkkxQ5!r$D$dI-ansuSGbdSPl0HC|2y<*mh&N^p0ed8D}HKN}sfqZckjwr=!VR-Fy z8UK}n4fHS(Pl`_B4{U#$F*7%78v8Bl>uhA##!(Qu;}iJ6jO}Ebkck`^U?{_Tszu{@ zAp&JQKH=H+{`+jaK%V6!*7Kth+j`2_VpkCYL3&u2r{jc&P{41Rel$rDkyhd5{bbAX>v-Wic@m>rU_Qe95_}u(tg)|pF8e{qX1@y4{|5?E=0^j**-|-48PQCdugbt&C11ctTf; z#EHOlK>d?&Uv(5QswCm8kb(-Rf+*Yu;0Hgvhdb*3x?I66+yPXVg|I`%2_k(q$~cp+XPO_BQKu~EH@<|+1t1ka!1%_Z=;Qj8^py0K{3!WT z@>`Jq7YVlqZN*_aiXRb=BqSr|x%PafD15XJ;(T$JrAGiKa?%bNeKQJtlE4Xh8&Ik! zH3k5wnbZpsfMYlX6bV<95;ZTFfalGKm4fs5!U~}SYXGnj>|@pi2Q#*2Rm(mLP2AGN z2T6^nPi)46C5d^|DAgmqQ$`tjKwBt@@~~Xc2pfd?04ky^oKU!qe0k#J@I1bvPtl)R zRZdSyU&&8KP?l%*IcSvpD)}$4$BT%SPXsBmhC&M#+Ecb~fxQ*`b3TgM-IurANkRP8 zM}^aod>qD6K>eNSp=uju)gS4*)yGJ&`kNLu76aI{5bJZg@L6!m_Rb!eQ@unc|86m( z6tF5>PyrD9n8Z@?Aa32mIB|(zd{q|(`*9!m3_-5!k^~QYWf|38med3ZzDvA z0GrGPvfcmfx+LOnHc_v)@nyqP+11DWsGgC8p$Q_CCuh0VQVGA38ZDoOM zCT^WwaP6lXR^&Z9XZ7d}I^^y$39&hLThQP0jh%D9A^SPqJ;NgN9D9&4A~P_nE{ja) z^RP_fY&Q0YDpY^2hfr!x$JH}`x5bKmJx-;D^^jb}VN#r=!V1=pwP$Uf(K7h6^1nD# zij@Sc*w_73N?3QvRnd1u9jZU~iBKw`??b1=Ic%(wzLKANHDhPrZ@`x9G6~TiixTv+ z4Xej&ut3h)CD)eRu%+rONG_jJ-dB*37!N4+?bKSfw_<;Xj&`m#4hR9HXep&+)KV*X zi)401-iF~UVA4l5Pdyk5R9jSig^yvKzslIlm;+!Z9iue>fVSxK64~P|K)5MP6Gi~n zqoTLm-9STE^a%>tX^E|=RZ^3me8HNUU$*F>`wJE7-tr9fXdy*Z8&~m;i!-cLD^<%> zV_=NN{qqSnh!1UbB_!fEmYgD_w0&a7YHirC=j6ez%+GwSw!Ai9+SS~m_NkiTLM&-; z59x3&IJ?8gC}x3M2uJLRl^5z>ZYFiz;Jin7u(!}Y&po%X;V*>QN_HVOVH95fp!a#N ziR4fb<(4^(ft5H&bQK%I>iSR7)nn3;akk2}1~-lf^&Zwp{50uv7PI1ZP}`lB zyoK2}G^Cni#rv+k*)hpl8YRtqDI!gv2C$P3(j7pi{U+SCEg*bO|3L4>kyd03h#`Y8luZHinG=a;oO8F^Fis zO%tp+?u&D&RZ?3$ac51f_gi1EzD^H^jOyyyL7xkHKfxrvbC0Gj zwX$n0#J)z|YA&emOo7Y4`*YQfK2-f)pZlBR%doI*c_AjperDfzdb#^U{1B3e=kD_qb6HZ?`l|l>cb<_Tu5ePxYqFv!jh%z*sq)WJhJUWFHbOrgafj`2Z z3Z49qUm0MbY&`1=M4yNcN{As`_l@ox^N6`(o$8h<5qmq1X`0rsE4lie^tSaZD?E@& zQ6;j&ByqENPz-^x5e%536ztH}eYH#73cXp|o;hu|2CN|6Pmed`ZMMPX1Wn?f$*FAk zrQ4AaQKu!Z);;Sx*3D))Vn4b~MwkgbnIqF8=hDu|`BBHIT7ovwCpk+`gfOz#kEYQn?#)E8utQ9IK0#YN}PcvFGHfChQ{q4@i9ofj6=Pf;F^BT=9o41RlO7Pg#i8hNXLy`-{2`c0QPiAz;{fbo18YFKMa`)< z_TL#AXB~eC=78uU4nvRf^BmQs*O9*3)`~GMkC}rsP>PnM!t@H#SMsCekLR~`6VI=z zYS?A#9IH!~YN~Cp&0U}Cj14h+6OKIyKm?o3#$beU6yyUY5@+cut|QHGAkRL36a@p~ zCNUBk>;4wgEJE>_)iB*2otAx0ndDBjffwzD&_w!)mIB&Gnz0&N3~^X$6KFGsz5&E; z;#B14&df{B3&1Mr2I;9ht`rb?gRH1LuIA2?{|ChG;#A~2EVl`?nMdDhA8E#EY%x^P z|NNRM=TFJ6)o|Tjof-RrmuC`tT)Bk>> z3H5WO${nvaZP{=Q4(U3XeWp#oUK&i(Y4%GfOh7Uo0YYyfNw|PU~;`1wf|y!n*G*rgr7v3R-yIx z*ZGo77kUecLO8}M`d=hUes!J925J+qyJJMtfQGBF-~Vo-G4-<~mpWrT$9g%W9 zt{UuTV^{^ILu*AJ=p`Ks$|a$__!;w1ze!T9kQ%#LT;pWlDLyM%Fw?RiwgEk8Bh@6s zi;MN%6A5$q2tI-8QviTeq$3?4Q8w>NqY#VxFF{~Q;ro4*KxL^a%wP>2%+Z+=NT8~C z+S5}!ycYU`@MWJF{zanXm*<~Ms4CTlBY<>dqCM$&dH*H(_bNk^#J#h-4jj*63>r2dwECnE^U0T#<5 zN=D87nG<<&Ou;)7wvPoND`Q_~T-J}c@N?c~-=L<#>_CTg%Qxj~<%uCB}h%?!f{8 z_!t?)ueUk!qXg3;<$~KD23QwX{F8fju!Z78F1$RWhYmUfqB<(W4c-WY2oWt`yTI2G zjTk_!SGQMHz~EYsJks4&P@P|Qeay{FG~Y2GB=Pu8;c<*Qe)faTWZQM9|B7GQJO^kNlJwle@Ag`e4(?!x)Iz=;$u%DAMyj2HMVq>r!5=-y05OMc4EcLC>b zP(j_Q1~<4+88#4|SUWZewQvySaq+bao`-zo10;|ynxIVM4BxrlJA}b87ZZMZ5H3yL z*Y4E3u$jWi%X@Fsh@8U`ZeNSLcHbS=-eQ%DmDW*&SF+pkifXK}3bm+Zz5vIwXXkb_ z93l6(aSy*wG)3jh&bPk3^D$c#H}b)yhi!#+sK6eu08DC^-Dp~UmDHe~nb#N9JOmS( zL4)ZwbO?OIp2i@ThxJDX)&}388Y-d*O+h5WiyRu@MCJa6^T03pWN2iJ43Y6q-at;p zah5MDvsQjgN^ut}Uqd-LSw{75GP*>|csNGJ3IL#kIY5r^r%tF!yzzj5I*D+N;(z?1niXOEa*LX&KQ?mSM zaHFL9qA*#bH92MSE%womw2Ichc{!kyzZOED<40Nm6&*q{<-!%fN|=`noX9WC_Ww-A z7%v%(-p|o)qTIvFFY!kSXPJ?ou1n)zg32!PKby~H0a@L1y60X6WovTd4Si@l+szhX z&RZ~ma{A0jUQ{12t7JOb6bSB-)be`s%fgMXtOqXdlaG!qvl|`q`$$T1?ozHz*-bRr zD#3Dq#R@dl8O>76KF2~EwLZp5OY&Tnsxj;6{jWK*mqq4f>bj`htT!77IPn{sh=AC$2 z4Q~Iz&*w+x?-lQUnDRmPFMiXu&2<1b5D5rn*r*B%zNm^SfbdWV6ea=EFOr#585=W7Wlzg4OFhziXFklHhttM0;u7O& zxS57(W@u{Snw3G<+k7|cuPbM!HJgF;tQt#a_u((qk>*Ql0o=uXBmi%GORF%yB1AxC zs+y$girnC|Gyivft(3ED(w4g0s|d@aB&tl!@ihPsR8b=B=WVoej*JGpt=m{!41C&q z)Rq$o2=IglAjOM!MN3TG<9ecU=mIv>;}h4(6?T)iQ!j^}rE0J*#Gz80Bmg)-r*Q_a zza5}#@Lt9(+y*3)+Dk(KjDiD7p{G@dE+Yu=A^?e0Y;r}JepD?7*`z&;;dCRNlv z>U1RI4&o4xhkPCS;W_c;8_N>hP#$IBn19Q7$!G=p_~l6llNlmzoW9#W)`#V0R?n=N z8I4>(_(TYR8Vr`O0Fzs=G*(tNvAm26zAQ}O<*uH;Dv>2FT$=NB2j17EFXRDqoWPgfxqaP@WhDXrX|ePfGEU_;Y=aNUID}8!8}PHy_I#mh z!e?b{8rSoRr)A$;;R|=-KAC*J#hlz<##8+Nl{;k&;g@j4g*-mDCo*0&;Ws!&@-i1> zHDAf-&NJr4#{fs}nNTZBZT?}Q54MX{?8rCvjJ;%h$X%Zi{NidPCn|42iTFkA_j+Hz Z`hTR@=*qa)vJe0O002ovPDHLkV1noZ-fI8= literal 0 HcmV?d00001 diff --git a/docs/public/favicons/apple-icon-60x60.png b/docs/public/favicons/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..ce79ce63ef4754ee3642362ebc27a956714032e5 GIT binary patch literal 8229 zcmV+=All!FP)#@XyWw03X>&L_t(|+U;F;T$WY;zP{&qc-UJ686qGE;>ekMfmrT^nwmRJ%Ta1- zrlsXb%{T3J*iNu;MI$IEAfWJv5(XVATjb)i3cFnZfj}?-NJSa|hD zgv)qE=>WK0lKEbg6(M6%P$3a}5uZ8gK#cM_501MkF~lrgD8$PNN0a0US|rupEPp4kd84rU?I_&-N9(#)edvLjVNyui#q^zm{d)9F+W7|D=)h|y`I$zneSX{g zQTZQYKQy$M<{<|LaB!#YvfK!TFN~1Y`u3kT%#-k{2rS{-LgBy;GT<@{h`>FVB93*Y zrr6jeu+{WtXZWz-hHZ7Nm$Gx3IL%#6Kg{NH#C9>SC@1GB4)rQjA@oaVf3xjInxb20 zbX@y0AGSUI*UyhOWgAgZc;O!U18_%WHC132S&vByUw!EXeu=-qrG4Y-$U&ilC<^00 z@>77@ddIdElf~(vNsZrVSU@hC&8!+T#%%r?pTk!J*dY#!V@0fnYql_7W`a3ElNz^c zs3#Y<)sAf{CW_N)zK=pJw~qMhdcHh(i3KhV?nC82u1FSuFoP4g=Mk6D&Y@z0O^jud zMQysy_lQ&>0BE5p9D5gs3|HgX#9Ag>yhhhO54pVWd{ca+=37(_0N|>u$Dn`O5@p3J zCa`vSDS_D{2YE(4jDocexImo#pyRMXCUTHlhAd?~67&a!z{V)pC|K)&^J>12smHQ^ z+7e~OD<*J!c!>Z4=qs89(`ci3+r*wUC1-dZ<&DH7T1}tQWB>vJqLi#;xEe2Kcpl3e ziI1X9;~f(F&}22=qH-RoM-*NWykY`h-Jo#R>qTKSgGK@2UqtynxJ*?qPPv&J)`9P4 z16dNggajH)U8n;90}L<}F%70J)E;1iSTehego`t7W`%X*KZehW@_lfHs;c=uimZmR z9^d`bmMAM;0Z&%(L5$Tzg@1ZY;TC;i1TD14fnJ1*WSCYYduA6Wz8jR(`Sp7dzFw0KpfNphH!E(KaH4gLBZMF8WfFeM*yfFV97>3XuB z-d+^3dE558(}u^a_B=I87;xKeg&S>F`2C5B zAgl>=KoM7AyPkG=NJ&>IEJTXu7h8Z+q&;a3|Jg|SbleXlU z{50DEDXbKZ%a;1>7Fll6pX*gF)1+c{D&HQV90Y#k0p)5=;pkHeOEVR&=&P`^T*a{p zk>wEIu>#i6fgHCaHTm48%v)q{VvmIm$C5g72?u>+K-<7 zIsOWMjTPQ7TVeL5{6+c`5*A3FC0Tayxw{mO8L#juX~8YW6#h*LUC^q?u0cTo0myh( zp`StEM}(EmcvV#`fmG8ll81!B9n_xU+!PxYsu<_=y?Z^G9TSnlGX4d&zG(2 zfM6rpPjatL3U8D>(-(Ubekfg|u#k4od|IKOwFRrfW-8=SN8uH6Av`dqFeU?mkOz)v zJcKbIT8WMTAO;C#=^zOy0F(v0=S8s`cpZKh5Ua&Ku@cs(i#%wd2Ll6>;c2i2_!zFV zvjBLOmd`UooqyZI7652HEe8NPN_zn?xWE~C;1Cd&vPF-SNxkJKV7OckjfgJY?oVZq zCm|>(AfPb5e8a7!ur{x*V-Sh+oA;0Ea1@j$^saF3V#US`lc`+APa#C_1o} z)PSA+Us{l z-kr!cYC5q97V5L%jfINKz9CHAHE%xIG-=r96>w`heCAPS^9 zc#K14mmJg$mhD&@=!A$`?pn6Vb?U-d^#p z!&hQX`vJ|qYt%pl)m-Xr<&{W(SpI7Emf3G;Oum#(QP_!eWFo5^9WUo`1Gk{p-qKXj zq@%q_U*og7;Z#fgb?%nD*Yj73D+SdI_Y9WUkNT(%-@^6X=Z7^cU=A*>3rpdO?isDJ zzsqilQ&)!FP71dcbq{=Z;_WjR=+}pX;{6k*(qw>Yk_#*VXp3HR@rlCYq~#a4DJr0B zU3D1*E=^dc>aq~oRn&}>4hKE-{9C>QMqU~2tK33G+xOn+^-lNq;Z&uDi;vSLnkNjR zCYqpac>`0|2A87<>DF5ogCJ{I4IVvBn;n?}fk1Mj>wLRi$A=yRg# zGD#v|iW z^5f0`yp7(t?RnRAj`Lx7>q50>v~OX$!InqzlQPCDwzTm=@ss#XoB(t`YAb66rg@sV zR&h>*&F{D};d(G`12~E8@P0IrODP#WPB*1xGa11grNSaoVehR9*One5$412>$r1J!GN@4oOHA3U_D@^! z6@WUp)4>QvFajR40|fvOuu0(~Qm5l`gZ}>d3J;bJBoo;XktMrm6FK~zAvcnL*iB(= z+!Ly&ZWmRj7j?xr%*P@chjplg$we-pXNHlSHZVEL&X?1$$1UW)D5#@+ovaU+0Ah{Uh~jTtahM@W#3CMVLI4nD7^SN%y*8?$D!{_n4E7$N+03dj z6Qoi_x=+`!gMOd|^aWP2H`#4=4B?s)ER)>?XdaEDQRQIhB2yNipeSFp9JO59uGB-V zms(G?-s*Fdxd&726eZ#ikDx+3swlLxw0n^biY|pZ0f6?7)bWhe)l9bFcjXx#lZx`& zkc$GbNo<3Ov7ND_?l6X1YR#6I4aT4h|Lixi6VN2@Xx<-~_FgsvtR|vn zwfgR%?pkW<6X!nF&5S%uBTeQQkHcwRo6qK}0AwN?Ie7B?TI~reU3x5QhzRwJ?0COG>`8J?{Vshre$^ytZfX{xwsUufqzVzJ>i@A7dyB$wZBesH7W&$I{??Nl=0GPtKaILL0u*cXfU+flp0pr%jb#ylX%j;%i%m(9B zhCbUX`wZ6QrR2rsZ^H^O>Px}M1qTN=St)f5mje6Cz8xQc;}}9p1*jHfQ!Jvx=0`@|-zoZT4?MKs zsHr$`&Gb${L^IYV|4{D9++WERapGH16uPbX>n*N%`IA(RgvWZ2C_@H@G9p~CB zc}&+8t#3E?qAjvJ7FamCHS zp~Lu`wN3V%+5a`0TX4#7%n*Xf09v4_n$~}-6xg^zu?*LV&49@zkFmNVHF_mToJ~FKfB|!(GQj z^-C5vc7@uoR6wj2)$p28h_S12RkXK@sqmHke6d>luI83z6^^Hl$vB&7kBF?#vg&3X zq5T(e&2aN1vx$m`o0ZT@bQ#HlS9hH*>egQ2bExVNJ5o@Wd?i0 zP&7|=PRmGNNlEF=(;lREqW$~uTg-_Lq>s)`7@v^AT}B=a_UmSk^Y*Q*9juO0eX(04 z3j-8~q^1mZgV-(h0VW%C({*zI$5VD=Z3m*2?{SYq?v2?Blh($4b=S~16ItuBHv<5z zp(ScsV^?(^oKP%BWmM+_cT|SEI4zj4g)v_uZi#q6)D~;83BWeQV)|3Oh`|&@t$~7i z1#t#PjNdK}etcxAc=OVg8%IJ2Im)}1m$|U+XxYNK$sCd5G0M41B|UA{ zG}hc^A?TRUC*?s}FSI*qbMDH;KtAp0%yTC$Tw|jXJQ7wX{!Txvcm46o-&EbL?a1WNSjb`1c}C6kAGQeaMMSfVde+W0OA<`_|X^G5NqO)JcdC zxw`E3mGEr(?UKojF`={AgYC5s1|IpCrwpTRZk>A5c+GijeN7y`!Y*+{950jQlrQj? zirx8Tu~&=+#96_F9crN(s-QBQaIsWZYm)j-7xytyu@=XnM*;ND?}K7-^c774LVHJk zbAO1~b@J||)T?`0Hvl&gifVQ8eINMD<2A-s?%N}{3XU|0^=E!_8ME7B?Pt}V`dfFl z7-#Vd_4cV%xsmHsIyA(z>z)oSY-jhb0dXy@`P;0TQGcxq7DYaYuJQ0^`utez`ItW* z3R|JrNKqEPkP0c3Z8hTeYYD4dVQn-&{sx-THP9u7bmLa($zGzT`F3=Qg!UZfC=bcR{GroFI%8AK=Wz&bL;CC5iPpnb{fH zbMV02&)m*z9E^H=7GT}7K2^6%vtD9(l0U|7fPcr8Fv zgZ-C{!Pjs8+|;$ve(LPqrE*WVC1N$e_1p;!FB;z*6!tSs%i5N6Hn$rBX(dgkNr1{( z-{+jk?TWS+wKoTb?Wa%Fbl%-62fHm5tJQqfa@2CwdZ_hM>uHx^z1;E`)$8$TfOX4y zRNdUy+}3O?jB?Vm)3Rsd{>6^Bz70zh>r^`w+T{h~#TQWvKJWtc!37Nr?_+0_UF?YX zSUL=dNg@dsoVQnub9g9vy03OV>(q>{@sqr|_y9m%7-LB(`ANfwC{aoH02WuxMw=a` z>;Ar;eLS}CuR;;tJAx=HVQy-2YIiJ3>y(+0c}48EfLXffE&}A6p0+0QdS)l_e!{*~ z$JE;BfJNj$%aG;2#&fI3X0g!XrrB0A#;)^2yb=#U4H!MfBWD6*=m370`-!%IdsF9H zPH&L0^A8oH9Zrf~w`*ja%&bH@j;`>M%Bk}M zh)K}Y3#`7wH=MoK_gu$C?Y`!}S6FMa$hspcRUB?N+4eBo&NuRC;a`-lqQP#VZ3MkD zU}Yz_b_aQI;)PU7OA;~lysCTq2C|0y93LRO&;tN4qzo0ghiJqA@;N4TInYYqtP@Re z{M_E(Hk((iKf8KE--$F|>!!)l)Wk}0R$LP|WZF6}&ipT4U^yKTUZSJu1+!}Fsx)+) zN*k+fsxqhYbh?dJ!bpt9*L;QW6iL9-IyZ%{=qCCC){`vOn=eOPk3j(wTPbInB775!RPsW+@n7nX&5RD~BbVv;y691tg(h=HQ-(^N!K zs_+!Gq4k>Ls&j5bUwa*MtLO3!-9|r55?ir}f6jjww~OrZqVe~gY>@L%K8v3h;Q%5* zVi3Hs4)^6IRHJ9=vdmxt6F>xt5n>!5q6G=S6}Hmkr!X4VpqxP{KJPpwF5?=&Z3Xx& zm?Ihlz#M_k>ETvfi{R_TeUT0zQnV9;;Eh=bf_ilBZ(Lpb=N9r_)MCN2=K7+RF8=OC zkrMcKrS^Xus=$AqBr7g@D*W$Xyj-A1w0WF9h06q0iv=oON+nc)J<`aL?$Zrq(Gr?M z9|Ba5{7?-5{$0@jo4~<~>|UsYvRs*^>V(oiGF7F(1;dL4c1C+3?|Xfi-Wxj~eir{x z;!nIu_Tb!Fx$DJ^g5`#$hGAF=pelKmrGDjvJme!EpzrBRngOtP$dhaVRE85Ar5Vce zTc=TWR?trRie>>cgt}4(6fTQ_79=FjI&c0Rj{bN$GIwgsPH5ZlOtS?j0BUtPw0pZZV_fSI%J z*&^J(F2XG$tVE43zFf6&!zdB|bL^?%XHN3Q%mWD&j_`8dO!zpfNjs}{S9M66knx|4 zp40$FG=Sa$E7VQVakbR7p_~UVm&Z5#6BX{SZe7s;bdf@UVrRpYdm)vBp6XXveN;WH z$Q z6ZpVxZ?_rRVj`_^>}eluca{P%2-7hOl|`Iz6aFZ=t7APr$5epLV9lu-kUvsiub>r1 zoUVH%54@4L>p*LWU^P-{XS`NZ0LnHw! zn8OVBWT<*l*$COlMJ_l%8|YiGKb_H2+H8rHkZrjJZhO-Y6=O)G{+fmQDWBdpD zrtsd4FV;5Hc#|~~UyB>!A#BR6r&5mC=xH{M#t0!VnJMmbD{g1i?y3$say#=KdH#5& z+>14~mDF{n>dBG`lKUw9sSI8v4_JH39oJ^^kj$jF6>fQ`SS1LA95lsiR1?RMf`dpc zzs_1Xi9pdAu&QJ6miafthJM|(a>tq2vC`4N_?vw2mAEj!J3cJxf&W9Zm@nzub?Mr47XB@(|N{P3efkT1zGc?L^dltkN&GEw<@ukd5K2Q3XoQ;Nj}zF4o$y4P z(j$k+i_X84HOQ9x*6&_dII83@%SIJARdR_tHKN{-Tq0ecaivJ`AF&h_^SA1+>OaB* zxZy7DAq|e;5UBXrO=V?;33Si_ybs^P4*|}590phDL_@|*>w76U2~qp2oM?9XU9SJl z;8NYMMf0Hcjk-5*AO|Z~i=O6wG=zV|kMdstd8_U7Lml;BM>ryomVZKjPVb1z zfLJJ&paMW^X->&Rk@A4T0rw~5uIiZjjEB$W$tw&ds#iB~fS==uK=b+ao7HK;Lr0tU z+0bJy+e6KWCGK{5LT;X^yyYy+wG-h!&#D zJ*S5@u?u0Iu`J6u>kutxnQSTh6t``YEJG}F#U~!CUAsFULj}Lh9_H>|^t(fA+aQ}a z$Vsj{HxfG0K(t2DV6VKOY_)+nBJzbP=6-X3Yv&y!dFPOY=WqQH%6tLVfEDeOlY-4Z zukc3=iZc4^!)MR9*l@9K3%indWOBzi! zyvOso4uvi8xgiZMqD3W94S*}GVU12M=@nxuY@|-Ek&de!9#SrM1!wTX z2wF;4P(#y~Rig`(Nrxzp5>Sh;K2>HJmnZN{~<(Ntn0OrAdWgCFR3aJ-U4~w6dRo-@F_ZHFW zk6JhCg|1*ZAl8MN6%OL0MZ)FnJ^^bLj`S@m=(*1at0+zA8H*I2Ui{5^fQJAeHi>Px zT)nf`ZI4jVzRS$k>zc=kNT07Of9ZCbvP{Mq-_cE?1+ESB?e*3<)5EvBd-@~<_&@yTmT3fMgvg$#*cUA-d#h{cf6t+MbD-d zm0DHsweKKYY(KX;WciV>XDwM(_A`D(6yiieIo^@+Ps1LL5AOf~(&U2w|Js_BDwH*>005h?5&)<^c>&PS zVCo0Gbi9<<>Tp#~R|m;IVQ^9P%@wnIx!uuG5`T42yrw+kFjvm2+Q|#iG^S6=_5U{v za#r$-kHVAX9}&2E?$2?b?w+jYXfvfP-PzkH)e1 zSYhAO3j5Sl*jDMJ!M>0YpLAE{s|I;+mrqqVMgB#$Fu9-dmUIng&M%R!m>r+*uFC%d XUBzQiVA>{|00000NkvXXu0mjfBj)+z literal 0 HcmV?d00001 diff --git a/docs/public/favicons/apple-icon-72x72.png b/docs/public/favicons/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..dca4e5eac51daed35aaff349f02fdb12d6f1853a GIT binary patch literal 10093 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 P00000NkvXXu0mjfzV?U> literal 0 HcmV?d00001 diff --git a/docs/public/favicons/apple-icon-76x76.png b/docs/public/favicons/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..49ef41dd66f5bda42ae70e76fc81b639b1f1e488 GIT binary patch literal 10703 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 BmRtY; literal 0 HcmV?d00001 diff --git a/docs/public/favicons/apple-icon-precomposed.png b/docs/public/favicons/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..b3830b9e919d2d96979c21b2114809fc56c28fda GIT binary patch literal 27953 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 +#ffffff diff --git a/docs/public/favicons/favicon-16x16.png b/docs/public/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..32f4f6751c61db3133f561dd6959c2cbeb878e10 GIT binary patch literal 1703 zcmV;Y23YxtP)Aav zjdrY#n#5RblQx}LCu5v=k7lB##(UAE#-zj;5v9f|FYzPIYbZv5%6#>eBZbG zLyi7vUHixWvG%OB-gn;pDm)icrlhAslIP`xnGYGChyh)(jd@e>iyab^ zxFnZO+o9-_58fRam7S7xrn?rC z*157{Ufi3yJZ1>u5r3@i+^X|F>)I|KyRxXdw(=sV2bHn4*5~Oy6W~#$k0Cw2#Z%tM z*Q;!Y`XmLW29A$xocfPc+nCv`e!`aKT-jN@F!E!^v5x%CDq9$U@>=cx(JdM&3~RtoKTjqVny)xU1Vxsc1ZD$CNG0d+$` zu`7l4Euihz%S^uk$wRAl0hE`O1fv#+BI1{VCH1MXR<2nAG`z!Ygy$)V4x_#3=1v@el5_l%NquoWl+U5T0+iL9gB2mZ>gh}aQ zupXe_yK@7K4aUAt{J>abY%c8tb(q?Tke;?k578$@g?sqVfKOWCsn)zMwO8wW<8w{d8k|>eFahn=cQ91hBJo+@NjW=arYdw_X~Cn zI-nZ9H{=_C`{~rO&p};;Ox883jBYV#ZIN{%$X-@*&`%~Nc2Rk`_e`4qC&eymcUe&j( z&kAOEy{;}-2a@Pxn37FRveQ&z5$1X8!?mq?z5Z#&RLMVV=H~3HLX6s%_(^;)v?e^b z-BAup({ks|T*#&4ON+Obgps4vDY9%o|1@fpR(O9C0!yt*yz{+krapGh7mol({$<`d>jx)htTS#cq$ zc<7-A4|Z{v4!n(QLl)mcq+jUYL-Lq!8xdX+mdSKusxe9IASf|2c6iJMR%;FVVXcV+^RlZuQECa z>MnI1bqxbPrlRxT-ZasgH^ylQ+FGJ>nzKzFOF!j(ZW;q)aK@WmSwZsV$vX5^wh@p4li;Z%gqREE56#NERgk>({`t}df0>5Y4nVd^|%Z{>1{Xxl48t8t( zHJ~TPMwWGfInW$Ws+=dqN^gK68~!2@!&UEz>rsrku7IwMj`vpX2lbS)X8)dN7ttNP zcXWu)U(Ay4vJ*8`qD|;P6rqH|f8M%%q~RSnSza>Z!Z$U&U2D4~=Z;JRlyIf(_Jd~vc+8#!0P3r1 zzl>mzoYK9O)07)(iMl0nwUk8~V<|+(z`((aBrzNr4IK?QPX+(RKt(~uA`1APQl{zy xwG{0S4J$$TioPEl1?`A-@8m-;b(nU+e*u~E%`Rqy{Zjw{002ovPDHLkV1h}~L)-uW literal 0 HcmV?d00001 diff --git a/docs/public/favicons/favicon-32x32.png b/docs/public/favicons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..ec60c37f69575d57bfa66b50a223d90b833fe3e4 GIT binary patch literal 3899 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

pg`rKQ;7 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 Ag#Z8m literal 0 HcmV?d00001 diff --git a/docs/public/favicons/ms-icon-150x150.png b/docs/public/favicons/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..14c172b2c351486976683d23430696b5664944eb GIT binary patch literal 22060 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 Rl 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

GJNLrQj||x!)J1NV?F)3xv?%@V%uJ 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 literal 0 HcmV?d00001 diff --git a/docs/public/favicons/ms-icon-70x70.png b/docs/public/favicons/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..931fda5a9ac21589f7a1596b26e82b4ac1e16417 GIT binary patch literal 9508 zcmV+yhH1?8+J+?P$Vv8mw z#+G7@C6>gP#EMvBS1ef3VC*Q^3t&Z1DN0>-=X^izT#yxG!w~)Q@Z(``nK^gPxl_)Z znal9b!r$M|FZ+kNWPR>ym}J)#3VStI*lD^vK?>dfO5x}|3g7K%l0Y8$goNzdSI}jU z|KJ5JK>j0_p;$|nhN9`JaKqaQFPNclNQlDQbPBJQhO!#DkB975_?Kxiom;un%{EAD z6FJ@)u-8xG--28UDl9ogp`xwPpM|7Mg#)W7Jk?F%dk3DD^H@Rra*K;+aTUgM=)zbX9F?Sd|$*Tq}krYg|b zE8H;Hgw+j%_59i<9y=|fELnv+VXVD>T#pi zIN!Jv@QikC>2iymYqQt4PyJ)moqKDYHE|fM=98UoE;QUO<+Lm4l6qadBL-7gc4|uo zKK*>;Or-#aFx#fKeaWt3qW2E3walDGiGAV>Y+g1e8Y%XPaM)B#@ZRCInwdEqvh}s? zP4)n}P^l;LeG(;?Njcy88vPwH7@hQk6kh)HIqFXR0hX%OaMuF~Funp$MxQ)D@s^)c;v`6%NcT=i7^S#9)ll5tr2@kCW}u z8pxca56QA%oeZBE{S6av1|Og~n!Hpd3O+zHGyx1lj4cfl5S}?%zbDI*bx`xk8>(E! z69rvTuZwrYU{a)uKX%U3=NMQr@E|j3ck&u`>t^HFv+=daouA~RSswtI&?D;wvXIyD z6Z{L-2e{cZHX`1K+#VQ`_9p+qZmId?jo6>0oO50vr++ox5rfI>r|_v-CMN_K8^S&Y zGFxSMX3R&z?q80i9&3X`X*Dt|Gbe!a&sZhq4nU8r>_PF9kjME5R*|^@Y4tK}Grxys z_mU&}V;yl=O;^n)JKtPTe+>!XNz6 z>e@Ra_hyOCk2$GT$hJZL^JRu%naaKje~9woqc>c^jeB2#X2zu#u3jtu_8=^__M~#$FCVgnQ385n+M$?5q$gb zqa$DN=Hh_ysJMs8(4q+%K1-hM7E-QX|6cC52L)*9`8xft8oq1_D#@^eO(PWcUN6t5 zKm!hr!Z6|*q5#0q-Y^;0+xs{3Yuv@ysQ0&RBi{d5vj9vfo51PYYVQg(e!6AT-t7kh zHHQH07VTJ+ga)Nh5`Yl`0*__-GMwW2Ckl6*sc>YWyybiy6pW|%AMgwK`}_H28|IsO zvrH5aSxn*KZ4~}hP6E1rA{7h(B~bzZcp(1)X{;)%&wSyERHP#v08{>0HI{*RxM33y zN1@zu<>y>do-Z7ehV;g2us2{ZxgJEFB{pdy91ba5 zNmk~Seo)w54ood$AB_=F%`}zx;hrp?Dd7;Qrh@Uk~xo3O6q=`I<~zEs^Ib zQaxW>Ar{VEq04{GgFPj5z`WK+%sB z?s-t*fYJ)TCu;z!?Iwv;kbLnqg(_+CJ4v!#{yq1T=~f#q+4Ou&{$`ifLg5Q?xW3j> z;UIbZ-sYTZRlS6S?Aw>EmsdtUbb9kN6p3b?72YfjW`-=dnne|U%23{PXVC5~OIL+S zxmd|i(VFtbn;~o9&0Q33R@3Buqlung8Lv^p|*LuRj=0o*?oZ+ z+ynz~2eGn{{*mYrI!%diLL|21G%VpSySqvsh7gHsh=K(`p%exu0M%jtPsjx(UuSo? zf&nN2PXNmNdtT)Tz^9wSL8%IlkfEt-rsiC)>h0B^HMJ^gCb1TXIWOeN*ztQJla{#8MoJi7CQJ zZfvetVi;zaj9~zZ!2>k_-jBD11{^MMg7VstI$Cp)vt)Cn!6bMo91@+k-d-H9(ACRp z)Z?~U;Vm*GvZfkE{}|>lgBI4%({!2(0IUz|j`hXAb=^?32KA{myyA%RNz~md$^D3H zeSB(pOIKGH4j=X*nxhHrL^?8|e{-Wb>WGmTgE(i{-?Y2Rf{R8v_A1httD%*+SM|Zl zhlj+c@y0}tByVcPHeoiV!sSiL154;&4g;;j9von;(p@q`Gb`d~bfG)7V?*)tiFxPd zU9@MbZu}72?Or5X2G9yxgAZWNMzi5iJ<}$`{F5?(tG%PbcL&MyFFmSyRf93Xm^%tj zamzl$Wz{KYI?VyJ4YYT)>+xaBruFyv^c3250~+sYV9lx*xntYYb_{FGjBEEw{1)#o>?U;zt&_EIM40I`&A(4(Bwyf5=)HUMkJELbLhG-M#-ACOCl9R^yl z2B-s2UFwZNIPuUSd2#YLbYSa`2OIu*k0N%R4(o7i3(qo~FqANK!&-3mB^v?c4&+kt zwe0&$ZJBfI<(j6~G#KZ>3hzl$xbiA_!U*6l?m+_|v_Mk?wcX(BUH?0=v&V<6hWXdv z31;zHq4^U##WWF4G5>%9-VyLIygDlZWEIZR8*8KG%Aa@AZM8bHhvfk4TU9tYgYh=BIn z8|xdkX3fmbX&!2}VW;>`9H(mqUHoq!#JA!YT?5Rbw5gg9>}r3wv01|a)~uwB$0j!y z(G?K0#ft39O-4m!<-B|~hn!kBswjQ2@ zE<)iduk4S>LuI)v?l~@fkN5I8coJs-ZBOl=+L@SL@_@(3ZpX0*joB%*hbK5r;b8$4 z_PYeNkJyyeM0J!cxxu5T+e%E(cF=Ct4#6P9W@8KEc(epi2c|(E@F?|kg3r=>?k0=p zTr1OAwwI)Mz5^4p`39{iXYmt<$X67&T{*3{V7}f7V@vzg1Y*S7BAJImzbytJ;NPCu)E9MOlRGW#JVB$g(KVk!^OKJj&t%kk=?lMGLw1dxzA>7P;PGo}AiH^{SI|TG``5d$mbQRLDiH>zO1S zKi#h@Z1tl_j$KTCC#neo(&d!_J@ojTW>O%nW(%Oheq1l;(tQV^gE`CrnnOWY$HFiH zdSqe5Gp?3;a`Vm2*^n(pe>q3Bs*l3s<|`bRAZr-w4hqjWqVRyP6}FPYX4Bc`r|`71 z+yDcN_yH5J0E>~r6o*v)!4B3a44?wM;RV1$dOUe9*LlG~l|z+Fl~a{FpTI0+xqgq| zu?+WNfDr~ve#Yg`o79kcwi=@FfNvC@aZq9F*0N}OHBvaBs7V59rKSVua~cN#6i1l= zK=WuJlwP~p3l!YTLX9^mr_7=7Bm6Vo6VS}y_WUv8aS|7B2|pOiip?Sd} z*ZCwq6el!8cm}@;u-R-B8;UpQ2$bon`KbA-a;S2ta;kEx&!Ik-`kW?lHZKmYhI~B( z*?N+C%h99MtEy)JPsQy7$fl`R9jVH`a+!v?YWsR+)ca&QYPxDZ;Z~PwUY#I9S03MSHKc@Crpl$t`E$tHQyU{i!qyg{ zkzrqm@73p`H03#2P35`Oa>zGGJ*j$A^=MVb@}y-eQ~@Z6)*?Aa@6rwwyO0b1`u-*R zFcr?4BySD_S&%c}5N)^3_5|(vWJZ^p9jDV0k02NBJc3)U_-gybUBiH|?x#OG+Y|s; zDQ5P3xt|HydE?u7Ki(Ed=#%XJD2)QQ&Izsm=SDhm_^Z=r&u(RdlTsf=KCaH)0r8di z3<0PwJK4ae_!(;eHinJDrS0$OT8CXjz4t7xKXyLpXXX0`E|)*&Rk*}({)mRq zH2M*>a0F*@4$pr>g*23UsDg?B`-y$UKEsI%8BtrK{}47CI`2yhjlk>+me&tOU*{e5 z>ocwOy>SHV=^)KRIgAIFa%wOf({O-K<2SI@ZnllE-b!8#r&X_CWuXXbH`4c;1|Kjx zhmN+lY%JJEqMcYOwjsN(^6H?n)D)=k)qBg!?gV-Twc#zt!SZ(FxajyWSPgfoMI>$aQ)datH^n_q=J>V!7G!;I(=t9&hBe? zSZ>tW=vDy$ZKmMo3Hvw5kcP672XH^&?#%n`AACdo=LW8N|Bq2*yKU%!z(2e2{z<9H zOCNvEMgl}+jQ|wY{HXZ^)3na!XUxY^DtoMT)?Ptt01Z(O7WxaBfqEd}jMW8kc`*NI z*08{+we{KBu;FJ0M3xi>**9z;>xW}-hZ7uMKu&obo5%*TzBm^4$(g>9#l=CH?m9Ie zHD3UYP!ATWTvE<7Rc`e;)aR1VIbiOpRc-zlO*VJu-0%G0d+Mi_i&{>vVKAF17*O@5 z>al{gxA4m1cU>1a8j4(Ci&een4a>^vD5-Lus>}e`HMWhd#TRsytf?DHlRZUK5$y_Q zBf%@_QSu%3MUr>&?&M%LVQKv>e+I{6y4_;yPYe49^NOcRO)dEuhhU25eazoXIHZXtM947HmAg9Bx&dSAOK>0JfiH!Le}vLiSc8=t@t0>(5&pBp+Wxjf+)J@`bvI<`c|M z;uQYC9y)*-(4!_x0_xgUcB@beD;wReF}6yAXt#LgriI&g(Y-65$8@>bjyorXCEGpn zWM6J*y0_)QUbN2Zb9bZbw^YR{)MC2D7{;k5jiv9ND1^0aI{OYt^-V95K9$6Vk$aO5 z{)MYaamgzmtz@GC_A|SQ)H1V5{OY+|#P{FcaeSMr80lTqL+f6XZ{^{91K)}sIEa(v z3g8sl%=UG?I%|D^qGq_ugu~p2h&a_ zgg+Etwmsszy#7Kqjw(`T>WvEd)`?eYE@QTy0rofXgP8?30A=Uc2DSo7u9IR&*+9vm z38(gkZ^BA!5?6#C6WLKdlDEg#ox1rY`8w0s=FNO2)NI3Bm=)K)r+tVs#uVce<2q=J z?Tq0f5inXCe>3g_$cdUz8}ukGJRLl`aO(j>It8{(KrzR$_BZXW(l`K-I09VwIr@W` z=6vFX_oG~53ekEV#U`_1Ps^zuztB9&F~)-axbRDKKuilh5kMsV0@QQ|eA;PQ+lMGt zI?L0}<3nyu&eW9JqK7J1wwzLKvl7a4H23$JShFo}(W#qXlCKMmWq5 zYG3$ftW2(#VocdYiR>KPzye>kwDS)IW-xpn^Jg`HTbu7yil0IDcfO1t_Fz3P3_uGF z;91RehD%9W=xeM|vsx3@gTinIk?2T+XcEo9(@h7HHDWvxkO&wn8MliIfOlPwvu-|o zR|D&6XDTy#1Rxxdh%j{2r)IUo{&T~x9f`Vzz2XoFDvX`k!%xZL5E-d3cAOh_EiCE^ z_8L0rQ?lA(KY(yVAfka?wTQ|ZO7^bn5#d&c?^5$s<;a#xg_K);4pKVZ9es^8YE)~? zdU{rIo$gYceo@Qe&ZziLAFSntZf(6+IesSD^Lfml)qKH1eiM2tu$*VHQEUjry-yxS zCL|zBACT2CYbAb?n-7XoWj*G*Kcr>0BMa{@WY3Z*fxM_PUfi#fh(~w~ur|zw5!#e5 zT5@2Cv1qON%B-i>9fJTmN+;oZcgp=%568ma@UwA{aS7(4l3bux38hgIFw8d&G%mv2 zyWih$`S5Er1L!!Nf~)2$vz}TH3@Yzb@_!}9pbcxoY?weBHQyH~c@7S!&t?00;e&;W zu;fw|JQlboQ=lvd(s#+~kQIcV?+ttyk?;@(%wi+ikb>JQuiy;k0g@;gS#*rFR0QJz z(N~N?5VBBp6=EZxMHfLJCD1LoDu zEY0@Q2>T4{lh!~j@}XY%7*E$I&x3p}`JD9~zp`Ipw-GY|x z*ob-PiqBp_PCZp1AC#(lyK;JkZp)Cu{NmoNn5O*&SnjKdl^4qEj(8lCtO`4Z=AySM5dZ6l@m1kpn5~ z`d-O#MKftRtp;@8n}1~19~%S4`yXk#iU%1!Hcm3`LU(g!cEfBn0;v!A(i9XmZBnQR z`BE#m)ZF%7Xt}YxTIIu~CwSYUyY_v}I86}x^ToU#FNYp9la|xsS1%9o8%0q9;PKey zqVpQI`7`RtyUbzzSXJi5euceuqvnj}5=N6JwWQ7ftO`bN1sC&X1q7D)Vm$1o#hc5&kon|L{`y&tU$;OF=c5yyk0_uz_aqK~3mT4kb_==6SEE`wwp& z#1jE(#bKVUXJm(qI-l8^B)QlsYuJwo2o~uM}05|eY0*DE*KoCD5T!=1|5(FlbFYz*lYyr0o)i8TPkio zdw*lS{nJ8wh<%5mPknQCpz+GRVh_R|CemSm#j+~}SPW_eoC9oN1Mn=qh))7EOSu>4 z0Q-%NXUe4gYsQm21396jUMLQ5S02n40X&kAK19p7lkN!cu z*RIrjd9L}j&!fI!nE;=|$DrWg1bf&4=!8-D8Yj-!UbeXEFD@Q%I$1xwnHZNIk?})j zI_&vc-i`Z1+1(&N9P0+9>XrdjpvNeU>R5kyK+LI|tHs9aUboiVd0*T_Ahux_VqlFz z1?6m0py)}}+mFo^J#J{S$Nhi<-;_};V`#>8+)(u{k)At^u*K3~ej26lgJtrJrSv4cCn3;I{xYVYN^lN{jt6Q9jb(SY?*VVgcg? z(MWW~u#n4tWgc%LwoO{TXxH-b?D4X?+sf=*j>Vat`axMCXuv*UU0BCAR}L>w#)_U) zy{URs^{VPQTkik>xfR-j-xdDpE9tn~vq9l0rxczn7qVGCxo*W=t`0DNp$)necUF>I zR*@nN$0Og%X)2b`3cw;(=W4!;O)62*?Niqq#G*&v?04reW*m+^?RusVzkT=N1E&X$ z!ny0l7DJnTPV1_4EEDK$#ZPF0HP zH)j=)m1O(4T8axD+!h?#BFv7Wf^m52Uq^Yk-X|kGLx&k&so0`03gHgY0I=+ZEP2Jwsmp!-ZrP8l3)AHy*(q|roIMTIPVZcW z=f^2Lu#&=O%PE{S|2bkmJuPSkGnk$i6-eqIOZ8t>P;mDGke9 zhJAk^cd4ws@X2QY0VoVhSR$M?M;%rR>v0H1e1ZJmYhT&o3u3ScrlUZyDK34Tudrg1h&;BFU$Eva~j(DC8jjTg=i|ugv z&84Qe?BwF$ZC94fqrJ3~_Tc!VLaD3M+R@m!4<8;*;Ovk4;}aJpt>6~om|>}*6{_JF zP9PAKUG+t~x&)GU|JfZ&wV6YQ-F|mETjXo*CB7HO=``Nl9FW?V@`DeniOsNw6{g@U zfRsF%DOvLzmkSiv%eAO_x!rA)+)C;AGKJ$@P42hQ%GLQ9d2dA)C-;SY)+&1MUJBQK z@?arY0px>T^f77+CKieED9cN=y?=P?T)Yg<7Htj$`Sw{bk`%3eVUh59~3yV1j8js+~MB`S`rO z&hpxLCdE`F0$6=k2P`YjP}rD&Vo7~c>ZUBEitu9Q_?Q6#D{usFZqn{P5|IRmN#X>h zqiE^Vp5J>^=NK8#%RFEqwLZS`T=d0oapBLnGeslzV9Skech}uJ$Zn?$Pftq!g)KEE z7|)Bv7{JEkWAs71cDi=6b_izMv@SfMP<85BYD%#f_t{joK|hc3{|r#?LwUgT@$^N z`jO{@kff5y<3w=U-HcB&{8(>ZhJn{cg7v&YQ>`A-MaM#RD{VKi*$!oF=h^Jx$IQoT zLy4RA_)Z16OEi5~zS z&2zSSGLh!`D=&$AO@lct+p1*g__JM^YBge7zrXYj4sWAh`z^SBX3?f&Ta!NoLxq-yl+l!tMDmx>7nP#X8)R-A{Hv6@MbwsY^JW6%alRR zItZ~s>_lSa+2v}KP8MOGjQenZ$8fg8d18@P_6^tqu}yeULx4unZ2Af6t`Gk~g;rTT zz-F_NY$(9n@Mv}zh#UTJP2vt3_{-Qo>TN1dts-V!x^=Y__XX#@`1`Pvb46+tv|MDr zNA7moQGRAp|@m-}edAZ!{-duKuK>+UK0hk=#UMTD4^?UI>Lfg56->$|H zI90wy$=Su1u>ecGu8l5+ZDj83F1w7Xa#6Se1c3exp+o-=lt3wxqaQ8ZAvY?EGwGVl zt(nEB)5VQZgKu=BwHyA}*X&?<)VQ1(J@Q5;ZUEQ;7L4}*IH8DXpGE(R!XGVDc+GKn z{-wV`@TyIcNd{Y*D!f7NY}8FP7zPGsIDtScjD_I6%Xg!;#4O^NCGJjI?SWceI(H|x zDWbe*k)jn`w8X4xS&p%YhaKyO_GpbYGOGSfHd_BKSV9LKvST;UH%$x zuD`#ZpXxeR=NwAPZw##bOW``dncO6@x05i?99jSXiiZ`T@9+cC0agL!5D%p?R;$$i zKQ)X3g3>ta06LFLa0b`}jD{t^MzEd$v}^<$4Al>#j#f?Ln~uuPLl5b(kCLCwfu*cj z(w{4d30~J=RG1h}h3X3bEWaD%8)R~`$%e!K;T7?WatxLJvrnaC?tHvF@r0gU?c)^r z@aE<+9JPs)!);gD8U8|6g}vqJA_egAxpx^4eH0E%Qh3H@g=5uiai7r3>wR!5AFKLY zhNFJEPJV`k%Q=afeH88@4XLqQC*ZkG;lgrjbFMBhArt=p0+yTQcVCbq*Ad+8r0_wx zmDoD@jfaz)3{ZHs2f4 literal 0 HcmV?d00001 diff --git a/docs/public/llms.txt b/docs/public/llms.txt new file mode 100644 index 0000000..c3c7971 --- /dev/null +++ b/docs/public/llms.txt @@ -0,0 +1,39 @@ +# AFDocs + +> Test your documentation site against the Agent-Friendly Documentation Spec. AFDocs runs 22 checks across 7 categories to measure how well AI coding agents can discover, navigate, and consume your docs. + +## The Score + +- [What Is the Agent Score?](https://afdocs.dev/what-is-agent-score.md) +- [Why Agent-Friendliness Matters](https://afdocs.dev/why-agent-friendliness-matters.md) +- [Score Calculation](https://afdocs.dev/agent-score-calculation.md) +- [Interaction Diagnostics](https://afdocs.dev/interaction-diagnostics.md) + +## Get Started + +- [Quick Start](https://afdocs.dev/quick-start.md) +- [Run Locally](https://afdocs.dev/run-locally.md) +- [Improve Your Score](https://afdocs.dev/improve-your-score.md) +- [CI Integration](https://afdocs.dev/ci-integration.md) + +## Checks Reference + +- [Checks Overview](https://afdocs.dev/checks/index.md) +- [Content Discoverability](https://afdocs.dev/checks/content-discoverability.md): llms.txt existence, validity, size, link resolution, markdown links, directive +- [Markdown Availability](https://afdocs.dev/checks/markdown-availability.md): .md URL support, content negotiation +- [Page Size](https://afdocs.dev/checks/page-size.md): rendering strategy, HTML/markdown size, content start position +- [Content Structure](https://afdocs.dev/checks/content-structure.md): tabbed content serialization, header quality, code fence validity +- [URL Stability](https://afdocs.dev/checks/url-stability.md): HTTP status codes, redirect behavior +- [Observability](https://afdocs.dev/checks/observability.md): llms.txt freshness, markdown content parity, cache headers +- [Authentication](https://afdocs.dev/checks/authentication.md): auth gate detection, alternative access paths + +## API Reference + +- [CLI Reference](https://afdocs.dev/reference/cli.md): flags, output formats, sampling strategies +- [Programmatic API](https://afdocs.dev/reference/programmatic-api.md): TypeScript API for running checks +- [Scoring API](https://afdocs.dev/reference/scoring-api.md): computing scores from check results +- [Config File](https://afdocs.dev/reference/config-file.md): agent-docs.config.yml format and options + +## About + +- [About AFDocs](https://afdocs.dev/about.md) diff --git a/docs/public/log-agent-signal.php b/docs/public/log-agent-signal.php new file mode 100644 index 0000000..7f63350 --- /dev/null +++ b/docs/public/log-agent-signal.php @@ -0,0 +1,98 @@ + /home/user) +$homeDir = dirname($_SERVER['DOCUMENT_ROOT'] ?? ''); +$config = @include($homeDir . '/agent-signal-config.php'); +$logDir = ($config['log_dir'] ?? null); + +if ($logDir) { + if (!is_dir($logDir)) { + @mkdir($logDir, 0750, true); + } + + // Rate-limit direct-md: log at most once per IP per 60 seconds. + // Content-negotiation and llms-txt are rare, high-value signals + // that are always logged. + $shouldLog = true; + if ($trigger === 'direct-md') { + $rateLimitDir = $logDir . '/rate-limit'; + if (!is_dir($rateLimitDir)) { + @mkdir($rateLimitDir, 0750, true); + } + $ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown'; + $tokenFile = $rateLimitDir . '/' . md5($ip); + if (file_exists($tokenFile) && (time() - filemtime($tokenFile)) < 60) { + $shouldLog = false; + } else { + @touch($tokenFile); + } + } + + if ($shouldLog) { + // Collect all request headers + $allHeaders = getallheaders() ?: []; + + // Build a JSON log entry for rich, parseable data + $entry = [ + 'timestamp' => gmdate('Y-m-d\TH:i:s\Z'), + 'domain' => $_SERVER['HTTP_HOST'] ?? '-', + 'ip' => $_SERVER['REMOTE_ADDR'] ?? '-', + 'method' => $_SERVER['REQUEST_METHOD'] ?? '-', + 'path' => $path, + 'trigger' => $trigger, + 'headers' => $allHeaders, + ]; + + @file_put_contents( + $logDir . '/agent-signals-' . gmdate('Y-m-d') . '.jsonl', + json_encode($entry, JSON_UNESCAPED_SLASHES) . "\n", + FILE_APPEND | LOCK_EX + ); + } +} + +// Serve the file — remove any server-level cache headers first +header_remove('Cache-Control'); +header_remove('Expires'); +header('Content-Type: ' . $contentType . '; charset=utf-8'); +header('Cache-Control: max-age=3600, must-revalidate'); +readfile($file); diff --git a/docs/public/logos/afdoc_logo_dark.svg b/docs/public/logos/afdoc_logo_dark.svg new file mode 100644 index 0000000..19fb894 --- /dev/null +++ b/docs/public/logos/afdoc_logo_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/logos/afdoc_logo_light.svg b/docs/public/logos/afdoc_logo_light.svg new file mode 100644 index 0000000..6a0185c --- /dev/null +++ b/docs/public/logos/afdoc_logo_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/quick-start.md b/docs/quick-start.md new file mode 100644 index 0000000..8edb85b --- /dev/null +++ b/docs/quick-start.md @@ -0,0 +1,149 @@ +# Quick Start + +## Requirements + +Node.js 22 or later. + +## Run your first check + +No install needed. Point AFDocs at your documentation site: + +```bash +npx afdocs check https://docs.example.com --format scorecard +``` + +This discovers pages from your site (via llms.txt, sitemap, or both), samples up to 50, runs all 22 checks, and produces a scorecard with your overall score, per-category breakdowns, and fix suggestions: + +``` +Agent-Friendly Docs Scorecard +============================== + + Overall Score: 72 / 100 (C) + + Category Scores: + Content Discoverability 72 / 100 (C) + Markdown Availability 60 / 100 (C) + Page Size and Truncation Risk 45 / 100 (D) + ... + + Interaction Diagnostics: + [!] Markdown support is undiscoverable + Your site serves markdown at .md URLs, but agents have no way to + discover this. ... + + Check Results: + Content Discoverability + PASS llms-txt-exists llms.txt found at /llms.txt + WARN llms-txt-size llms.txt is 65,000 characters + FAIL llms-txt-directive No directive detected on any tested page + Fix: Add a blockquote near the top of each page ... +``` + +To understand what the score means and how it's calculated, see [What Is the Agent Score?](/what-is-agent-score). + +## See what's wrong and how to fix it + +### Get your score + +The scorecard shown above is the best starting point. It gives you the overall score, per-category breakdowns, [interaction diagnostics](/interaction-diagnostics), and fix suggestions for every failing check, all in one view: + +```bash +npx afdocs check https://docs.example.com --format scorecard +``` + +### Dig into per-page details + +When you're ready to fix specific issues, switch to the text format with `--verbose` and `--fixes`. This tells you exactly which pages have problems and what to do about them: + +```bash +npx afdocs check https://docs.example.com --verbose --fixes +``` + +The scorecard tells you _what's wrong_. The verbose text output tells you _where_. + +### Get machine-readable output + +For scripting and automation, use JSON output. Add `--score` to include scoring data and fix suggestions: + +```bash +npx afdocs check https://docs.example.com --format json --score +``` + +## Run specific checks + +If you're working on a particular issue, you don't need to run all 22 checks every time. Pass a comma-separated list of check IDs: + +```bash +npx afdocs check https://docs.example.com --checks llms-txt-exists,llms-txt-valid,llms-txt-size +``` + +Some checks depend on others. For example, `llms-txt-valid` requires `llms-txt-exists` to pass first; if you run `llms-txt-valid` alone, it will skip. When running a subset, include the dependencies too. + +See the [Checks Reference](/checks/) for the full list of check IDs and dependencies. + +## Check a specific page + +Skip page discovery entirely and check just one URL with `--sampling none`: + +```bash +npx afdocs check https://docs.example.com/api/auth --sampling none +``` + +You can combine this with `--checks` to run a single check against a single page: + +```bash +npx afdocs check https://docs.example.com/api/auth --sampling none --checks rendering-strategy +``` + +## Get consistent results between runs + +By default, AFDocs randomly samples pages, so results can vary between runs. For reproducible results (useful when verifying a fix), use deterministic sampling: + +```bash +npx afdocs check https://docs.example.com --sampling deterministic +``` + +This sorts discovered URLs alphabetically and picks an even spread, producing the same sample every time as long as your site's URL set is stable. + +## Tune request behavior + +AFDocs is designed to be a good citizen. It enforces delays between requests and caps concurrent connections. If you need to adjust these: + +```bash +# Slower, gentler requests (for rate-limited servers) +npx afdocs check https://docs.example.com --request-delay 500 --max-concurrency 1 + +# Faster runs (for your own infrastructure) +npx afdocs check https://docs.example.com --request-delay 50 --max-concurrency 10 + +# Sample fewer pages for a quicker check +npx afdocs check https://docs.example.com --max-links 10 +``` + +For the full list of flags, see the [CLI Reference](/reference/cli). + +## Exit codes + +AFDocs exits with `0` if all checks pass or warn, and `1` if any check fails. This makes it usable in CI pipelines and shell scripts. See [CI Integration](/ci-integration) for full setup. + +## Installing + +`npx` downloads and runs AFDocs on demand, which is fine for getting started and one-off checks. If you run it regularly, you can install it for faster startup: + +```bash +# Global install — puts `afdocs` on your PATH +npm install -g afdocs +afdocs check https://docs.example.com + +# Project dev dependency — for CI and test suites +npm install -D afdocs +``` + +For CI integration with vitest helpers, see [CI Integration](/ci-integration). + +## Next steps + +- [Improve Your Score](/improve-your-score) — a prioritized workflow for fixing what the checks found +- [Run Locally](/run-locally) — iterate against a local dev server +- [CI Integration](/ci-integration) — add checks to your CI pipeline +- [Checks Reference](/checks/) — what each check measures and why diff --git a/docs/reference/cli.md b/docs/reference/cli.md new file mode 100644 index 0000000..17d76ec --- /dev/null +++ b/docs/reference/cli.md @@ -0,0 +1,129 @@ +# CLI Reference + +## Install + +```bash +# Run without installing (recommended for getting started) +npx afdocs check https://docs.example.com + +# Install globally +npm install -g afdocs + +# Install as a project dev dependency +npm install -D afdocs +``` + +Requires Node.js 22 or later. + +## Commands + +### `afdocs check ` + +Run agent-friendly documentation checks against a URL. + +```bash +afdocs check https://docs.example.com +``` + +The URL can be a site root or a specific page. When pointing to a site root, `afdocs` discovers pages via `llms.txt` and sitemap, then samples a subset to check. When pointing to a specific page with `--sampling none`, it skips discovery and checks just that page. + +## Options + +### Output + +| Flag | Default | Description | +| ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `-f, --format ` | `text` | Output format: `text`, `json`, or `scorecard` | +| `-v, --verbose` | | Show per-page details for checks with issues | +| `--fixes` | | Show per-check fix suggestions for warn/fail checks (only needed for `text` format; the other two formats include fix suggestions automatically) | +| `--score` | | Include scoring data in JSON output (only usable with `json` output format) | + +**Which format to use:** + +- **`text`** is the default. Shows per-check pass/warn/fail/skip results. Add `--verbose` for per-page details and `--fixes` for fix suggestions. Useful when iterating on individual check fixes. +- **`scorecard`** includes the overall score, per-category scores, interaction diagnostics, and fix suggestions for every failing check. This is the best starting point for understanding your site's agent-friendliness. +- **`json`** produces machine-readable output for scripting and automation. Add `--score` to include scoring data and fix suggestions. + +### Check selection + +| Flag | Default | Description | +| -------------------- | ------- | ---------------------------------------- | +| `-c, --checks ` | all | Comma-separated list of check IDs to run | + +```bash +# Run only llms.txt checks +afdocs check https://docs.example.com --checks llms-txt-exists,llms-txt-valid,llms-txt-size +``` + +Some checks depend on others. If you include a check without its dependency, the dependent check will be skipped. See [Check dependencies](/checks/#check-dependencies) for the full list. + +### Sampling + +| Flag | Default | Description | +| ----------------------- | -------- | ----------------------------------------------------------- | +| `--sampling ` | `random` | URL sampling strategy: `random`, `deterministic`, or `none` | +| `--max-links ` | `50` | Maximum number of pages to sample | + +**Sampling strategies:** + +- **`random`**: Shuffle discovered URLs and take the first N. Fast and broad, but results vary between runs. Useful for spot-checking pages across a large corpus. +- **`deterministic`**: Sort discovered URLs alphabetically and pick an even spread. Produces the same sample on repeated runs as long as the URL set is stable. Useful for CI or when verifying a fix. +- **`none`**: Skip discovery entirely. Only check the URL you pass on the command line. + +```bash +# Reproducible results +afdocs check https://docs.example.com --sampling deterministic + +# Check a single page +afdocs check https://docs.example.com/api/auth --sampling none + +# Sample fewer pages for a quicker run +afdocs check https://docs.example.com --max-links 10 + +# Sample more pages for better representation across a large corpus +afdocs check https://docs.example.com --max-links 100 +``` + +### Request behavior + +| Flag | Default | Description | +| ----------------------- | ------- | -------------------------------------- | +| `--max-concurrency ` | `3` | Maximum concurrent HTTP requests | +| `--request-delay ` | `200` | Delay between requests in milliseconds | + +AFDocs enforces delays between requests and caps concurrent connections to avoid overloading your server. Adjust these if you need gentler or faster runs: + +```bash +# Slower, gentler (for rate-limited servers) +afdocs check https://docs.example.com --request-delay 500 --max-concurrency 1 + +# Faster (for your own infrastructure) +afdocs check https://docs.example.com --request-delay 50 --max-concurrency 10 +``` + +### Size thresholds + +| Flag | Default | Description | +| ---------------------- | -------- | -------------------------------------- | +| `--pass-threshold ` | `50000` | Page size pass threshold in characters | +| `--fail-threshold ` | `100000` | Page size fail threshold in characters | + +These thresholds apply to `page-size-html`, `page-size-markdown`, and `tabbed-content-serialization`. Pages under the pass threshold pass; pages between the two thresholds warn; pages over the fail threshold fail. + +The defaults (50K pass, 100K fail) reflect observed agent truncation limits. You generally don't need to change these unless you have specific knowledge of your users' agent platforms. + +## Exit codes + +| Code | Meaning | +| ---- | --------------------------- | +| `0` | All checks passed or warned | +| `1` | One or more checks failed | + +This makes AFDocs usable in CI pipelines and shell scripts. A warning does not cause a non-zero exit. See [CI Integration](/ci-integration) for full setup. + +## Global flags + +| Flag | Description | +| ----------- | ------------------------ | +| `--version` | Print the version number | +| `--help` | Print help information | diff --git a/docs/reference/config-file.md b/docs/reference/config-file.md new file mode 100644 index 0000000..53a4db4 --- /dev/null +++ b/docs/reference/config-file.md @@ -0,0 +1,81 @@ +# Config File + +The `agent-docs.config.yml` file lets you define a reusable configuration for running `afdocs` checks. It's currently used by the [vitest test helpers](/ci-integration) and is planned for CLI support ([issue #12](https://github.com/agent-ecosystem/afdocs/issues/12)). + +## Format + +```yaml +# Required: the URL to check +url: https://docs.example.com + +# Optional: run only specific checks +checks: + - llms-txt-exists + - llms-txt-valid + - llms-txt-size + - llms-txt-links-resolve + - rendering-strategy + - page-size-html + - http-status-codes + - auth-gate-detection + +# Optional: override default options +options: + maxLinksToTest: 20 + samplingStrategy: deterministic + maxConcurrency: 5 + requestDelay: 100 + thresholds: + pass: 50000 + fail: 100000 +``` + +## Fields + +### `url` (required) + +The documentation site URL to check. This is the only required field. + +### `checks` (optional) + +A list of check IDs to run. If omitted, all 22 checks run. Use this to focus on checks that are actionable for your platform. See the [Checks Reference](/checks/) for the full list of check IDs. + +This is particularly useful when your docs platform doesn't support certain capabilities. For example, if you can't serve markdown, exclude the markdown-related checks so your score reflects what you can control. See [Improve Your Score](/improve-your-score#step-3-work-through-fixes-iteratively) for more on this approach. + +### `options` (optional) + +Override default runner options. All fields are optional: + +| Field | Default | Description | +| ------------------ | -------- | ---------------------------------------------------- | +| `maxLinksToTest` | `50` | Maximum number of pages to sample | +| `samplingStrategy` | `random` | `random`, `deterministic`, or `none` | +| `maxConcurrency` | `3` | Maximum concurrent HTTP requests | +| `requestDelay` | `200` | Delay between requests in milliseconds | +| `requestTimeout` | `30000` | Timeout for individual HTTP requests in milliseconds | +| `thresholds.pass` | `50000` | Page size pass threshold in characters | +| `thresholds.fail` | `100000` | Page size fail threshold in characters | + +## Config resolution + +The config loader searches for `agent-docs.config.yml` (or `.yaml`) starting from the current working directory and walking up the directory tree, similar to how ESLint and Prettier find their config files. This means the config works whether your test file is at the project root or in a subdirectory. + +You can also pass an explicit directory to the vitest helpers: + +```ts +import { describeAgentDocsPerCheck } from 'afdocs/helpers'; + +describeAgentDocsPerCheck(__dirname); +``` + +## Multiple configs + +You might maintain separate configs for different contexts (local development, staging, production). Once CLI config support lands ([issue #12](https://github.com/agent-ecosystem/afdocs/issues/12)), you'll be able to select a config at runtime: + +```bash +# Planned CLI usage +afdocs check --config agent-docs.local.yml +afdocs check --config agent-docs.staging.yml +``` + +For now, the vitest helpers always use the auto-discovered `agent-docs.config.yml`. If you need different configs for different environments, use environment variables or conditional logic in your test file to pass different options to the helpers. diff --git a/docs/reference/index.md b/docs/reference/index.md new file mode 100644 index 0000000..8dc25a9 --- /dev/null +++ b/docs/reference/index.md @@ -0,0 +1,6 @@ +# API Reference + +- [CLI](/reference/cli) — command-line flags, output formats, sampling strategies +- [Programmatic API](/reference/programmatic-api) — TypeScript API for running checks +- [Scoring API](/reference/scoring-api) — computing scores from check results +- [Config File](/reference/config-file) — `agent-docs.config.yml` format and options diff --git a/docs/reference/programmatic-api.md b/docs/reference/programmatic-api.md new file mode 100644 index 0000000..4873bc3 --- /dev/null +++ b/docs/reference/programmatic-api.md @@ -0,0 +1,96 @@ +# Programmatic API + +AFDocs exports its check runner and utilities as a TypeScript API, so you can integrate agent-friendliness checks into your own tools and workflows. + +## Run all checks + +```ts +import { runChecks } from 'afdocs'; + +const report = await runChecks('https://docs.example.com'); + +console.log(report.summary); +// { total: 22, pass: 15, warn: 3, fail: 2, skip: 2, error: 0 } + +for (const result of report.results) { + console.log(`${result.id}: ${result.status} — ${result.message}`); +} +``` + +`runChecks` returns a `ReportResult` containing: + +- `url` — the URL that was checked +- `timestamp` — when the check ran +- `results` — array of `CheckResult` objects (one per check) +- `summary` — counts by status (pass, warn, fail, skip, error) + +## Run with options + +Pass a second argument to configure sampling, concurrency, and thresholds: + +```ts +import { runChecks } from 'afdocs'; + +const report = await runChecks('https://docs.example.com', { + checkIds: ['llms-txt-exists', 'llms-txt-valid', 'llms-txt-size'], + samplingStrategy: 'deterministic', + maxLinksToTest: 20, + maxConcurrency: 5, + requestDelay: 100, + thresholds: { + pass: 50000, + fail: 100000, + }, +}); +``` + +All options are optional. The defaults match the CLI defaults. + +## Run a single check + +For more control, create a context and run individual checks: + +```ts +import { createContext, getCheck } from 'afdocs'; + +const ctx = createContext('https://docs.example.com'); +const check = getCheck('llms-txt-exists')!; +const result = await check.run(ctx); + +console.log(result.status); // 'pass', 'warn', 'fail', or 'skip' +console.log(result.message); +``` + +`createContext` sets up the shared state (HTTP client, page cache, previous results) that checks use. If you run multiple checks against the same context, later checks can access the results of earlier ones through `ctx.previousResults`, which is how check dependencies work. + +## List available checks + +```ts +import { getAllChecks, getChecksSorted } from 'afdocs'; + +// All checks as a Map +const all = getAllChecks(); + +// Checks in dependency-safe execution order +const sorted = getChecksSorted(); +for (const check of sorted) { + console.log(`${check.id} (${check.category}): ${check.description}`); +} +``` + +## Types + +The main types you'll work with: + +```ts +import type { + CheckResult, + CheckStatus, // 'pass' | 'warn' | 'fail' | 'skip' | 'error' + ReportResult, + RunnerOptions, + CheckOptions, + AgentDocsConfig, +} from 'afdocs'; +``` + +See the [Scoring API](/reference/scoring-api) for scoring-related types. diff --git a/docs/reference/scoring-api.md b/docs/reference/scoring-api.md new file mode 100644 index 0000000..f97ff5c --- /dev/null +++ b/docs/reference/scoring-api.md @@ -0,0 +1,72 @@ +# Scoring API + +The scoring module is available as a pure function for programmatic consumers. It takes a `ReportResult` from `runChecks` and returns a standalone `ScoreResult` with the overall score, per-category breakdowns, interaction diagnostics, and fix suggestions. + +## Compute a score + +```ts +import { runChecks, computeScore } from 'afdocs'; + +const report = await runChecks('https://docs.example.com'); +const score = computeScore(report); + +console.log(score.overall); // 72 +console.log(score.grade); // 'C' +console.log(score.categoryScores); // { 'content-discoverability': { score: 80, grade: 'B' }, ... } +console.log(score.diagnostics); // [{ id: 'markdown-undiscoverable', severity: 'warning', ... }] +console.log(score.resolutions); // { 'llms-txt-directive': 'Add a blockquote near the top...' } +``` + +`computeScore` is a pure function. It does not modify the report or make any network requests. Composition is the consumer's responsibility: the CLI formatters compose `runChecks` and `computeScore`; external consumers call them separately. + +## Import from the subpath + +You can also import from the dedicated scoring subpath: + +```ts +import { computeScore } from 'afdocs/scoring'; +``` + +This is the same function; the subpath is provided for consumers who want a narrower import. + +## ScoreResult + +`computeScore` returns a `ScoreResult` with these fields: + +| Field | Type | Description | +| ---------------- | ------------------------------- | ------------------------------------------------------------------------- | +| `overall` | `number` | The overall score (0-100) | +| `grade` | `Grade` | Letter grade (`A+`, `A`, `B`, `C`, `D`, `F`) | +| `categoryScores` | `Record` | Per-category score and grade | +| `checkScores` | `Record` | Per-check scoring details (weight, coefficient, proportion, earned score) | +| `diagnostics` | `Diagnostic[]` | Interaction diagnostics that fired | +| `caps` | `ScoreCap[]` | Score caps that were applied | +| `resolutions` | `Record` | Fix suggestions keyed by check ID | + +## Grade conversion + +If you need to convert a numeric score to a letter grade independently: + +```ts +import { toGrade } from 'afdocs'; + +toGrade(92); // 'A' +toGrade(100); // 'A+' +toGrade(55); // 'F' +``` + +## Types + +```ts +import type { + ScoreResult, + CheckScore, + CategoryScore, + ScoreCap, + Diagnostic, + DiagnosticSeverity, // 'info' | 'warning' | 'critical' + Grade, // 'A+' | 'A' | 'B' | 'C' | 'D' | 'F' +} from 'afdocs'; +``` + +For how the score is calculated (weights, coefficients, caps, proportional scoring), see [Score Calculation](/agent-score-calculation). diff --git a/docs/run-locally.md b/docs/run-locally.md new file mode 100644 index 0000000..d5aa252 --- /dev/null +++ b/docs/run-locally.md @@ -0,0 +1,92 @@ +# Run Locally + +You can run AFDocs against a local development server to iterate on fixes without deploying. This is the fastest way to work through the [Improve Your Score](/improve-your-score) workflow. + +## Basic setup + +Start your docs site locally, then point AFDocs at it: + +```bash +# In one terminal, start your dev server +npm run dev +# → http://localhost:3000 + +# In another terminal, run checks +npx afdocs check http://localhost:3000 +``` + +## Single-page mode + +When working on a specific page, skip discovery and check just that page: + +```bash +npx afdocs check http://localhost:3000/api/auth --sampling none +``` + +This is much faster than a full site check because it skips page discovery and only makes requests for the one URL. + +## Run specific checks + +If you're fixing a particular issue, run only the relevant checks: + +```bash +# Just page size checks +npx afdocs check http://localhost:3000 --checks page-size-html,content-start-position + +# Just llms.txt checks +npx afdocs check http://localhost:3000 --checks llms-txt-exists,llms-txt-valid,llms-txt-size + +# Single page, single check +npx afdocs check http://localhost:3000/api/auth --sampling none --checks rendering-strategy +``` + +## Use a config file + +For repeated local runs, create an `agent-docs.config.yml` pointing to localhost: + +```yaml +url: http://localhost:3000 + +# Optional: run only specific checks +# checks: +# - llms-txt-exists +# - llms-txt-valid +# - rendering-strategy + +# Optional: tune sampling +# options: +# maxLinksToTest: 20 +# samplingStrategy: deterministic +``` + +Then run checks without specifying the URL each time: + +```bash +npx afdocs check --format scorecard +``` + +By default, the CLI looks for `agent-docs.config.yml` in the current directory (or any parent directory). You can also pass an explicit config path with `--config`: + +```bash +npx afdocs check --config agent-docs.local.yml --format scorecard +``` + +This lets you maintain separate configs for different contexts (local development, staging, production) and choose the right one at runtime. It's the same config format used by the [vitest test helpers](/ci-integration). Any CLI flags you pass override the config values. + +## Local vs. production differences + +Some checks may behave differently against a local server: + +- **Redirects**: Your production CDN or hosting provider may add redirects (e.g., trailing slash normalization, www redirects) that your local server doesn't. The `redirect-behavior` check may pass locally but warn or fail in production. +- **Cache headers**: Local dev servers typically don't set cache headers. The `cache-header-hygiene` check will likely fail locally. This is expected; check it against production instead. +- **Auth gating**: If your production site has authentication, your local server probably doesn't. The `auth-gate-detection` check will pass locally but may fail in production. This represents a real agent failure mode; if an agent can't access your documentation without logging in, an agent can't access your documentation. +- **Hot reload injection**: Some dev servers inject hot-reload scripts into the page HTML. This can affect `page-size-html` and `content-start-position` results. Build and serve the production output locally (e.g., `npm run build && npm run preview`) for accurate size measurements. +- **llms.txt**: If your llms.txt is generated at build time, it won't exist on the dev server. Either generate it first or skip the llms.txt checks locally. + +For the most accurate results, build the production output and serve it with a local static server: + +```bash +npm run build +npx serve dist # or however your site serves its build output +npx afdocs check http://localhost:3000 +``` diff --git a/docs/what-is-agent-score.md b/docs/what-is-agent-score.md new file mode 100644 index 0000000..758c38c --- /dev/null +++ b/docs/what-is-agent-score.md @@ -0,0 +1,90 @@ +# What Is the Agent Score? + +The Agent Score is a 0–100 rating of how well AI coding agents can discover, navigate, and consume your documentation site. You can get your score with [AFDocs](https://www.npmjs.com/package/afdocs), which runs 22 automated checks based on the [Agent-Friendly Documentation Spec](https://agentdocsspec.com) and maps the results to a letter grade. + +The AI coding agents that regularly consume your documentation while helping developers perform tasks include: + +- Claude Code +- Codex +- Cursor +- Gemini CLI +- GitHub Copilot +- Windsurf + +And more. + +This is a distinct audience from LLM and AI answer engine crawlers, and they need different things from your documentation. + +## Why agent-friendliness matters + +When agents can't use your docs, they fall back on training data (which may be outdated) or look for content elsewhere. That means developers get bad answers, your support costs go up, and competitors with more agent-friendly docs gain an advantage. + +A good Agent Score means agents can reach your content, read it in a useful format, and navigate it reliably. That creates better outcomes for developers using those agents. + +For the full business case, including how agents fail on documentation, the concrete impact, and how to make the case internally, see [Why Agent-Friendliness Matters](/why-agent-friendliness-matters). + +## What the score measures + +The 22 checks cover seven categories: + +| Category | What it tests | +| ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| [Content Discoverability](/checks/content-discoverability) | Can agents find your docs? Do you have an `llms.txt`? Do pages tell agents where to look? | +| [Markdown Availability](/checks/markdown-availability) | Can agents get content in markdown (their preferred format) via `.md` URLs or content negotiation? | +| [Page Size](/checks/page-size) | Will agents hit truncation limits? Are pages server-rendered, or do agents get empty SPA shells? | +| [Content Structure](/checks/content-structure) | Do tabbed UI components blow up page size? Are code fences properly closed? | +| [URL Stability](/checks/url-stability) | Do error pages return real 404s? Do redirects use standard HTTP methods? | +| [Observability](/checks/observability) | Is your `llms.txt` fresh? Do markdown and HTML versions match? Are cache headers reasonable? | +| [Authentication](/checks/authentication) | Can agents reach your docs at all, or is everything behind a login wall? | + +Not all checks carry equal weight. Authentication failures and missing `llms.txt` are critical, while cache header issues are refinements. The scoring system accounts for this with [weight tiers](/agent-score-calculation#check-weights-by-category) and [score caps](/agent-score-calculation#score-caps) that prevent high scores when fundamental problems exist. + +## Letter grades + +| Grade | Score | What it means | +| ------ | ----- | ---------------------------------------------------------------------------- | +| **A+** | 100 | Every check passes. Agents can fully navigate and consume your docs. | +| **A** | 90–99 | Excellent. Agents can use your documentation with minimal friction. | +| **B** | 80–89 | Good. Minor improvements possible; most content is accessible to agents. | +| **C** | 70–79 | Functional but with notable gaps. Some content is inaccessible or degraded. | +| **D** | 60–69 | Significant barriers. Agents struggle to use your documentation effectively. | +| **F** | 0–59 | Agents likely cannot use your documentation in a meaningful way. | + +## What the scorecard looks like + +The score is part of a larger scorecard that includes per-category breakdowns, system-level diagnostics that emerge from combinations of check results, and individual check results with fix suggestions: + +``` +Agent-Friendly Docs Scorecard +============================== + + Overall Score: 72 / 100 (C) + + Category Scores: + Content Discoverability 72 / 100 (C) + Markdown Availability 60 / 100 (C) + Page Size and Truncation Risk 45 / 100 (D) + ... + + Interaction Diagnostics: + [!] Markdown support is undiscoverable + Your site serves markdown at .md URLs, but agents have no way to + discover this. ... + + Check Results: + Content Discoverability + PASS llms-txt-exists llms.txt found at /llms.txt + WARN llms-txt-size llms.txt is 65,000 characters + FAIL llms-txt-directive No directive detected on any tested page + Fix: Add a blockquote near the top of each page ... +``` + +The [Interaction Diagnostics](/interaction-diagnostics) section covers amplification effects between checks. When some check failures compound, the agent impact is more pronounced than individual check failures imply. This includes things like having markdown support that agents can't discover, or page sizes that exceed limits with no alternate format available. + +## What to do with your score + +If you already have a score and want to improve it, the [Improve Your Score](/improve-your-score) guide walks you through the highest-impact fixes in priority order. + +If you want to understand the math behind the number, [Score Calculation](/agent-score-calculation) covers the weights, proportional scoring, and interaction effects that produce the final score. + +If you want to run it yourself, [Quick Start](/quick-start) has you up and running in one command. diff --git a/docs/why-agent-friendliness-matters.md b/docs/why-agent-friendliness-matters.md new file mode 100644 index 0000000..dd5119d --- /dev/null +++ b/docs/why-agent-friendliness-matters.md @@ -0,0 +1,80 @@ +# Why Agent-Friendliness Matters + +AI coding agents are a new and fast-growing audience for your documentation. Millions of developers use tools like Claude Code, Cursor, GitHub Copilot, Windsurf, Codex, and Gemini CLI daily. Those tools read your docs on the developers' behalf. When a developer asks an agent to integrate your API, debug an issue, or follow a migration guide, the agent fetches and reads your documentation pages in real time. + +This is a distinct audience from LLM training crawlers or AI answer engines. Coding agents need to read specific pages, right now, and produce working code from what they find. If they can't, the developer gets a bad result and your product takes the hit. + +## How agents fail on documentation + +Agents don't read docs the way humans do. They can't scroll past a navigation bar, mentally filter out boilerplate, or click through a login flow. When your docs aren't set up for agents, here's what actually happens: + +- **Client-side rendering**: Agents fetch the page and get an empty JavaScript shell with no content. This is the most common complete failure mode, and it affects every docs site built on a single-page app framework without server-side rendering. +- **Truncation**: Agents have context limits. A page with 200K characters of inline CSS, JavaScript, and navigation markup before the actual content starts means the agent may never reach the documentation text. Even if it does, the content may be cut off. Different agent platforms implement different solutions for this problem, and each platform has different failure modes. +- **No discovery path**: Agents don't guess that your site supports `.md` URLs. Only some of them try `Accept: text/markdown` headers to get clean markdown content. Without an `llms.txt` or a directive on pages, agents have no way to find a markdown content path even if one exists. +- **Broken navigation**: Cross-host redirects, JavaScript redirects, and soft 404s (pages that return HTTP 200 with an error message) all break agent workflows. Agents trust HTTP status codes and follow standard redirects. Anything else is a dead end. +- **Auth walls**: If your docs require authentication, agents can't log in. The entire site is invisible to them. + +When your docs _are_ agent-friendly, none of this is visible. The agent fetches clean markdown, navigates via llms.txt, and produces working integration code on the first try. The developer never thinks about your docs at all, which is the goal. + +## The invisible problem + +When a documentation page has a typo, someone files a bug. When an agent can't read a documentation page, nobody files anything. The developer gets a bad answer from the agent, blames the agent (or your product), and moves on. There's no feedback loop. + +This means agent-accessibility problems can persist for months without anyone on your team knowing. Your docs could be perfectly written and completely invisible to the tools that millions of developers rely on. + +The Agent Score gives you visibility into this blind spot. It tests your site the way agents actually access it and tells you what they see (or don't see). + +## Business impact + +When agents can't use your documentation effectively, the result impacts your bottom line: + +### Increased support costs + +Agents that can't read your docs produce incorrect code. Developers hit errors, open support tickets, and file bug reports that trace back to bad agent output rather than actual bugs in your product. Your support team spends time debugging problems that good documentation would have prevented. + +### Customer churn and revenue impact + +Developers increasingly choose tools based on how well they work with AI agents. If integrating your product is painful because agents can't read your docs, developers will choose a competitor with docs that agents can actually use. This is a new competitive angle that most companies aren't tracking yet. + +### Wasted documentation investment + +You've invested in writing, maintaining, and hosting documentation. If agents can't access it, that investment is partially wasted for a growing segment of your audience. The content exists; it's just locked behind technical barriers that have real fixes. + +### Reputational damage + +When an agent writes bad code using your product, the developer's first instinct is often "this API is hard to use" or "the docs are bad," not "the agent couldn't read the docs." Poor agent-friendliness degrades your product's reputation even when the product and its documentation is excellent. + +## The effort has an outsized impact + +The highest-impact fixes for agent-friendliness are typically configuration changes, not documentation rewrites: + +| Fix | Impact | Typical effort | +| ------------------------------------ | ----------------- | -------------------------------------------------------------------------------- | +| Add an `llms.txt` file | Critical (10 pts) | A few hours for initial creation; minutes to maintain if generated at build time | +| Enable server-side rendering | Critical (10 pts) | A configuration flag on many docs platforms | +| Serve markdown at `.md` URLs | High (7 pts) | Platform-dependent; some support it natively, others need a server config change | +| Add an `llms.txt` directive to pages | High (7 pts) | A one-line addition to your page template | +| Fix broken `llms.txt` links | High (7 pts) | Find and fix broken links with `afdocs check --verbose` | +| Point `llms.txt` links to markdown | High (7 pts) | Find-and-replace in your `llms.txt` | + +Your documentation site may move from an F to a B or higher in a single sprint. The [Improve Your Score](/improve-your-score) guide walks through these fixes in priority order. + +## A new competitive angle + +When a developer asks an agent to "help me integrate Product A's API" and "help me integrate Product B's API", the agent will produce better code for whichever product has more agent-friendly documentation. The developer may not even realize why one integration went smoothly and the other didn't. + +Companies that optimize their docs for agents early will have a compounding advantage as agent usage grows. Companies that don't will gradually lose developer mindshare to competitors whose documentation agents can actually read. + +This isn't hypothetical. Agent usage among developers has grown rapidly through 2025 and into 2026, and the agents that read documentation (Claude Code, Cursor, Copilot, etc.) are among the most widely adopted developer tools in history. The documentation you ship today is already being read by agents, whether or not you've optimized for it. In early April 2026, documentation platform provider Mintlify [shared a statistic](https://www.linkedin.com/posts/handotdev_last-month-i-shared-that-ai-agents-account-activity-7445500425610420225-Bs6M): + +> Claude Code and Cursor account for nearly half of all views to documentation sites. + +## Making the case internally + +If you need to justify prioritizing agent-friendliness to leadership, here are the key points: + +1. **It's measurable.** Run `npx afdocs check https://your-docs-site.com --format scorecard` and you have a concrete before-and-after metric. See [Quick Start](/quick-start) for setup. +2. **The fixes may be small.** Most high-impact improvements are configuration changes, not content changes. See the [effort table above](#the-effort-has-an-outsized-impact). The effort size varies depending on your documentation platform. +3. **The problem is invisible without measurement.** You won't get bug reports about this. The Agent Score is the feedback loop. +4. **It's competitive.** If your competitors' docs are agent-friendly and yours aren't, agents will produce better code for their products. +5. **It protects your docs investment.** You've already written the content. Agent-friendliness makes sure it reaches this growing audience. diff --git a/package.json b/package.json index 3632c1b..3947840 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,10 @@ "format": "prettier --write .", "format:check": "prettier --check .", "prepare": "husky", - "prepublishOnly": "npm run lint && npm test && npm run build" + "prepublishOnly": "npm run lint && npm test && npm run build", + "docs:dev": "npm run dev --prefix docs", + "docs:build": "npm run build --prefix docs", + "docs:preview": "npm run preview --prefix docs" }, "lint-staged": { "*.{ts,js,mjs}": [ From d68661d2a0b2ff647c152e2e4a71b083be25477d Mon Sep 17 00:00:00 2001 From: dacharyc Date: Sun, 5 Apr 2026 21:43:23 -0400 Subject: [PATCH 2/7] Update config behavior to reflect v0.9.0 release --- docs/reference/cli.md | 18 ++++++++++++++++++ docs/reference/config-file.md | 18 ++++++++++++------ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/docs/reference/cli.md b/docs/reference/cli.md index 17d76ec..0120dcc 100644 --- a/docs/reference/cli.md +++ b/docs/reference/cli.md @@ -44,6 +44,24 @@ The URL can be a site root or a specific page. When pointing to a site root, `af - **`scorecard`** includes the overall score, per-category scores, interaction diagnostics, and fix suggestions for every failing check. This is the best starting point for understanding your site's agent-friendliness. - **`json`** produces machine-readable output for scripting and automation. Add `--score` to include scoring data and fix suggestions. +### Config file + +| Flag | Default | Description | +| ----------------- | ------- | -------------------------------------------- | +| `--config ` | | Path to a config file (skips auto-discovery) | + +Without `--config`, the CLI looks for `agent-docs.config.yml` (or `.yaml`) starting from the current directory and walking up the tree. Config values serve as defaults; any CLI flags you pass override them. + +```bash +# Auto-discover config (typical usage) +afdocs check --format scorecard + +# Use an explicit config file +afdocs check --config agent-docs.local.yml --format scorecard +``` + +See [Config File](/reference/config-file) for the full config format. + ### Check selection | Flag | Default | Description | diff --git a/docs/reference/config-file.md b/docs/reference/config-file.md index 53a4db4..8489d5c 100644 --- a/docs/reference/config-file.md +++ b/docs/reference/config-file.md @@ -1,6 +1,6 @@ # Config File -The `agent-docs.config.yml` file lets you define a reusable configuration for running `afdocs` checks. It's currently used by the [vitest test helpers](/ci-integration) and is planned for CLI support ([issue #12](https://github.com/agent-ecosystem/afdocs/issues/12)). +The `agent-docs.config.yml` file lets you define a reusable configuration for running `afdocs` checks. It works with both the CLI and the [vitest test helpers](/ci-integration). ## Format @@ -58,9 +58,9 @@ Override default runner options. All fields are optional: ## Config resolution -The config loader searches for `agent-docs.config.yml` (or `.yaml`) starting from the current working directory and walking up the directory tree, similar to how ESLint and Prettier find their config files. This means the config works whether your test file is at the project root or in a subdirectory. +The config loader searches for `agent-docs.config.yml` (or `.yaml`) starting from the current working directory and walking up the directory tree, similar to how ESLint and Prettier find their config files. This means the config works whether you're running the CLI from your project root or running a test file from a subdirectory. -You can also pass an explicit directory to the vitest helpers: +For the vitest helpers, you can also pass an explicit directory: ```ts import { describeAgentDocsPerCheck } from 'afdocs/helpers'; @@ -70,12 +70,18 @@ describeAgentDocsPerCheck(__dirname); ## Multiple configs -You might maintain separate configs for different contexts (local development, staging, production). Once CLI config support lands ([issue #12](https://github.com/agent-ecosystem/afdocs/issues/12)), you'll be able to select a config at runtime: +You might maintain separate configs for different contexts (local development, staging, production). Use `--config` to select one at runtime: ```bash -# Planned CLI usage afdocs check --config agent-docs.local.yml afdocs check --config agent-docs.staging.yml ``` -For now, the vitest helpers always use the auto-discovered `agent-docs.config.yml`. If you need different configs for different environments, use environment variables or conditional logic in your test file to pass different options to the helpers. +A common pattern: point `agent-docs.config.yml` at your production URL (CI auto-discovers this), and override just the URL on the command line when running locally: + +```bash +# Production config is auto-discovered; URL is overridden for local dev +afdocs check http://localhost:3000 +``` + +CLI flags always take precedence over config values. From ed2bc146bdbee782284126ff47b2727e26783425 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Sun, 5 Apr 2026 22:14:44 -0400 Subject: [PATCH 3/7] Add docs site to package.json, add docs build step --- .gitignore | 1 + docs/package.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index b21362f..91a5437 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ dist/ coverage/ *.tsbuildinfo docs/.vitepress/cache/ +docs/deploy .DS_Store diff --git a/docs/package.json b/docs/package.json index 31dc50f..d85eeaa 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,7 +4,7 @@ "type": "module", "scripts": { "dev": "vitepress dev", - "build": "./generate_llms_txt && vitepress build", + "build": "./generate_llms_txt && vitepress build && ./generate_agent_md", "preview": "vitepress preview" }, "devDependencies": { diff --git a/package.json b/package.json index 3947840..0c9ab9e 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "bugs": { "url": "https://github.com/agent-ecosystem/afdocs/issues" }, - "homepage": "https://github.com/agent-ecosystem/afdocs", + "homepage": "https://afdocs.dev", "license": "MIT", "engines": { "node": ">=22" From 41320984a5d889b9c24fec00947831aa857404a1 Mon Sep 17 00:00:00 2001 From: dacharyc Date: Sun, 5 Apr 2026 22:19:20 -0400 Subject: [PATCH 4/7] Add the script to generate the markdown versions of the pages --- docs/generate_agent_md | 135 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100755 docs/generate_agent_md diff --git a/docs/generate_agent_md b/docs/generate_agent_md new file mode 100755 index 0000000..22d2a02 --- /dev/null +++ b/docs/generate_agent_md @@ -0,0 +1,135 @@ +#!/usr/bin/env node +// +// Generates agent-facing markdown versions of all docs pages. +// Called after vitepress build. +// +// For each source .md file: +// - VitePress home layout frontmatter is converted to markdown +// (hero name/text/tagline/actions and features) +// - Other frontmatter (title, outline, etc.) is stripped +// -