From 810e3c7a516f17fe49fb7e0d190c53532e6f346f Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 8 May 2026 16:14:30 +0900 Subject: [PATCH 1/4] docs: refresh user-facing guide + reference for current code state Audit pass against root AGENTS.md (regenerated 2026-05-08) and the canonical sources in src/shared/model-requirements.ts, src/features/team-mode/, src/cli/, src/config/schema/. Each touched file keeps its existing tone but corrects stale facts: - guide/overview.md: project name + dual-package transition reality - guide/installation.md: bun-only invocation, dual oh-my-openagent / oh-my-opencode CLI surface, current doctor categories - guide/orchestration.md: 11 agents, category routing through sisyphus-junior, background concurrency, team-mode link - guide/agent-model-matching.md: Metis primary -> claude-sonnet-4-6 (matches src/shared/model-requirements.ts fallback chain) - guide/team-mode.md: full schema, member eligibility tiers, 12 team_* tools added when enabled - reference/cli.md: trim to current Commander surface (install, doctor, run, mcp-oauth, refresh-model-capabilities, get-local-version) - reference/configuration.md: trim to schema-driven reference, JSONC rules, multi-level merge order, mcp_env_allowlist user-only constraint - reference/features.md: 5-tier hook composition counts, 3-tier MCPs, hashline edit, IntentGate, OpenClaw bidirectional dispatcher Cross-cutting: every `oh-my-opencode.schema.json` URL replaced with the canonical `oh-my-openagent.schema.json` (legacy package name in text bodies preserved where it documents the dual-publish transition). --- docs/examples/coding-focused.jsonc | 2 +- docs/examples/default.jsonc | 2 +- docs/examples/planning-focused.jsonc | 2 +- docs/guide/agent-model-matching.md | 2 +- docs/guide/installation.md | 23 +- docs/guide/orchestration.md | 81 +- docs/guide/overview.md | 6 +- docs/guide/team-mode.md | 28 +- docs/reference/cli.md | 406 +++----- docs/reference/configuration.md | 1270 ++++++-------------------- docs/reference/features.md | 46 +- 11 files changed, 531 insertions(+), 1337 deletions(-) diff --git a/docs/examples/coding-focused.jsonc b/docs/examples/coding-focused.jsonc index f81be175e..2d94eda2f 100644 --- a/docs/examples/coding-focused.jsonc +++ b/docs/examples/coding-focused.jsonc @@ -1,5 +1,5 @@ { - "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json", + "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json", // Optimized for intensive coding sessions. // Prioritizes deep implementation agents and fast feedback loops. diff --git a/docs/examples/default.jsonc b/docs/examples/default.jsonc index 611f7534b..e5c7cb6a7 100644 --- a/docs/examples/default.jsonc +++ b/docs/examples/default.jsonc @@ -1,5 +1,5 @@ { - "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json", + "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json", // Balanced defaults for general development. // Tuned for reliability across diverse tasks without overspending. diff --git a/docs/examples/planning-focused.jsonc b/docs/examples/planning-focused.jsonc index 1aa096df3..3136ccdc5 100644 --- a/docs/examples/planning-focused.jsonc +++ b/docs/examples/planning-focused.jsonc @@ -1,5 +1,5 @@ { - "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json", + "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json", // Optimized for strategic planning, architecture, and complex project design. // Prioritizes deep thinking agents and thorough analysis before execution. diff --git a/docs/guide/agent-model-matching.md b/docs/guide/agent-model-matching.md index 3517fcf6f..f5f0b4189 100644 --- a/docs/guide/agent-model-matching.md +++ b/docs/guide/agent-model-matching.md @@ -332,7 +332,7 @@ See the [Orchestration System Guide](./orchestration.md) for how agents dispatch ```jsonc { - "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json", + "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json", "agents": { // Sisyphus: Kimi K2.6 is the top alternative to Claude for orchestration diff --git a/docs/guide/installation.md b/docs/guide/installation.md index f6fe0aed0..afaac80b9 100644 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -15,12 +15,13 @@ Run the interactive installer: ```bash bunx oh-my-openagent install # recommended -npx oh-my-openagent install # alternative ``` +Use Bun only for installation. Do not use npm, yarn, or pnpm. + > **Note**: The CLI ships with standalone binaries for all major platforms. No runtime (Bun/Node.js) is required for CLI execution after installation. > -> **Supported platforms**: macOS (ARM64, x64), Linux (x64, ARM64, Alpine/musl), Windows (x64) +> **Supported platforms**: 11 platform binaries across macOS (ARM64, x64, x64-baseline), Linux (x64, x64-baseline, x64-musl, x64-musl-baseline, ARM64, ARM64-musl), and Windows (x64, x64-baseline) Follow the prompts to configure your Claude, ChatGPT, and Gemini subscriptions. After installation, authenticate your providers as instructed. @@ -28,7 +29,23 @@ Anonymous telemetry is enabled by default to track active installations (DAU/WAU After you install it, you can read this [overview guide](./overview.md) to understand more. -The published package and local binary are still `oh-my-opencode`. Inside `opencode.json`, the compatibility layer now prefers the plugin entry `oh-my-openagent`, while legacy `oh-my-opencode` entries still load with a warning. Plugin config loading recognizes both `oh-my-openagent.json[c]` and `oh-my-opencode.json[c]` during the transition. If you see a "Using legacy package name" warning from `bunx oh-my-openagent doctor`, update your `opencode.json` plugin entry from `"oh-my-opencode"` to `"oh-my-openagent"`. +The project is dual-published during the rename transition: `oh-my-openagent` and `oh-my-opencode` are both published package names. Inside `opencode.json`, the compatibility layer now prefers the plugin entry `oh-my-openagent`, while legacy `oh-my-opencode` entries still load with a warning. Plugin config loading recognizes both `oh-my-openagent.json[c]` and `oh-my-opencode.json[c]` during the transition. If you see a "Using legacy package name" warning from `bunx oh-my-openagent doctor`, update your `opencode.json` plugin entry from `"oh-my-opencode"` to `"oh-my-openagent"`. + +Postinstall validates both platform binary resolution and OpenCode version compatibility. + +Core CLI subcommands are: `install`, `run`, `doctor`, `mcp-oauth`, `refresh-model-capabilities`, and `get-local-version`. + +Config schema URL: + +```json +"$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json" +``` + +Operational notes: + +- Claude Code compatibility is supported. +- Claude Code plugin discovery load timeout is 10 seconds. +- Runtime logger path: `/tmp/oh-my-opencode.log` ## For LLM Agents diff --git a/docs/guide/orchestration.md b/docs/guide/orchestration.md index c091dd948..dc50b10bd 100644 --- a/docs/guide/orchestration.md +++ b/docs/guide/orchestration.md @@ -41,11 +41,11 @@ flowchart TB end subgraph Execution["Execution Layer (Orchestrator)"] - Orchestrator[" Atlas
(Conductor)
claude-sonnet-4-6 / kimi-k2.5 / gpt-5.5 / minimax-m2.7"] + Orchestrator[" Atlas
(Conductor)
claude-sonnet-4-6 / kimi-k2.6 / gpt-5.5 / minimax-m2.7"] end subgraph Workers["Worker Layer (Specialized Agents)"] - Junior[" Sisyphus-Junior
(Task Executor)
claude-sonnet-4-6 / kimi-k2.5 / gpt-5.5 / minimax-m2.7"] + Junior[" Sisyphus-Junior
(Task Executor)
claude-sonnet-4-6 / kimi-k2.6 / gpt-5.5 / minimax-m2.7"] Oracle[" Oracle
(Architecture)
gpt-5.5 / gemini-3.1-pro / claude-opus-4-7 / glm-5"] Explore[" Explore
(Codebase Grep)
gpt-5.4-mini-fast / minimax-m2.7-highspeed / claude-haiku-4-5"] Librarian[" Librarian
(Docs/OSS)
gpt-5.4-mini-fast / minimax-m2.7-highspeed / claude-haiku-4-5"] @@ -77,6 +77,28 @@ flowchart TB Model labels above show the current fallback stacks from `src/shared/model-requirements.ts`, not marketing names. +### Agent Inventory and Modes (Current) + +The system has **11 built-in agents**: + +- Primary: `sisyphus`, `hephaestus`, `prometheus`, `atlas` +- Subagent: `oracle`, `librarian`, `explore`, `multimodal-looker`, `metis`, `momus`, `sisyphus-junior` + +Canonical assembly order for primary agents is: + +`Sisyphus → Hephaestus → Prometheus → Atlas` + +Mode distinction: + +- `mode: "primary"`: top-level session agents selected directly in UI/CLI +- `mode: "subagent"`: worker/consultant agents invoked via `task(..., subagent_type="...")` or `call_omo_agent(...)` + +### Delegation Semantics (Important) + +- `task(category="...")` routes to **Sisyphus-Junior** with category-optimized model routing +- `task(subagent_type="...")` invokes that specific agent directly (for example `oracle`, `explore`, `librarian`) +- Category and `subagent_type` are mutually exclusive inputs in one call + --- ## Planning: Prometheus + Metis + Momus @@ -294,18 +316,17 @@ task({ category: "visual-engineering", prompt: "..." }); // "Design beautifully" task({ category: "quick", prompt: "..." }); // "Just get it done fast" ``` -### Built-in Categories +### Delegate-Task Categories -| Category | Default config | Runtime fallback order | When to Use | -| -------------------- | ------------------------------- | -------------------------------------------------------------------------------------- | ----------------------------------------------------------- | -| `visual-engineering` | `google/gemini-3.1-pro high` | `gemini-3.1-pro` → `glm-5` → `claude-opus-4-7` → `glm-5` → `k2p5` | Frontend, UI/UX, design, styling, animation | -| `ultrabrain` | `openai/gpt-5.5 xhigh` | `gpt-5.5` → `gemini-3.1-pro` → `claude-opus-4-7` → `glm-5` | Deep logical reasoning, complex architecture decisions | -| `deep` | `openai/gpt-5.5 medium` | `gpt-5.5` → `claude-opus-4-7` → `gemini-3.1-pro` | Goal-oriented autonomous problem-solving, thorough research | -| `artistry` | `google/gemini-3.1-pro high` | `gemini-3.1-pro` → `claude-opus-4-7` → `gpt-5.5` | Highly creative or artistic tasks, novel ideas | -| `quick` | `openai/gpt-5.4-mini` | `gpt-5.4-mini` → `claude-haiku-4-5` → `gemini-3-flash` → `minimax-m2.7` → `gpt-5-nano` | Trivial tasks, single file changes, typo fixes | -| `unspecified-low` | `anthropic/claude-sonnet-4-6` | `claude-sonnet-4-6` → `gpt-5.3-codex` → `kimi-k2.5` → `gemini-3-flash` → `minimax-m2.7` | Tasks that don't fit other categories, low effort | -| `unspecified-high` | `anthropic/claude-opus-4-7 max` | `claude-opus-4-7` → `gpt-5.5` → `glm-5` → `k2p5` → `kimi-k2.5` | Tasks that don't fit other categories, high effort | -| `writing` | `kimi-for-coding/k2p5` | `gemini-3-flash` → `kimi-k2.5` → `claude-sonnet-4-6` → `minimax-m2.7` | Documentation, prose, technical writing | +`task(category="...")` supports these category names in user-facing orchestration: + +`visual-engineering`, `artistry`, `ultrabrain`, `deep`, `quick`, `unspecified-low`, `unspecified-high`, `writing`, `quick-rust`, `quick-zig`, `git` + +Notes: + +- Built-in defaults are defined in `src/tools/delegate-task/*-categories.ts` and `src/shared/model-requirements.ts` +- Projects/users can extend categories via config; additional category names may appear in your session prompt +- Regardless of category name, category dispatch goes through Sisyphus-Junior ### Skills: Domain-Specific Instructions @@ -326,6 +347,40 @@ task( ); ``` +Skill loading priority is: + +`project > opencode > user > builtin` + +### Skill MCP (Tier 3) + +Skill-embedded MCP servers are isolated per session using a composite key pattern: + +`${sessionID}:${skillName}:${serverName}` + +This prevents state bleed across sessions when the same skill/MCP is used concurrently. + +### Background Task Concurrency + +Background task concurrency defaults to **5** when no overrides are configured. + +- Keyed by model/provider routing key +- Configurable via `background_task.defaultConcurrency`, `background_task.providerConcurrency`, and `background_task.modelConcurrency` + +### Team Mode + +Team mode is parallel multi-agent orchestration and is **OFF by default**. + +For `subagent_type` team members, current eligibility is: + +- Eligible: `sisyphus`, `atlas`, `sisyphus-junior` +- Conditional: `hephaestus` (requires teammate permission enablement) +- Hard-reject: `oracle`, `librarian`, `explore`, `multimodal-looker`, `metis`, `momus`, `prometheus` + +Why `oracle`/`prometheus` are rejected in team members: + +- Oracle is read-only (cannot write/edit/patch/delegate) +- Prometheus is constrained to `.sisyphus/*.md` writes by the `prometheus-md-only` hook + --- ## Usage Patterns diff --git a/docs/guide/overview.md b/docs/guide/overview.md index 21443a68a..bcb734b0b 100644 --- a/docs/guide/overview.md +++ b/docs/guide/overview.md @@ -54,7 +54,7 @@ Instead of one agent doing everything, Oh My OpenAgent uses **specialized agents ``` User Request ↓ -[Intent Gate] — Classifies what you actually want +[IntentGate] — Classifies what you actually want ↓ [Sisyphus] — Main orchestrator, plans and delegates ↓ @@ -248,7 +248,7 @@ Oh My OpenAgent turns that into a coordinated team: **Hash-anchored edits.** Claude Code's edit tool fails when the model can't reproduce lines exactly. OmO's `LINE#ID` content hashing validates every edit before applying. Grok Code Fast 1 went from 6.7% to 68.3% success rate just from this change. -**Intent Gate.** Claude Code takes your prompt and runs. OmO classifies your true intent first — research, implementation, investigation, fix — then routes accordingly. Fewer misinterpretations, better results. +**IntentGate.** Claude Code takes your prompt and runs. OmO classifies your true intent first — research, implementation, investigation, fix — then routes accordingly. Fewer misinterpretations, better results. **LSP + AST tools.** Workspace-level rename, go-to-definition, find-references, pre-build diagnostics, AST-aware code rewrites. IDE precision that vanilla Claude Code doesn't have. @@ -260,7 +260,7 @@ Oh My OpenAgent turns that into a coordinated team: --- -## The Intent Gate +## IntentGate Before acting on any request, Sisyphus classifies your true intent. diff --git a/docs/guide/team-mode.md b/docs/guide/team-mode.md index 05ec799d4..1396e2a95 100644 --- a/docs/guide/team-mode.md +++ b/docs/guide/team-mode.md @@ -14,7 +14,7 @@ OFF by default. Enable via JSONC config. ## Enable -Add to `~/.config/opencode/oh-my-opencode.jsonc` (or project `.opencode/oh-my-opencode.jsonc`): +Add to user config `~/.config/opencode/oh-my-openagent.jsonc` or project config `.opencode/oh-my-openagent.jsonc`: ```jsonc { @@ -29,9 +29,25 @@ Add to `~/.config/opencode/oh-my-opencode.jsonc` (or project `.opencode/oh-my-op After enabling, restart opencode. The 12 `team_*` tools become available. +## Config schema (11 fields) + +All fields live under `team_mode`: + +- `enabled` (boolean, default `false`) +- `tmux_visualization` (boolean, default `false`) +- `max_parallel_members` (int, `1..8`, default `4`) +- `max_members` (int, `1..8`, default `8`) +- `max_messages_per_run` (int, `>=1`, default `10000`) +- `max_wall_clock_minutes` (int, `>=1`, default `120`) +- `max_member_turns` (int, `>=1`, default `500`) +- `base_dir` (optional string; default resolves to `~/.omo`) +- `message_payload_max_bytes` (int, `>=1024`, default `32768`) +- `recipient_unread_max_bytes` (int, `>=1024`, default `262144`) +- `mailbox_poll_interval_ms` (int, `>=500`, default `3000`) + ## Define a team -Teams live as directories under `~/.omo/teams/{name}/config.json`: +Team specs live under `~/.omo/teams/{name}/config.json` (user scope) or `/.omo/teams/{name}/config.json` (project scope): ```json { @@ -45,7 +61,7 @@ Teams live as directories under `~/.omo/teams/{name}/config.json`: } ``` -Project-scoped variant: `/.omo/teams/{name}/config.json` (project beats user on collisions). +When both scopes define the same team name, project scope wins. `version`, `createdAt`, and `leadAgentId` are optional in config files. The loader fills them automatically. You can either write a top-level `lead: {...}` shorthand, mark one member with `isLead: true`, or omit both when the team has exactly one member. @@ -56,7 +72,11 @@ Project-scoped variant: `/.omo/teams/{name}/config.json` (project beats ## Eligible agents -Only **sisyphus, atlas, sisyphus-junior, hephaestus** can be members. Read-only and orchestration-only agents (`oracle`, `librarian`, `explore`, `multimodal-looker`, `metis`, `momus`, `prometheus`) are rejected at parse time. Use `delegate-task` for those. +- **Eligible:** `sisyphus`, `atlas`, `sisyphus-junior`. +- **Conditional:** `hephaestus` (needs teammate permission `teammate: "allow"`; otherwise use `subagent_type: "sisyphus"`). +- **Hard-reject:** `oracle`, `librarian`, `explore`, `multimodal-looker`, `metis`, `momus`, `prometheus`. + +Hard-reject agents fail TeamSpec parsing because they cannot write mailbox state. Use `delegate-task` for those agents. ## Lifecycle diff --git a/docs/reference/cli.md b/docs/reference/cli.md index bc8892dd7..ca33f7614 100644 --- a/docs/reference/cli.md +++ b/docs/reference/cli.md @@ -1,337 +1,167 @@ # CLI Reference -Complete reference for the published `oh-my-opencode` CLI. During the rename transition, OpenCode plugin registration now prefers `oh-my-openagent` inside `opencode.json`. +Complete reference for the published CLI package. During the rename transition, both package names work: + +- `oh-my-openagent` (preferred package name) +- `oh-my-opencode` (compatibility package name) + +Plugin registration inside `opencode.json` prefers `oh-my-openagent`. ## Basic Usage ```bash -# Display help -bunx oh-my-opencode +# Display help (preferred package) +bunx oh-my-openagent -# Or with npx -npx oh-my-opencode +# Compatibility package +bunx oh-my-opencode ``` ## Commands -| Command | Description | -| ----------------------------- | ------------------------------------------------------ | -| `install` | Interactive setup wizard | -| `doctor` | Environment diagnostics and health checks | -| `run` | OpenCode session runner with task completion enforcement | -| `get-local-version` | Display local version information and update check | -| `refresh-model-capabilities` | Refresh the cached models.dev-based model capabilities | -| `version` | Show version information | -| `mcp oauth` | MCP OAuth authentication management | +| Command | Description | +| --- | --- | +| `install` | Interactive setup wizard | +| `doctor` | Installation health diagnostics | +| `run ` | Non-interactive OpenCode session runner with completion enforcement | +| `get-local-version` | Show current installed version and check for updates | +| `refresh-model-capabilities` | Refresh cached model capabilities snapshot from models.dev | +| `version` | Show CLI version | +| `mcp oauth` | OAuth token management for MCP servers | --- ## install -Interactive installation tool for initial Oh My OpenCode setup. Provides a TUI based on `@clack/prompts`. +Interactive installation tool for initial setup. ### Usage ```bash -bunx oh-my-opencode install +bunx oh-my-openagent install ``` -### Installation Process - -1. **Subscription Selection**: Choose which providers and subscriptions you actually have -2. **Plugin Registration**: Registers `oh-my-openagent` in OpenCode settings, or upgrades a legacy `oh-my-opencode` entry during the compatibility window -3. **Configuration File Creation**: Writes the generated OmO config to `oh-my-opencode.json` in the active OpenCode config directory -4. **Authentication Hints**: Shows the `opencode auth login` steps for the providers you selected, unless `--skip-auth` is set -5. **Telemetry Defaults**: Anonymous telemetry remains enabled unless you opt out through environment variables - ### Options | Option | Description | -| ------ | ----------- | -| `--no-tui` | Run in non-interactive mode without TUI | -| `--claude ` | Claude subscription mode | -| `--openai ` | OpenAI / ChatGPT subscription | -| `--gemini ` | Gemini integration | -| `--copilot ` | GitHub Copilot subscription | -| `--opencode-zen ` | OpenCode Zen access | -| `--zai-coding-plan ` | Z.ai Coding Plan subscription | -| `--kimi-for-coding ` | Kimi for Coding subscription | -| `--opencode-go ` | OpenCode Go subscription | -| `--vercel-ai-gateway ` | Vercel AI Gateway: no, yes (default: no) | +| --- | --- | +| `--no-tui` | Run in non-interactive mode (requires all needed options) | +| `--claude ` | Claude subscription: `no`, `yes`, `max20` | +| `--openai ` | OpenAI/ChatGPT subscription: `no`, `yes` | +| `--gemini ` | Gemini integration: `no`, `yes` | +| `--copilot ` | GitHub Copilot subscription: `no`, `yes` | +| `--opencode-zen ` | OpenCode Zen access: `no`, `yes` | +| `--zai-coding-plan ` | Z.ai Coding Plan subscription: `no`, `yes` | +| `--kimi-for-coding ` | Kimi For Coding subscription: `no`, `yes` | +| `--opencode-go ` | OpenCode Go subscription: `no`, `yes` | +| `--vercel-ai-gateway ` | Vercel AI Gateway: `no`, `yes` | | `--skip-auth` | Skip authentication setup hints | -Anonymous telemetry uses PostHog with a hashed installation identifier. Disable it with `OMO_SEND_ANONYMOUS_TELEMETRY=0` or `OMO_DISABLE_POSTHOG=1`. See [Privacy Policy](../legal/privacy-policy.md). +Anonymous telemetry uses PostHog with a hashed installation identifier. Disable with `OMO_SEND_ANONYMOUS_TELEMETRY=0` or `OMO_DISABLE_POSTHOG=1`. --- ## doctor -Diagnoses your environment to ensure Oh My OpenCode is functioning correctly. The current checks are grouped into system, config, tools, and models. +Diagnoses your environment and configuration. Checks are grouped into four categories: **System**, **Config**, **Tools**, and **Models**. -The doctor command detects common issues including: -- Legacy plugin entry references in `opencode.json` (warns when `oh-my-opencode` is still used instead of `oh-my-openagent`) -- Configuration file validity and JSONC parsing errors -- Model resolution and fallback chain verification -- Missing or misconfigured MCP servers ### Usage ```bash -bunx oh-my-opencode doctor +bunx oh-my-openagent doctor ``` -### Diagnostic Categories - -| Category | Check Items | -| ----------------- | ------------------------------------------------------------------------------------ | -| **System** | OpenCode binary, version (>= 1.0.150), plugin registration, legacy package name warning | -| **Config** | Configuration file validity, JSONC parsing, Zod schema validation | -| **Tools** | AST-Grep, LSP servers, GitHub CLI, MCP servers | -| **Models** | Model capabilities cache, model resolution, agent/category overrides, availability | - ### Options -| Option | Description | -| ------------ | ----------------------------------------- | -| `--status` | Show compact system dashboard | -| `--verbose` | Show detailed diagnostic information | -| `--json` | Output results in JSON format | +| Option | Description | +| --- | --- | +| `--status` | Show compact system dashboard | +| `--verbose` | Show detailed diagnostic information | +| `--json` | Output results in JSON format | -### Example Output +### Notes -``` -oh-my-opencode doctor +- The current minimum OpenCode version check is `>= 1.4.0`. +- The doctor command warns when legacy plugin registration (`oh-my-opencode`) is still present in `opencode.json`. -┌──────────────────────────────────────────────────┐ -│ Oh-My-OpenAgent Doctor │ -└──────────────────────────────────────────────────┘ - -System - ✓ OpenCode version: 1.0.155 (>= 1.0.150) - ✓ Plugin registered in opencode.json - -Config - ✓ oh-my-opencode.jsonc is valid - ✓ Model resolution: all agents have valid fallback chains - ⚠ categories.visual-engineering: using default model - -Tools - ✓ AST-Grep available - ✓ LSP servers configured - -Models - ✓ 11 agents, 8 categories, 0 overrides - ⚠ Some configured models rely on compatibility fallback - -Summary: 10 passed, 1 warning, 0 failed -``` --- ## run -Run opencode with todo/background task completion enforcement. Unlike 'opencode run', this command waits until all todos are completed or cancelled, and all child sessions (background tasks) are idle. +Runs a non-interactive session and exits only when both conditions are true: + +- all todos are completed or cancelled +- all background child sessions are idle ### Usage ```bash -bunx oh-my-opencode run +bunx oh-my-openagent run ``` ### Options -| Option | Description | -| --------------------- | ------------------------------------------------------------------- | -| `-a, --agent ` | Agent to use (default: from CLI/env/config, fallback: Sisyphus) | -| `-m, --model ` | Model override (e.g., anthropic/claude-sonnet-4) | -| `-d, --directory ` | Working directory | -| `-p, --port ` | Server port (attaches if port already in use) | -| `--attach ` | Attach to existing opencode server URL | -| `--on-complete ` | Shell command to run after completion | -| `--json` | Output structured JSON result to stdout | -| `--no-timestamp` | Disable timestamp prefix in run output | -| `--verbose` | Show full event stream (default: messages/tools only) | -| `--session-id ` | Resume existing session instead of creating new one | +| Option | Description | +| --- | --- | +| `-a, --agent ` | Agent to use (default resolution chain applies) | +| `-m, --model ` | Model override (example: `anthropic/claude-sonnet-4`) | +| `-d, --directory ` | Working directory | +| `-p, --port ` | Server port (attaches if already in use) | +| `--attach ` | Attach to an existing OpenCode server URL | +| `--on-complete ` | Run shell command after completion | +| `--json` | Output structured JSON result | +| `--no-timestamp` | Disable timestamp prefix in output | +| `--verbose` | Show full event stream (default: messages/tools only) | +| `--session-id ` | Resume an existing session | + +### Agent Resolution Order + +1. `--agent` +2. `OPENCODE_DEFAULT_AGENT` +3. `default_run_agent` in plugin config +4. `Sisyphus` --- ## get-local-version -Show current installed version and check for updates. +Shows local plugin version state and update status. ### Usage ```bash -bunx oh-my-opencode get-local-version +bunx oh-my-openagent get-local-version ``` ### Options -| Option | Description | -| ----------------- | ---------------------------------------------- | -| `-d, --directory` | Working directory to check config from | -| `--json` | Output in JSON format for scripting | +| Option | Description | +| --- | --- | +| `-d, --directory ` | Working directory used for plugin/config detection | +| `--json` | Output JSON for scripting | -### Output - -Shows: -- Current installed version -- Latest available version on npm -- Whether you're up to date -- Special modes (local dev, pinned version) - ---- - -## version - -Show version information. - -### Usage - -```bash -bunx oh-my-opencode version -``` - -`--on-complete` runs through your current shell when possible: `sh` on Unix shells, `pwsh` for PowerShell on non-Windows, `powershell.exe` for PowerShell on Windows, and `cmd.exe` as the Windows fallback. - ---- - -## mcp oauth - -Manages OAuth 2.1 authentication for remote MCP servers. - -### Usage - -```bash -# Login to an OAuth-protected MCP server -bunx oh-my-opencode mcp oauth login --server-url https://api.example.com - -# Login with explicit client ID and scopes -bunx oh-my-opencode mcp oauth login my-api --server-url https://api.example.com --client-id my-client --scopes read write - -# Remove stored OAuth tokens -bunx oh-my-opencode mcp oauth logout --server-url https://api.example.com - -# Check OAuth token status -bunx oh-my-opencode mcp oauth status [server-name] -``` - -### Options - -| Option | Description | -| -------------------- | ------------------------------------------------------------------------- | -| `--server-url ` | MCP server URL (required for login) | -| `--client-id ` | OAuth client ID (optional if server supports Dynamic Client Registration) | -| `--scopes ` | OAuth scopes as separate variadic arguments (for example: `--scopes read write`) | - -### Token Storage - -Tokens are stored in `~/.config/opencode/mcp-oauth.json` with `0600` permissions (owner read/write only). Key format: `{serverHost}/{resource}`. - ---- - -## Configuration Files - -The runtime loads user config as the base config, then merges project config on top: - -1. **Project Level**: `.opencode/oh-my-openagent.jsonc`, `.opencode/oh-my-openagent.json`, `.opencode/oh-my-opencode.jsonc`, or `.opencode/oh-my-opencode.json` -2. **User Level**: `~/.config/opencode/oh-my-openagent.jsonc`, `~/.config/opencode/oh-my-openagent.json`, `~/.config/opencode/oh-my-opencode.jsonc`, or `~/.config/opencode/oh-my-opencode.json` - -**Naming Note**: The published package and binary are still `oh-my-opencode`. Inside `opencode.json`, the compatibility layer now prefers the plugin entry `oh-my-openagent`. Plugin config loading recognizes both `oh-my-openagent.*` and legacy `oh-my-opencode.*` basenames. If both basenames exist in the same directory, the legacy `oh-my-opencode.*` file currently wins. - -### Filename Compatibility - -Both `.jsonc` and `.json` extensions are supported. JSONC (JSON with Comments) is preferred as it allows: -- Comments (both `//` and `/* */` styles) -- Trailing commas in arrays and objects - -If both `.jsonc` and `.json` exist in the same directory, the `.jsonc` file takes precedence. - -### JSONC Support - -Configuration files support **JSONC (JSON with Comments)** format. You can use comments and trailing commas. - -```jsonc -{ - // Agent configuration - "sisyphus_agent": { - "disabled": false, - "planner_enabled": true, - }, - - /* Category customization */ - "categories": { - "visual-engineering": { - "model": "google/gemini-3.1-pro", - }, - }, -} -``` - ---- - -## Troubleshooting - -### "OpenCode version too old" Error - -```bash -# Update OpenCode -npm install -g opencode@latest -# or -bun install -g opencode@latest -``` - -### "Plugin not registered" Error - -```bash -# Reinstall plugin -bunx oh-my-opencode install -``` - -### Doctor Check Failures - -```bash -# Diagnose with detailed information -bunx oh-my-opencode doctor --verbose - -# Show compact system dashboard -bunx oh-my-opencode doctor --status - -# JSON output for scripting -bunx oh-my-opencode doctor --json -``` - -### "Using legacy package name" Warning - -The doctor warns if it finds the legacy plugin entry `oh-my-opencode` in `opencode.json`. Update the plugin array to the canonical `oh-my-openagent` entry: - -```bash -# Replace the legacy plugin entry in user config -jq '.plugin = (.plugin // [] | map(if . == "oh-my-opencode" then "oh-my-openagent" else . end))' \ - ~/.config/opencode/opencode.json > /tmp/opencode.json && mv /tmp/opencode.json ~/.config/opencode/opencode.json -``` --- ## refresh-model-capabilities -Refreshes the cached model capabilities snapshot from models.dev. This updates the local cache used by capability resolution and compatibility diagnostics. +Refreshes the cached model capabilities snapshot from models.dev. ### Usage ```bash -bunx oh-my-opencode refresh-model-capabilities +bunx oh-my-openagent refresh-model-capabilities ``` ### Options -| Option | Description | -| ----------------- | --------------------------------------------------- | -| `-d, --directory` | Working directory to read oh-my-opencode config from | -| `--source-url ` | Override the models.dev source URL | -| `--json` | Output refresh summary as JSON | +| Option | Description | +| --- | --- | +| `-d, --directory ` | Working directory used to read plugin config | +| `--source-url ` | Override models.dev source URL | +| `--json` | Output refresh summary as JSON | ### Configuration -Configure automatic refresh behavior in your plugin config: - ```jsonc { "model_capabilities": { @@ -345,63 +175,51 @@ Configure automatic refresh behavior in your plugin config: --- -## Non-Interactive Mode +## version -Use JSON output for CI or scripted diagnostics. +Shows CLI package version. + +### Usage ```bash -# Run doctor in CI environment -bunx oh-my-opencode doctor --json - -# Save results to file -bunx oh-my-opencode doctor --json > doctor-report.json +bunx oh-my-openagent version ``` --- -## Developer Information +## mcp oauth -### CLI Structure +OAuth token management for MCP servers (Tier-3 MCP OAuth flow, including PKCE and dynamic client registration when supported by the server). -``` -src/cli/ -├── cli-program.ts # Commander.js-based main entry -├── install.ts # @clack/prompts-based TUI installer -├── config-manager/ # JSONC parsing, multi-source config management -│ └── *.ts -├── doctor/ # Health check system -│ ├── index.ts # Doctor command entry -│ └── checks/ # 17+ individual check modules -├── run/ # Session runner -│ └── *.ts -└── mcp-oauth/ # OAuth management commands - └── *.ts +### Usage + +```bash +# Authenticate +bunx oh-my-openagent mcp oauth login --server-url https://api.example.com + +# Authenticate with explicit client ID and scopes +bunx oh-my-openagent mcp oauth login --server-url https://api.example.com --client-id my-client --scopes read write + +# Remove stored tokens +bunx oh-my-openagent mcp oauth logout --server-url https://api.example.com + +# Show token status +bunx oh-my-openagent mcp oauth status [server-name] ``` -### Adding New Doctor Checks +### Options -Create `src/cli/doctor/checks/my-check.ts`: +| Option | Description | +| --- | --- | +| `--server-url ` | OAuth server URL (required by `login`, and required by `logout`) | +| `--client-id ` | OAuth client ID (optional if server supports DCR) | +| `--scopes ` | OAuth scopes as variadic values | -```typescript -import type { DoctorCheck } from "../types"; +--- -export const myCheck: DoctorCheck = { - name: "my-check", - category: "environment", - check: async () => { - // Check logic - const isOk = await someValidation(); +## Exit Codes - return { - status: isOk ? "pass" : "fail", - message: isOk ? "Everything looks good" : "Something is wrong", - }; - }, -}; -``` +- `0` on success +- `1` on failure -Register in `src/cli/doctor/checks/index.ts`: - -```typescript -export { myCheck } from "./my-check"; -``` +`run`, `install`, `doctor`, `get-local-version`, `refresh-model-capabilities`, and `mcp oauth` subcommands return explicit numeric exit codes. diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md index f33084acd..9321b156e 100644 --- a/docs/reference/configuration.md +++ b/docs/reference/configuration.md @@ -1,1034 +1,278 @@ # Configuration Reference -Complete reference for Oh My OpenCode plugin configuration. During the rename transition, the runtime recognizes both `oh-my-openagent.json[c]` and legacy `oh-my-opencode.json[c]` files. +This reference documents the current runtime behavior for Oh My OpenAgent plugin config loading and validation. ---- +During the rename transition, both basenames are accepted: -## Table of Contents +- Preferred: `oh-my-openagent.jsonc` or `oh-my-openagent.json` +- Legacy: `oh-my-opencode.jsonc` or `oh-my-opencode.json` -- [Getting Started](#getting-started) - - [File Locations](#file-locations) - - [Quick Start Example](#quick-start-example) -- [Core Concepts](#core-concepts) - - [Agents](#agents) - - [Categories](#categories) - - [Model Resolution](#model-resolution) -- [Task System](#task-system) - - [Background Tasks](#background-tasks) - - [Sisyphus Agent](#sisyphus-agent) - - [Sisyphus Tasks](#sisyphus-tasks) -- [Features](#features) - - [Skills](#skills) - - [Hooks](#hooks) - - [Commands](#commands) - - [Browser Automation](#browser-automation) - - [Tmux Integration](#tmux-integration) - - [Git Master](#git-master) - - [Comment Checker](#comment-checker) - - [Notification](#notification) - - [MCPs](#mcps) - - [LSP](#lsp) -- [Advanced](#advanced) - - [Runtime Fallback](#runtime-fallback) - - [Model Capabilities](#model-capabilities) - - [Hashline Edit](#hashline-edit) - - [Experimental](#experimental) -- [Reference](#reference) - - [Environment Variables](#environment-variables) - - [Provider-Specific](#provider-specific) +## Format and Naming Rules ---- +- Config format: JSONC (`//` comments, `/* */` comments, trailing commas) +- Key style: `snake_case` +- Validation: Zod v4 schema validation +- Auto-migration: legacy keys and values are migrated by `migrateConfigFile()` -## Getting Started - -### File Locations - -User config loads first. Project configs are discovered by walking from the working directory up to `$HOME`; closer configs win. If the working directory is outside `$HOME`, only that directory is checked. - -1. Walked configs: `.opencode/oh-my-openagent.json[c]` or legacy `.opencode/oh-my-opencode.json[c]` -2. User config (`.jsonc` preferred over `.json`): - -| Platform | Path candidates | -| ----------- | --------------- | -| macOS/Linux | `~/.config/opencode/oh-my-openagent.json[c]`, `~/.config/opencode/oh-my-opencode.json[c]` | -| Windows | `%APPDATA%\opencode\oh-my-openagent.json[c]`, `%APPDATA%\opencode\oh-my-opencode.json[c]` | - -**Security note:** `mcp_env_allowlist` is user-only. Walked configs cannot extend it. - -**Rename compatibility:** The published package and CLI binary remain `oh-my-opencode`. OpenCode plugin registration prefers `oh-my-openagent`, while legacy `oh-my-opencode` entries and config basenames still load during the transition. Config detection checks `oh-my-opencode` before `oh-my-openagent`, so if both plugin config basenames exist in the same directory, the legacy `oh-my-opencode.*` file currently wins. -JSONC supports `// line comments`, `/* block comments */`, and trailing commas. - -Enable schema autocomplete: - -```json -{ - "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json" -} -``` - -Run `bunx oh-my-opencode install` for guided setup. Run `opencode models` to list available models. - -### Quick Start Example - -Here's a practical starting configuration: +Schema autocomplete: ```jsonc { - "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json", + "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json", +} +``` +## File Discovery and Merge Order + +Load order (`src/plugin-config.ts`): + +1. User config in OpenCode config dir (`~/.config/opencode` on macOS/Linux, `%APPDATA%\\opencode` on Windows) +2. Walked project configs from the current directory up to `$HOME` (closer directory wins) + +When current directory is outside `$HOME`, walking is pinned to that directory. + +### Merge semantics + +- Deep merge: `agents`, `categories`, `team_mode`, `claude_code` +- Set union (dedup arrays): + - `agent_definitions` + - `disabled_agents` + - `disabled_mcps` + - `disabled_hooks` + - `disabled_commands` + - `disabled_skills` + - `disabled_tools` + - `mcp_env_allowlist` (during merge phase) +- Override replace: all other keys + +Security rule: final `mcp_env_allowlist` is forced to user-config only. Walked/project configs cannot extend it. + +## Migration Behavior + +- Legacy basename can be migrated to canonical basename automatically. +- Config migrations are idempotent and tracked using migration sidecar state (plus legacy `_migrations` compatibility handling). +- When content changes, migration writes timestamped backups like `*.bak.`. + +## Top-level Key Reference + +Types/defaults below are from `assets/oh-my-openagent.schema.json`. + +| Key | Type | Default | +| --- | --- | --- | +| `$schema` | `string` | none | +| `_migrations` | `string[]` | none | +| `agent_definitions` | `string[]` | none | +| `agents` | `object` | none | +| `auto_update` | `boolean` | none | +| `babysitting` | `object` | none | +| `background_task` | `object` | none | +| `browser_automation_engine` | `object` | none | +| `categories` | `object` | none | +| `claude_code` | `object` | none | +| `comment_checker` | `object` | none | +| `default_run_agent` | `string` | none | +| `disabled_agents` | `string[]` | none | +| `disabled_commands` | `string[]` | none | +| `disabled_hooks` | `string[]` | none | +| `disabled_mcps` | `string[]` | none | +| `disabled_skills` | `string[]` | none | +| `disabled_tools` | `string[]` | none | +| `experimental` | `object` | none | +| `git_master` | `object` | `{ "commit_footer": true, "include_co_authored_by": true, "git_env_prefix": "GIT_MASTER=1" }` | +| `hashline_edit` | `boolean` | none | +| `keyword_detector` | `object` | none | +| `mcp_env_allowlist` | `string[]` | none | +| `model_capabilities` | `object` | none | +| `model_fallback` | `boolean` | none | +| `new_task_system_enabled` | `boolean` | none | +| `notification` | `object` | none | +| `openclaw` | `object` | none | +| `ralph_loop` | `object` | none | +| `runtime_fallback` | `boolean \| object` | none | +| `sisyphus` | `object` | none | +| `sisyphus_agent` | `object` | none | +| `skills` | `string[] \| object` | none | +| `start_work` | `object` | none | +| `team_mode` | `object` | none | +| `tmux` | `object` | none | +| `websearch` | `object` | none | + +## High-use Sections + +### `team_mode` (all fields) + +```jsonc +{ + "team_mode": { + "enabled": false, + "tmux_visualization": false, + "max_parallel_members": 4, + "max_members": 8, + "max_messages_per_run": 10000, + "max_wall_clock_minutes": 120, + "max_member_turns": 500, + "base_dir": "/custom/path", // optional + "message_payload_max_bytes": 32768, + "recipient_unread_max_bytes": 262144, + "mailbox_poll_interval_ms": 3000, + }, +} +``` + +| Field | Type | Default | Notes | +| --- | --- | --- | --- | +| `enabled` | `boolean` | `false` | Master switch | +| `tmux_visualization` | `boolean` | `false` | Visual tmux mode | +| `max_parallel_members` | `integer` | `4` | Range `1..8` | +| `max_members` | `integer` | `8` | Range `1..8` | +| `max_messages_per_run` | `integer` | `10000` | Minimum `1` | +| `max_wall_clock_minutes` | `integer` | `120` | Minimum `1` | +| `max_member_turns` | `integer` | `500` | Minimum `1` | +| `base_dir` | `string` | none | Optional override path | +| `message_payload_max_bytes` | `integer` | `32768` | Minimum `1024` | +| `recipient_unread_max_bytes` | `integer` | `262144` | Minimum `1024` | +| `mailbox_poll_interval_ms` | `integer` | `3000` | Minimum `500` | + +### `tmux` + +| Field | Type | Default | +| --- | --- | --- | +| `enabled` | `boolean` | `false` | +| `layout` | `string` | `"main-vertical"` | +| `main_pane_size` | `number` | `60` | +| `main_pane_min_width` | `number` | `120` | +| `agent_pane_min_width` | `number` | `40` | +| `isolation` | `string` | `"inline"` | + +### `background_task` + +| Field | Type | Default | +| --- | --- | --- | +| `defaultConcurrency` | `number` | none | +| `providerConcurrency` | `object` | none | +| `modelConcurrency` | `object` | none | +| `maxDepth` | `integer` | none | +| `staleTimeoutMs` | `number` | none | +| `messageStalenessTimeoutMs` | `number` | none | +| `taskTtlMs` | `number` | none | +| `sessionGoneTimeoutMs` | `number` | none | +| `syncPollTimeoutMs` | `number` | none | +| `maxToolCalls` | `integer` | none | +| `circuitBreaker` | `object` | none | + +### `experimental` + +| Field | Type | Default | +| --- | --- | --- | +| `aggressive_truncation` | `boolean` | none | +| `auto_resume` | `boolean` | none | +| `preemptive_compaction` | `boolean` | none | +| `truncate_all_tool_outputs` | `boolean` | none | +| `dynamic_context_pruning` | `object` | none | +| `task_system` | `boolean` | none | +| `plugin_load_timeout_ms` | `number` | none | +| `safe_hook_creation` | `boolean` | none | +| `disable_omo_env` | `boolean` | none | +| `hashline_edit` | `boolean` | none | +| `model_fallback_title` | `boolean` | none | +| `max_tools` | `integer` | none | + +### `openclaw` + +| Field | Type | Default | +| --- | --- | --- | +| `enabled` | `boolean` | `false` | +| `gateways` | `object` | `{}` | +| `hooks` | `object` | `{}` | +| `replyListener` | `object` | none | + +### `sisyphus_agent` + +| Field | Type | Default | +| --- | --- | --- | +| `disabled` | `boolean` | none | +| `default_builder_enabled` | `boolean` | none | +| `planner_enabled` | `boolean` | none | +| `replace_plan` | `boolean` | none | +| `tdd` | `boolean` | `true` | + +### `git_master` + +| Field | Type | Default | +| --- | --- | --- | +| `commit_footer` | `boolean \| string` | `true` | +| `include_co_authored_by` | `boolean` | `true` | +| `git_env_prefix` | `string` | `"GIT_MASTER=1"` | + +### `model_capabilities` + +| Field | Type | Default | +| --- | --- | --- | +| `enabled` | `boolean` | none | +| `auto_refresh_on_start` | `boolean` | none | +| `refresh_timeout_ms` | `integer` | none | +| `source_url` | `string` | none | + +### `browser_automation_engine` + +| Field | Type | Default | +| --- | --- | --- | +| `provider` | `string` | `"playwright"` | + +### `notification`, `comment_checker`, `keyword_detector`, `websearch`, `ralph_loop`, `babysitting`, `start_work` + +| Key | Field | Type | Default | +| --- | --- | --- | --- | +| `notification` | `force_enable` | `boolean` | none | +| `comment_checker` | `custom_prompt` | `string` | none | +| `keyword_detector` | `disabled_keywords` | `string[]` | none | +| `websearch` | `provider` | `string` | none | +| `ralph_loop` | `enabled` | `boolean` | `false` | +| `ralph_loop` | `default_max_iterations` | `number` | `100` | +| `ralph_loop` | `state_dir` | `string` | none | +| `ralph_loop` | `default_strategy` | `string` | `"continue"` | +| `babysitting` | `timeout_ms` | `number` | `120000` | +| `start_work` | `auto_commit` | `boolean` | `true` | + +## Agents, Categories, Skills + +- `agents`: per-agent overrides. Built-ins include `sisyphus`, `hephaestus`, `prometheus`, `oracle`, `librarian`, `explore`, `atlas`, `metis`, `momus`, `multimodal-looker`, `sisyphus-junior`. +- `categories`: category-level model and prompt routing overrides. +- `skills`: either array form or object form. +- `disabled_agents`, `disabled_skills`, `disabled_hooks`, `disabled_tools`, `disabled_commands`, `disabled_mcps`: string arrays. + +## Runtime and Model Fallback + +- `model_fallback`: global switch for proactive model fallback behavior. +- `runtime_fallback`: boolean or object config for reactive fallback behavior. +- Provider/model fallback chains are defined in code (`src/shared/model-requirements.ts`). + +## Verified JSONC Example + +```jsonc +{ + "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-openagent.schema.json", "agents": { - // Main orchestrator: Claude Opus or Kimi K2.5 work best - "sisyphus": { - "model": "kimi-for-coding/k2p5", - "ultrawork": { "model": "anthropic/claude-opus-4-7", "variant": "max" }, - }, - - // Research agents: cheap fast models are fine - "librarian": { "model": "google/gemini-3-flash" }, + "sisyphus": { "model": "anthropic/claude-opus-4-7" }, "explore": { "model": "github-copilot/grok-code-fast-1" }, - - // Architecture consultation: GPT-5.5 or Claude Opus - "oracle": { "model": "openai/gpt-5.5", "variant": "high" }, - - // Prometheus inherits sisyphus model; just add prompt guidance - "prometheus": { - "prompt_append": "Leverage deep & quick agents heavily, always in parallel.", - }, }, - "categories": { - // quick - trivial tasks "quick": { "model": "opencode/gpt-5-nano" }, - - // unspecified-low - moderate tasks - "unspecified-low": { "model": "anthropic/claude-sonnet-4-6" }, - - // unspecified-high - complex work - "unspecified-high": { "model": "anthropic/claude-opus-4-7", "variant": "max" }, - - // writing - docs/prose - "writing": { "model": "google/gemini-3-flash" }, - - // visual-engineering - Gemini dominates visual tasks - "visual-engineering": { - "model": "google/gemini-3.1-pro", - "variant": "high", - }, - - // Custom category for git operations - "git": { - "model": "opencode/gpt-5-nano", - "description": "All git operations", - "prompt_append": "Focus on atomic commits, clear messages, and safe operations.", - }, + "deep": { "model": "openai/gpt-5.5" }, }, - - // Limit expensive providers; let cheap ones run freely - "background_task": { - "providerConcurrency": { - "anthropic": 3, - "openai": 3, - "opencode": 10, - "zai-coding-plan": 10, - }, - "modelConcurrency": { - "anthropic/claude-opus-4-7": 2, - "opencode/gpt-5-nano": 20, - }, + "disabled_hooks": ["startup-toast"], + "team_mode": { + "enabled": true, + "max_parallel_members": 4, + "max_members": 8, + "max_messages_per_run": 10000, + "max_wall_clock_minutes": 120, + "max_member_turns": 500, + "message_payload_max_bytes": 32768, + "recipient_unread_max_bytes": 262144, + "mailbox_poll_interval_ms": 3000, + "tmux_visualization": false, }, - - "experimental": { "aggressive_truncation": true, "task_system": true }, "tmux": { "enabled": false }, } ``` - ---- - -## Core Concepts - -### Agents - -Override built-in agent settings. Available agents: `sisyphus`, `hephaestus`, `prometheus`, `oracle`, `librarian`, `explore`, `multimodal-looker`, `metis`, `momus`, `atlas`, `sisyphus-junior`. - -```json -{ - "agents": { - "explore": { "model": "anthropic/claude-haiku-4-5", "temperature": 0.5 }, - "multimodal-looker": { "disable": true } - } -} -``` - -Disable agents entirely: `{ "disabled_agents": ["oracle", "multimodal-looker"] }` - -Core agents receive an injected runtime `order` field for deterministic Tab cycling in the UI: Sisyphus = 1, Hephaestus = 2, Prometheus = 3, Atlas = 4. This is not a user-configurable config key. - -#### Agent Options - -| Option | Type | Description | -| ----------------- | -------------- | --------------------------------------------------------------- | -| `model` | string | Model override (`provider/model`) | -| `fallback_models` | string\|array | Fallback models on API errors. Supports strings or mixed arrays of strings and object entries with per-model settings | -| `temperature` | number | Sampling temperature | -| `top_p` | number | Top-p sampling | -| `prompt` | string | Replace system prompt. Supports `file://` URIs | -| `prompt_append` | string | Append to system prompt. Supports `file://` URIs | -| `tools` | array | Allowed tools list | -| `disable` | boolean | Disable this agent | -| `mode` | string | Agent mode | -| `color` | string | UI color | -| `permission` | object | Per-tool permissions (see below) | -| `category` | string | Inherit model from category | -| `variant` | string | Model variant: `max`, `high`, `medium`, `low`, `xhigh`. Normalized to supported values | -| `maxTokens` | number | Max response tokens | -| `thinking` | object | Anthropic extended thinking | -| `reasoningEffort` | string | OpenAI reasoning: `none`, `minimal`, `low`, `medium`, `high`, `xhigh`. Normalized to supported values | -| `textVerbosity` | string | Text verbosity: `low`, `medium`, `high` | -| `providerOptions` | object | Provider-specific options | - -#### Anthropic Extended Thinking - -```json -{ - "agents": { - "oracle": { "thinking": { "type": "enabled", "budgetTokens": 200000 } } - } -} -``` - -#### Agent Permissions - -Control what tools an agent can use: - -```json -{ - "agents": { - "explore": { - "permission": { - "edit": "deny", - "bash": "ask", - "webfetch": "allow" - } - } - } -} -``` - -| Permission | Values | -| -------------------- | --------------------------------------------------------------------------- | -| `edit` | `ask` / `allow` / `deny` | -| `bash` | `ask` / `allow` / `deny` or per-command: `{ "git": "allow", "rm": "deny" }` | -| `webfetch` | `ask` / `allow` / `deny` | -| `doom_loop` | `ask` / `allow` / `deny` | -| `external_directory` | `ask` / `allow` / `deny` | - - -#### Fallback Models with Per-Model Settings - -`fallback_models` accepts either a single model string or an array. Array entries can be plain strings or objects with individual model settings: - -```jsonc -{ - "agents": { - "sisyphus": { - "model": "anthropic/claude-opus-4-7", - "fallback_models": [ - // Simple string fallback - "openai/gpt-5.5", - // Object with per-model settings - { - "model": "google/gemini-3.1-pro", - "variant": "high", - "temperature": 0.2 - }, - { - "model": "anthropic/claude-sonnet-4-6", - "thinking": { "type": "enabled", "budgetTokens": 64000 } - } - ] - } - } -} -``` - -Object entries support: `model`, `variant`, `reasoningEffort`, `temperature`, `top_p`, `maxTokens`, `thinking`. - -#### File URIs for Prompts - -Both `prompt` and `prompt_append` support loading content from files via `file://` URIs. Category-level `prompt_append` supports the same URI forms. - -```jsonc -{ - "agents": { - "sisyphus": { - "prompt_append": "file:///absolute/path/to/prompt.txt" - }, - "oracle": { - "prompt": "file://./relative/to/project/prompt.md" - }, - "explore": { - "prompt_append": "file://~/home/dir/prompt.txt" - } - }, - "categories": { - "custom": { - "model": "anthropic/claude-sonnet-4-6", - "prompt_append": "file://./category-context.md" - } - } -} -``` - -Paths can be absolute (`file:///abs/path`), relative to project root (`file://./rel/path`), or home-relative (`file://~/home/path`). If a file URI cannot be decoded, resolved, or read, OmO inserts a warning placeholder into the prompt instead of failing hard. - -### Categories - -Domain-specific model delegation used by the `task()` tool. When Sisyphus delegates work, it picks a category, not a model name. - -#### Built-in Categories - -| Category | Default Model | Description | -| -------------------- | ------------------------------- | ---------------------------------------------- | -| `visual-engineering` | `google/gemini-3.1-pro` (high) | Frontend, UI/UX, design, animation | -| `ultrabrain` | `openai/gpt-5.5` (xhigh) | Deep logical reasoning, complex architecture | -| `deep` | `openai/gpt-5.5` (medium) | Autonomous problem-solving, thorough research | -| `artistry` | `google/gemini-3.1-pro` (high) | Creative/unconventional approaches | -| `quick` | `openai/gpt-5.4-mini` | Trivial tasks, typo fixes, single-file changes | -| `unspecified-low` | `anthropic/claude-sonnet-4-6` | General tasks, low effort | -| `unspecified-high` | `anthropic/claude-opus-4-7` (max) | General tasks, high effort | -| `writing` | `google/gemini-3-flash` | Documentation, prose, technical writing | - -> **Note**: Built-in defaults only apply if the category is present in your config. Otherwise the system default model is used. - -#### Category Options - -| Option | Type | Default | Description | -| ------------------- | ------------- | ------- | ------------------------------------------------------------------- | -| `model` | string | - | Model override | -| `fallback_models` | string\|array | - | Fallback models on API errors. Supports strings or mixed arrays of strings and object entries with per-model settings | -| `temperature` | number | - | Sampling temperature | -| `top_p` | number | - | Top-p sampling | -| `maxTokens` | number | - | Max response tokens | -| `thinking` | object | - | Anthropic extended thinking | -| `reasoningEffort` | string | - | OpenAI reasoning effort. Unsupported values are normalized | -| `textVerbosity` | string | - | Text verbosity | -| `tools` | array | - | Allowed tools | -| `prompt_append` | string | - | Append to system prompt | -| `variant` | string | - | Model variant. Unsupported values are normalized | -| `description` | string | - | Shown in `task()` tool prompt | -| `is_unstable_agent` | boolean | `false` | Force background mode + monitoring. Auto-enabled for Gemini models. | - -Disable categories: `{ "disabled_categories": ["ultrabrain"] }` - -### Model Resolution - -Runtime priority: - -1. **UI-selected model** - model chosen in the OpenCode UI, for primary agents -2. **User override** - model set in config → used exactly as-is. Even on cold cache, explicit user configuration takes precedence over hardcoded fallback chains -3. **Category default** - model inherited from the assigned category config -4. **User `fallback_models`** - user-configured fallback list is tried before built-in fallback chains -5. **Provider fallback chain** - built-in provider/model chain from OmO source -6. **System default** - OpenCode's configured default model - -#### Model Settings Compatibility - -Model settings are compatibility-normalized against model capabilities instead of failing hard. - -Normalized fields: - -- `variant` - downgraded to the closest supported value -- `reasoningEffort` - downgraded to the closest supported value, or removed if unsupported -- `temperature` - removed if unsupported by the model metadata -- `top_p` - removed if unsupported by the model metadata -- `maxTokens` - capped to the model's reported max output limit -- `thinking` - removed if the target model does not support thinking - -Examples: -- Claude models do not support `reasoningEffort` - it is removed automatically -- GPT-4.1 does not support reasoning - `reasoningEffort` is removed -- o-series models support `none` through `high` - `xhigh` is downgraded to `high` -- GPT-5 supports `none`, `minimal`, `low`, `medium`, `high`, `xhigh` - all pass through - -Capability data comes from provider runtime metadata first. OmO also ships bundled models.dev-backed capability data, supports a refreshable local models.dev cache, and falls back to heuristic family detection plus alias rules when exact metadata is unavailable. `bunx oh-my-opencode doctor` surfaces capability diagnostics and warns when a configured model relies on compatibility fallback. - - -#### Agent Provider Chains - -| Agent | Default Model | Provider Priority | -| --------------------- | ------------------- | ---------------------------------------------------------------------------- | -| **Sisyphus** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/kimi-k2.6` → `kimi-for-coding/k2p5` → `opencode\|moonshotai\|moonshotai-cn\|firmware\|ollama-cloud\|aihubmix/kimi-k2.5` → `openai\|github-copilot\|opencode/gpt-5.5 (medium)` → `zai-coding-plan\|opencode/glm-5` → `opencode/big-pickle` | -| **Hephaestus** | `gpt-5.5` | `gpt-5.5 (medium)` | -| **oracle** | `gpt-5.5` | `openai\|github-copilot\|opencode/gpt-5.5 (high)` → `google\|github-copilot\|opencode/gemini-3.1-pro (high)` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/glm-5.1` | -| **librarian** | `gpt-5.4-mini-fast` | `openai/gpt-5.4-mini-fast` → `opencode-go/qwen3.5-plus` → `vercel/minimax-m2.7-highspeed` → `opencode-go\|vercel/minimax-m2.7` → `anthropic\|opencode\|vercel/claude-haiku-4-5` → `openai\|opencode\|vercel/gpt-5.4-nano` | -| **explore** | `gpt-5.4-mini-fast` | `openai/gpt-5.4-mini-fast` → `opencode-go/qwen3.5-plus` → `vercel/minimax-m2.7-highspeed` → `opencode-go\|vercel/minimax-m2.7` → `anthropic\|opencode\|vercel/claude-haiku-4-5` → `openai\|opencode\|vercel/gpt-5.4-nano` | -| **multimodal-looker** | `gpt-5.5` | `openai\|opencode/gpt-5.5 (medium)` → `opencode-go/kimi-k2.6` → `zai-coding-plan/glm-4.6v` → `openai\|github-copilot\|opencode/gpt-5-nano` | -| **Prometheus** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `openai\|github-copilot\|opencode/gpt-5.5 (high)` → `opencode-go/glm-5.1` → `google\|github-copilot\|opencode/gemini-3.1-pro` | -| **Metis** | `claude-sonnet-4-6` | `anthropic\|github-copilot\|opencode/claude-sonnet-4-6` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `openai\|github-copilot\|opencode/gpt-5.5 (high)` → `opencode-go/glm-5.1` → `kimi-for-coding/k2p5` | -| **Momus** | `gpt-5.5` | `openai\|github-copilot\|opencode/gpt-5.5 (xhigh)` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `google\|github-copilot\|opencode/gemini-3.1-pro (high)` → `opencode-go/glm-5.1` | -| **Atlas** | `claude-sonnet-4-6` | `anthropic\|github-copilot\|opencode/claude-sonnet-4-6` → `opencode-go/kimi-k2.6` → `openai\|github-copilot\|opencode/gpt-5.5 (medium)` → `opencode-go/minimax-m2.7` | - -#### Category Provider Chains - -| Category | Default Model | Provider Priority | -| ---------------------- | ------------------- | -------------------------------------------------------------- | -| **visual-engineering** | `gemini-3.1-pro` | `google\|github-copilot\|opencode/gemini-3.1-pro (high)` → `zai-coding-plan\|opencode/glm-5` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/glm-5.1` → `kimi-for-coding/k2p5` | -| **ultrabrain** | `gpt-5.5` | `openai\|opencode/gpt-5.5 (xhigh)` → `google\|github-copilot\|opencode/gemini-3.1-pro (high)` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `opencode-go/glm-5.1` | -| **deep** | `gpt-5.5` | `openai\|github-copilot\|venice\|opencode/gpt-5.5 (medium)` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `google\|github-copilot\|opencode/gemini-3.1-pro (high)` | -| **artistry** | `gemini-3.1-pro` | `google\|github-copilot\|opencode/gemini-3.1-pro (high)` → `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `openai\|github-copilot\|opencode/gpt-5.5` | -| **quick** | `gpt-5.4-mini` | `openai\|github-copilot\|opencode/gpt-5.4-mini` → `anthropic\|github-copilot\|opencode/claude-haiku-4-5` → `google\|github-copilot\|opencode/gemini-3-flash` → `opencode-go/minimax-m2.7` → `opencode/gpt-5-nano` | -| **unspecified-low** | `claude-sonnet-4-6` | `anthropic\|github-copilot\|opencode/claude-sonnet-4-6` → `openai\|opencode/gpt-5.3-codex (medium)` → `opencode-go/kimi-k2.6` → `google\|github-copilot\|opencode/gemini-3-flash` → `opencode-go/minimax-m2.7` | -| **unspecified-high** | `claude-opus-4-7` | `anthropic\|github-copilot\|opencode/claude-opus-4-7 (max)` → `openai\|github-copilot\|opencode/gpt-5.5 (high)` → `zai-coding-plan\|opencode/glm-5` → `kimi-for-coding/k2p5` → `opencode-go/glm-5.1` → `opencode/kimi-k2.5` → `opencode\|moonshotai\|moonshotai-cn\|firmware\|ollama-cloud\|aihubmix/kimi-k2.5` | -| **writing** | `gemini-3-flash` | `google\|github-copilot\|opencode/gemini-3-flash` → `opencode-go/kimi-k2.6` → `anthropic\|github-copilot\|opencode/claude-sonnet-4-6` → `opencode-go/minimax-m2.7` | - -Run `bunx oh-my-opencode doctor --verbose` to see effective model resolution for your config. - ---- - -## Task System - -### Background Tasks - -Control parallel agent execution and concurrency limits. - -```json -{ - "background_task": { - "defaultConcurrency": 5, - "staleTimeoutMs": 180000, - "providerConcurrency": { "anthropic": 3, "openai": 5, "google": 10 }, - "modelConcurrency": { "anthropic/claude-opus-4-7": 2 } - } -} -``` - -| Option | Default | Description | -| --------------------- | -------- | --------------------------------------------------------------------- | -| `defaultConcurrency` | - | Max concurrent tasks (all providers) | -| `staleTimeoutMs` | `180000` | Interrupt tasks with no activity (min: 60000) | -| `providerConcurrency` | - | Per-provider limits (key = provider name) | -| `modelConcurrency` | - | Per-model limits (key = `provider/model`). Overrides provider limits. | - -Priority: `modelConcurrency` > `providerConcurrency` > `defaultConcurrency` - -### Sisyphus Agent - -Configure the main orchestration system. - -```json -{ - "sisyphus_agent": { - "disabled": false, - "default_builder_enabled": false, - "planner_enabled": true, - "replace_plan": true - } -} -``` - -| Option | Default | Description | -| ------------------------- | ------- | --------------------------------------------------------------- | -| `disabled` | `false` | Disable all Sisyphus orchestration, restore original build/plan | -| `default_builder_enabled` | `false` | Enable OpenCode-Builder agent (off by default) | -| `planner_enabled` | `true` | Enable Prometheus (Planner) agent | -| `replace_plan` | `true` | Demote default plan agent to subagent mode | - -Sisyphus agents can also be customized under `agents` using their names: `Sisyphus`, `OpenCode-Builder`, `Prometheus (Planner)`, `Metis (Plan Consultant)`. - -### Sisyphus Tasks - -File-based task persistence with dependency tracking, used for cross-session task management. The task system is controlled by `experimental.task_system` (defaults to `true` since v3.14). When enabled, `TodoWrite`/`TodoRead` are intercepted and replaced with the Task tools (`task_create`, `task_get`, `task_list`, `task_update`). - -The `sisyphus.tasks` section configures **storage options** only: - -```json -{ - "sisyphus": { - "tasks": { - "storage_path": ".sisyphus/tasks", - "claude_code_compat": false - } - } -} -``` - -| Option | Default | Description | -| -------------------- | ----------------- | ------------------------------------------ | -| `storage_path` | `.sisyphus/tasks` | Storage path (relative to project root) | -| `task_list_id` | - | Force task list ID (alternative to env `ULTRAWORK_TASK_LIST_ID`) | -| `claude_code_compat` | `false` | Enable Claude Code path compatibility mode | - -To disable the task system entirely, set `experimental.task_system` to `false`: - -```json -{ - "experimental": { "task_system": false } -} -``` - ---- - -## Features - -### Skills - -Skills bring domain-specific expertise and embedded MCPs. - -Built-in skills: `playwright`, `playwright-cli`, `agent-browser`, `dev-browser`, `git-master`, `frontend-ui-ux` - -Disable built-in skills: `{ "disabled_skills": ["playwright"] }` - -#### Skills Configuration - -```json -{ - "skills": { - "sources": [ - { "path": "./my-skills", "recursive": true }, - "https://example.com/skill.yaml" - ], - "enable": ["my-skill"], - "disable": ["other-skill"], - "my-skill": { - "description": "What it does", - "template": "Custom prompt template", - "from": "source-file.ts", - "model": "custom/model", - "agent": "custom-agent", - "subtask": true, - "argument-hint": "usage hint", - "license": "MIT", - "compatibility": ">= 3.0.0", - "metadata": { "author": "Your Name" }, - "allowed-tools": ["read", "bash"] - } - } -} -``` - -| `sources` option | Default | Description | -| ---------------- | ------- | ------------------------------- | -| `path` | - | Local path or remote URL | -| `recursive` | `false` | Recurse into subdirectories | -| `glob` | - | Glob pattern for file selection | - -### Hooks - -Disable built-in hooks via `disabled_hooks`: - -```json -{ "disabled_hooks": ["comment-checker"] } -``` - -Available hooks: `todo-continuation-enforcer`, `context-window-monitor`, `session-recovery`, `session-notification`, `comment-checker`, `grep-output-truncator`, `tool-output-truncator`, `directory-agents-injector`, `directory-readme-injector`, `empty-task-response-detector`, `think-mode`, `anthropic-context-window-limit-recovery`, `rules-injector`, `background-notification`, `auto-update-checker`, `startup-toast`, `keyword-detector`, `agent-usage-reminder`, `non-interactive-env`, `interactive-bash-session`, `compaction-context-injector`, `thinking-block-validator`, `claude-code-hooks`, `ralph-loop`, `preemptive-compaction`, `auto-slash-command`, `sisyphus-junior-notepad`, `no-sisyphus-gpt`, `start-work`, `runtime-fallback` - -**Notes:** - -- `directory-agents-injector` - auto-disabled on OpenCode 1.1.37+ (native AGENTS.md support) -- `no-sisyphus-gpt` - **do not disable**. It blocks incompatible GPT models for Sisyphus while allowing the dedicated GPT-5.4 and GPT-5.5 prompt paths. -- `startup-toast` is a sub-feature of `auto-update-checker`. Disable just the toast by adding `startup-toast` to `disabled_hooks`. -- `session-recovery` - automatically recovers from recoverable session errors (missing tool results, unavailable tools, thinking block violations). Shows toast notifications during recovery. Enable `experimental.auto_resume` for automatic retry after recovery. - -### Commands - -Disable built-in commands via `disabled_commands`: - -```json -{ "disabled_commands": ["init-deep", "start-work"] } -``` - -Available commands: `init-deep`, `ralph-loop`, `ulw-loop`, `cancel-ralph`, `refactor`, `start-work`, `stop-continuation`, `handoff` - -### Browser Automation - -| Provider | Interface | Installation | -| ---------------------- | --------- | --------------------------------------------------- | -| `playwright` (default) | MCP tools | Auto-installed via npx | -| `agent-browser` | Bash CLI | `bun add -g agent-browser && agent-browser install` | - -Switch provider: - -```json -{ "browser_automation_engine": { "provider": "agent-browser" } } -``` - -### Tmux Integration - -Run background subagents in separate tmux panes. Requires running inside tmux with `opencode --port `. - -```json -{ - "tmux": { - "enabled": true, - "layout": "main-vertical", - "main_pane_size": 60, - "main_pane_min_width": 120, - "agent_pane_min_width": 40 - } -} -``` - -| Option | Default | Description | -| ---------------------- | --------------- | ----------------------------------------------------------------------------------- | -| `enabled` | `false` | Enable tmux pane spawning | -| `layout` | `main-vertical` | `main-vertical` / `main-horizontal` / `tiled` / `even-horizontal` / `even-vertical` | -| `main_pane_size` | `60` | Main pane % (20–80) | -| `main_pane_min_width` | `120` | Min main pane columns | -| `agent_pane_min_width` | `40` | Min agent pane columns | - -### Git Master - -Configure git commit behavior: - -```json -{ "git_master": { "commit_footer": true, "include_co_authored_by": true } } -``` - -### Comment Checker - -Customize the comment quality checker: - -```json -{ - "comment_checker": { - "custom_prompt": "Your message. Use {{comments}} placeholder." - } -} -``` - -### Notification - -Force-enable session notifications: - -```json -{ "notification": { "force_enable": true } } -``` - -`force_enable` (`false`) - force session-notification even if external notification plugins are detected. - -### MCPs - -Built-in MCPs (enabled by default): `websearch` (Exa AI), `context7` (library docs), `grep_app` (GitHub code search). - -```json -{ "disabled_mcps": ["websearch", "context7", "grep_app"] } -``` - -### LSP - -Configure Language Server Protocol integration: - -```json -{ - "lsp": { - "typescript-language-server": { - "command": ["typescript-language-server", "--stdio"], - "extensions": [".ts", ".tsx"], - "priority": 10, - "env": { "NODE_OPTIONS": "--max-old-space-size=4096" }, - "initialization": { - "preferences": { "includeInlayParameterNameHints": "all" } - } - }, - "pylsp": { "disabled": true } - } -} -``` - -| Option | Type | Description | -| ---------------- | ------- | ------------------------------------ | -| `command` | array | Command to start LSP server | -| `extensions` | array | File extensions (e.g. `[".ts"]`) | -| `priority` | number | Priority when multiple servers match | -| `env` | object | Environment variables | -| `initialization` | object | Init options passed to server | -| `disabled` | boolean | Disable this server | - ---- - -## Advanced - -### Runtime Fallback - -Auto-switches to backup models on API errors. - -**Simple configuration** (enable/disable with defaults): - -```json -{ "runtime_fallback": true } -``` - -```json -{ "runtime_fallback": false } -``` - -**Advanced configuration** (full control): - -```json -{ - "runtime_fallback": { - "enabled": true, - "retry_on_errors": [400, 429, 503, 529], - "max_fallback_attempts": 3, - "cooldown_seconds": 60, - "timeout_seconds": 30, - "notify_on_fallback": true - } -} -``` - -| Option | Default | Description | -| ----------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `enabled` | `false` | Enable runtime fallback | -| `retry_on_errors` | `[400,429,503,529]` | HTTP codes that trigger fallback. Also handles classified provider key errors. | -| `max_fallback_attempts` | `3` | Max fallback attempts per session (1–20) | -| `cooldown_seconds` | `60` | Seconds before retrying a failed model | -| `timeout_seconds` | `30` | Seconds before forcing next fallback. **Set to `0` to disable timeout-based escalation and provider retry message detection.** | -| `notify_on_fallback` | `true` | Toast notification on model switch | - -#### Speeding Up Fallback (Proxy APIs) - -If you are using a proxy API provider, they may return different error codes (e.g., `401`, `403`, `404`) for quota exhaustion or model unavailability. To make fallback trigger instantly without waiting for long timeouts: - -```jsonc -{ - "runtime_fallback": { - "enabled": true, - // Add your proxy's specific error codes to retry_on_errors - "retry_on_errors": [400, 401, 403, 404, 429, 500, 502, 503, 504], - "max_fallback_attempts": 3, - "cooldown_seconds": 15, // Shorter cooldown - "timeout_seconds": 10 // Detect hung proxy requests faster - } -} -``` - -Define `fallback_models` per agent or category: - -```json -{ - "agents": { - "sisyphus": { - "model": "anthropic/claude-opus-4-7", - "fallback_models": [ - "openai/gpt-5.5", - { - "model": "google/gemini-3.1-pro", - "variant": "high" - } - ] - } - } -} -``` - -`fallback_models` also supports object-style entries so you can attach settings to a specific fallback model: - -```json -{ - "agents": { - "sisyphus": { - "model": "anthropic/claude-opus-4-7", - "fallback_models": [ - "openai/gpt-5.5", - { - "model": "anthropic/claude-sonnet-4-6", - "variant": "high", - "thinking": { "type": "enabled", "budgetTokens": 12000 } - }, - { - "model": "openai/gpt-5.3-codex", - "reasoningEffort": "high", - "temperature": 0.2, - "top_p": 0.95, - "maxTokens": 8192 - } - ] - } - } -} -``` - -Mixed arrays are allowed, so string entries and object entries can appear together in the same fallback chain. - -#### Object-style `fallback_models` - -Object entries use the following shape: - -| Field | Type | Description | -| ----- | ---- | ----------- | -| `model` | string | Fallback model ID. Provider prefix is optional when OmO can inherit the current/default provider. | -| `variant` | string | Explicit variant override for this fallback entry. | -| `reasoningEffort` | string | OpenAI reasoning effort override for this fallback entry. | -| `temperature` | number | Temperature applied if this fallback model becomes active. | -| `top_p` | number | Top-p applied if this fallback model becomes active. | -| `maxTokens` | number | Max response tokens applied if this fallback model becomes active. | -| `thinking` | object | Anthropic thinking config applied if this fallback model becomes active. | - -Per-model settings are **fallback-only**. They are promoted only when that specific fallback model is actually selected, so they do not override your primary model settings when the primary model resolves successfully. - -`thinking` uses the same shape as the normal agent/category option: - -| Field | Type | Description | -| ----- | ---- | ----------- | -| `type` | string | `enabled` or `disabled` | -| `budgetTokens` | number | Optional Anthropic thinking budget | - -Object entries can also omit the provider prefix when OmO can infer it from the current/default provider. If you provide both inline variant syntax in `model` and an explicit `variant` field, the explicit `variant` field wins. - -#### Full examples - -**1. Simple string chain** - -Use strings when you only need an ordered fallback chain: - -```json -{ - "agents": { - "atlas": { - "model": "anthropic/claude-sonnet-4-6", - "fallback_models": [ - "anthropic/claude-haiku-4-5", - "openai/gpt-5.5", - "google/gemini-3.1-pro" - ] - } - } -} -``` - -**2. Same-provider shorthand** - -If the primary model already establishes the provider, fallback entries can omit the prefix: - -```json -{ - "agents": { - "atlas": { - "model": "openai/gpt-5.5", - "fallback_models": [ - "gpt-5.4-mini", - { - "model": "gpt-5.3-codex", - "reasoningEffort": "medium", - "maxTokens": 4096 - } - ] - } - } -} -``` - -In this example OmO treats `gpt-5.4-mini` and `gpt-5.3-codex` as OpenAI fallback entries because the current/default provider is already `openai`. - -**3. Mixed cross-provider chain** - -Mix string entries and object entries when only some fallback models need special settings: - -```json -{ - "agents": { - "sisyphus": { - "model": "anthropic/claude-opus-4-7", - "fallback_models": [ - "openai/gpt-5.5", - { - "model": "anthropic/claude-sonnet-4-6", - "variant": "high", - "thinking": { "type": "enabled", "budgetTokens": 12000 } - }, - { - "model": "google/gemini-3.1-pro", - "variant": "high" - } - ] - } - } -} -``` - -**4. Category-level fallback chain** - -`fallback_models` works the same way under `categories`: - -```json -{ - "categories": { - "deep": { - "model": "openai/gpt-5.3-codex", - "fallback_models": [ - { - "model": "openai/gpt-5.5", - "reasoningEffort": "xhigh", - "maxTokens": 12000 - }, - { - "model": "anthropic/claude-opus-4-7", - "variant": "max", - "temperature": 0.2 - }, - "google/gemini-3.1-pro(high)" - ] - } - } -} -``` - -**5. Full object entry with every supported field** - -This shows every supported object-style parameter in one place: - -```json -{ - "agents": { - "oracle": { - "model": "openai/gpt-5.5", - "fallback_models": [ - { - "model": "openai/gpt-5.3-codex(low)", - "variant": "xhigh", - "reasoningEffort": "high", - "temperature": 0.3, - "top_p": 0.9, - "maxTokens": 8192, - "thinking": { - "type": "disabled" - } - } - ] - } - } -} -``` - -In this example the explicit `"variant": "xhigh"` overrides the inline `(low)` suffix in `"model"`. - -This final example is a **complete shape reference**. In real configs, prefer provider-appropriate settings: - -- use `reasoningEffort` for OpenAI reasoning models -- use `thinking` for Anthropic thinking-capable models -- use `variant`, `temperature`, `top_p`, and `maxTokens` only when that fallback model supports them - -### Model Capabilities - -OmO can refresh a local models.dev capability snapshot on startup. This cache is controlled by `model_capabilities`. - -```jsonc -{ - "model_capabilities": { - "enabled": true, - "auto_refresh_on_start": true, - "refresh_timeout_ms": 5000, - "source_url": "https://models.dev/api.json" - } -} -``` - -| Option | Default behavior | Description | -| ------ | ---------------- | ----------- | -| `enabled` | enabled unless explicitly set to `false` | Master switch for model capability refresh behavior | -| `auto_refresh_on_start` | refresh on startup unless explicitly set to `false` | Refresh the local models.dev cache during startup checks | -| `refresh_timeout_ms` | `5000` | Timeout for the startup refresh attempt | -| `source_url` | `https://models.dev/api.json` | Override the models.dev source URL | - -Notes: - -- Startup refresh runs through the auto-update checker hook. -- Manual refresh is available via `bunx oh-my-opencode refresh-model-capabilities`. -- Provider runtime metadata still takes priority when OmO resolves capabilities for compatibility checks. - -### Hashline Edit - -Replaces the built-in `Edit` tool with a hash-anchored version using `LINE#ID` references to prevent stale-line edits. Disabled by default. - -```json -{ "hashline_edit": true } -``` - -When enabled, two companion hooks are active: `hashline-read-enhancer` (annotates Read output) and `hashline-edit-diff-enhancer` (shows diffs). Opt-in by setting `hashline_edit: true`. Disable the companion hooks individually via `disabled_hooks` if needed. - -### Experimental - -```json -{ - "experimental": { - "truncate_all_tool_outputs": false, - "aggressive_truncation": false, - "auto_resume": false, - "disable_omo_env": false, - "task_system": true, - "dynamic_context_pruning": { - "enabled": false, - "notification": "detailed", - "turn_protection": { "enabled": true, "turns": 3 }, - "protected_tools": [ - "task", - "todowrite", - "todoread", - "lsp_rename", - "session_read", - "session_write", - "session_search" - ], - "strategies": { - "deduplication": { "enabled": true }, - "supersede_writes": { "enabled": true, "aggressive": false }, - "purge_errors": { "enabled": true, "turns": 5 } - } - } - } -} -``` - -| Option | Default | Description | -| ---------------------------------------- | ---------- | ------------------------------------------------------------------------------------ | -| `truncate_all_tool_outputs` | `false` | Truncate all tool outputs (not just whitelisted) | -| `aggressive_truncation` | `false` | Aggressively truncate when token limit exceeded | -| `auto_resume` | `false` | Auto-resume after thinking block recovery | -| `disable_omo_env` | `false` | Disable auto-injected `` block (date/time/locale). Improves cache hit rate. | -| `task_system` | `false` | Enable Sisyphus task system | -| `dynamic_context_pruning.enabled` | `false` | Auto-prune old tool outputs to manage context window | -| `dynamic_context_pruning.notification` | `detailed` | Pruning notifications: `off` / `minimal` / `detailed` | -| `turn_protection.turns` | `3` | Recent turns protected from pruning (1–10) | -| `strategies.deduplication` | `true` | Remove duplicate tool calls | -| `strategies.supersede_writes` | `true` | Prune write inputs when file later read | -| `strategies.supersede_writes.aggressive` | `false` | Prune any write if ANY subsequent read exists | -| `strategies.purge_errors.turns` | `5` | Turns before pruning errored tool inputs | - ---- - -## Reference - -### Environment Variables - -| Variable | Description | -| --------------------- | ----------------------------------------------------------------- | -| `OPENCODE_CONFIG_DIR` | Override OpenCode config directory (useful for profile isolation) | -| `OMO_SEND_ANONYMOUS_TELEMETRY` | Set to `0`, `false`, or `no` to disable anonymous telemetry | -| `OMO_DISABLE_POSTHOG` | Legacy telemetry opt-out flag. Set to `1` or `true` to disable PostHog | -| `POSTHOG_API_KEY` | Optional override for the built-in PostHog project API key | -| `POSTHOG_HOST` | Override the PostHog ingestion host. Defaults to `https://us.i.posthog.com` | - -### Provider-Specific - -#### Google Auth - -Install [`opencode-antigravity-auth`](https://github.com/NoeFabris/opencode-antigravity-auth) for Google Gemini. Provides multi-account load balancing, dual quota, and variant-based thinking. - -#### Ollama - -**Must** disable streaming to avoid JSON parse errors: - -```json -{ - "agents": { - "explore": { "model": "ollama/qwen3-coder" } - } -} -``` - -**Note:** The `stream` option should be configured in your OpenCode settings or via environment variables, not in the agent config. See [Ollama Troubleshooting](../troubleshooting/ollama.md) for details on disabling streaming. - -Common models: `ollama/qwen3-coder`, `ollama/ministral-3:14b`, `ollama/lfm2.5-thinking` - -See [Ollama Troubleshooting](../troubleshooting/ollama.md) for `JSON Parse error: Unexpected EOF` issues. diff --git a/docs/reference/features.md b/docs/reference/features.md index 301d0b5c4..2d6a3ad3f 100644 --- a/docs/reference/features.md +++ b/docs/reference/features.md @@ -100,6 +100,17 @@ Parallel multi-agent coordination modeled after Claude Code's experimental Agent See the **[Team Mode Guide](../guide/team-mode.md)** for configuration, team spec format, lifecycle, bounds, and storage layout. +### Architecture Snapshot (current) + +- **Feature modules**: `src/features/` has 20 modules. +- **Tool system**: `src/tools/` has 16 tool directories that produce **20 to 39 tools** depending on config gates. +- **Hook system**: 5-tier composition is **52 base hooks**. With team mode it becomes **59** (extra tool guard + transforms + direct team session event handlers). +- **MCP system**: 3 tiers: built-in remote MCPs (`websearch`, `context7`, `grep_app`), `.mcp.json` loader, and skill-embedded MCP from `SKILL.md` frontmatter. +- **Managers**: plugin startup creates 4 managers: TmuxSessionManager, BackgroundManager, SkillMcpManager, ConfigHandler. +- **Config pipeline**: 6 phases in order: provider, plugin-components, agents, tools, MCPs, commands. +- **Canonical core agent order**: Sisyphus, Hephaestus, Prometheus, Atlas. +- **OpenClaw**: bidirectional integrations for Discord, Telegram, HTTP, and shell with reply listener daemon. + ## Category System A Category is an agent configuration preset optimized for specific domains. Instead of delegating everything to a single AI agent, it is far more efficient to invoke specialists tailored to the nature of the task. @@ -222,6 +233,11 @@ Configure per-agent fallback chains with arrays that can mix plain model strings When a model errors, the runtime can move through the configured fallback array. Object entries let you tune the backup model itself instead of only swapping the model name. +The plugin uses two independent fallback systems: + +- **model-fallback**: proactive model chain selection in chat params. +- **runtime-fallback**: reactive recovery after runtime failures from provider/API behavior. + ### File-Based Prompts Load agent system prompts from external files using `file://` URLs in the `prompt` field, or append additional content with `prompt_append`. The `prompt_append` field also works on categories. @@ -394,6 +410,8 @@ This content will be injected into the agent's system prompt. Same-named skill at higher priority overrides lower. +Loaded skill display priority follows this order: `project > user > opencode > builtin/plugin`. + Disable built-in skills via `disabled_skills: ["playwright"]` in config. ### Category + Skill Combo Strategies @@ -561,6 +579,8 @@ Load custom commands from: ## Tools +Tool registration is config-gated. `src/tools/` has 16 directories, and exposed tools range from **20 minimum to 39 maximum**. + ### Code Search Tools | Tool | Description | @@ -572,7 +592,9 @@ Load custom commands from: | Tool | Description | | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **edit** | Hash-anchored edit tool. Uses `LINE#ID` format for precise, safe modifications. Validates content hashes before applying changes — zero stale-line errors. | +| **edit** | Hash-anchored edit tool. Uses `LINE#ID` format for precise, safe modifications. Validates content hashes before applying changes and rejects stale hash edits. | + +Hashline IDs use characters from `ZPMQVRWSNKTXJBYH`. ### LSP Tools (IDE Features for Agents) @@ -725,6 +747,16 @@ interactive_bash(tmux_command="capture-pane -p -t dev-app") Hooks intercept and modify behavior at key points in the agent lifecycle across the full session, message, tool, and parameter pipeline. +Current composition counts: + +- Session: 24 +- Tool Guard: 14 +- Transform: 5 +- Continuation: 7 +- Skill: 2 +- Total base: 52 +- With `team_mode.enabled`: +1 Tool Guard, +2 Transform, +4 direct team session event handlers in `src/plugin/event.ts` = 59 + ### Hook Events | Event | When | Can | @@ -753,7 +785,7 @@ Hooks intercept and modify behavior at key points in the agent lifecycle across | Hook | Event | Description | | --------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **keyword-detector** | Message + Transform | Detects keywords and activates modes: `ultrawork`/`ulw` (max performance), `search`/`find` (parallel exploration), `analyze`/`investigate` (deep analysis). | +| **keyword-detector** | Message + Transform | IntentGate detector. Activates `ultrawork`/`ulw`, `search`, `analyze`, and `team` modes from message keywords. | | **think-mode** | Params | Auto-detects extended thinking needs. Catches "think deeply", "ultrathink" and adjusts model settings. | | **ralph-loop** | Event + Message | Manages self-referential loop continuation. | | **start-work** | Message | Handles /start-work command execution. | @@ -766,7 +798,7 @@ Hooks intercept and modify behavior at key points in the agent lifecycle across | Hook | Event | Description | | ------------------------------- | ------------------------ | ----------------------------------------------------------------------------------------- | -| **comment-checker** | PostToolUse | Reminds agents to reduce excessive comments. Smartly ignores BDD, directives, docstrings. | +| **comment-checker** | PostToolUse | Runs `@code-yeongyu/comment-checker` to block AI-slop comment patterns. Bypass options: `// @allow` for a line, `// comment-checker-disable-file` at file top. | | **thinking-block-validator** | Transform | Validates thinking blocks to prevent API errors. | | **edit-error-recovery** | PostToolUse + Event | Recovers from edit tool failures. | | **write-existing-file-guard** | PreToolUse | Prevents accidental overwrites of existing files without reading them first. | @@ -869,6 +901,12 @@ Disable specific hooks in config: ## MCPs +The plugin uses a three-tier MCP architecture: + +1. Built-in remote MCPs from `src/mcp/` +2. Claude Code `.mcp.json` loader with `${VAR}` expansion +3. Skill-embedded MCP servers declared in `SKILL.md` frontmatter + ### Built-in MCPs | MCP | Description | @@ -893,6 +931,8 @@ mcp: The `skill_mcp` tool invokes these operations with full schema discovery. +Skill MCP clients are isolated per session by key `${sessionID}:${skillName}:${serverName}`. + #### OAuth-Enabled MCPs Skills can define OAuth-protected remote MCP servers. OAuth 2.1 with full RFC compliance (RFC 9728, 8414, 8707, 7591) is supported: From e5369f3a63b32baabe8e84c12a2a5660b2f4313c Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 8 May 2026 16:14:55 +0900 Subject: [PATCH 2/4] feat(web): render docs from repo-root docs/ as MDX SoT at build time MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the bespoke 16-section /docs page that pulled prose from `messages/{locale}.json` with a build-time MDX renderer that reads the canonical markdown in repo-root `docs/`. Each markdown file becomes one section of the docs page, scrolled-to via the existing DocsShell sidebar. Section data structure stays in `lib/docs-sections.ts` so the sidebar / scroll-spy keeps working with no client changes. Why this layout: - One source of truth: `docs/guide/*.md`, `docs/reference/*.md`, `docs/manifesto.md`. Edits land in one place; the website redeploys pick them up automatically via the existing web-deploy workflow. - Build-time only: `MDXRemote` is rendered inside an RSC and the page is statically generated (`●` SSG). Cloudflare Workers serves the rendered HTML; no MDX compiler runs at request time. - next-intl unchanged for everything else: only the docs prose moves out. `mobileHeader` and `searchPlaceholder` strings stay in `messages/{locale}.json`; the 18 stale section keys are removed. Files: - web/lib/docs-sections.ts: 9 sections matching docs/ files, typed `DocSection` with `{ id, title, file }`. - web/lib/docs-source.ts: `loadDocSource(file)` reads `/docs/` at build time via `node:fs/promises`. - web/components/docs/mdx-components.tsx: shadcn-styled overrides for every markdown element (h1-h4, p, a, ul/ol/li, blockquote, code, pre, table, hr, strong) so the rendered output matches the rest of the site. - web/app/[locale]/docs/page.tsx: rewritten as an async RSC that loads every section's source in parallel and renders one MDXRemote per section inside DocsShell. - web/messages/{en,ja,ko,zh}.json: `docs` key trimmed from 20 entries to 2 (mobileHeader, searchPlaceholder). - web/package.json: + next-mdx-remote, + gray-matter. Local verification: `bun run format:check`, `bun run lint`, `bun run type-check`, `bun run build`, `bunx opennextjs-cloudflare build` all pass; `/[locale]/docs` builds as static for all 4 locales at 4.12 kB / 132 kB First Load. --- web/app/[locale]/docs/page.tsx | 530 +------------------------ web/bun.lock | 248 +++++++++++- web/components/docs/mdx-components.tsx | 140 +++++++ web/lib/docs-sections.ts | 58 +-- web/lib/docs-source.ts | 9 + web/messages/en.json | 173 +------- web/messages/ja.json | 173 +------- web/messages/ko.json | 173 +------- web/messages/zh.json | 173 +------- web/package.json | 2 + 10 files changed, 441 insertions(+), 1238 deletions(-) create mode 100644 web/components/docs/mdx-components.tsx create mode 100644 web/lib/docs-source.ts diff --git a/web/app/[locale]/docs/page.tsx b/web/app/[locale]/docs/page.tsx index 0ec285ce4..0cf27cba0 100644 --- a/web/app/[locale]/docs/page.tsx +++ b/web/app/[locale]/docs/page.tsx @@ -1,527 +1,31 @@ import { getTranslations } from "next-intl/server" -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" -import { Badge } from "@/components/ui/badge" -import { Separator } from "@/components/ui/separator" -import { - Accordion, - AccordionContent, - AccordionItem, - AccordionTrigger, -} from "@/components/ui/accordion" -import { CodeBlock } from "@/components/ui/code-block" -import { OptionTable } from "@/components/ui/option-table" +import { MDXRemote } from "next-mdx-remote/rsc" import { DocsShell } from "@/components/docs/docs-shell" -import { DOC_SECTION_IDS, DOC_SECTION_TITLE_KEYS } from "@/lib/docs-sections" +import { mdxComponents } from "@/components/docs/mdx-components" +import { DOC_SECTIONS } from "@/lib/docs-sections" +import { loadDocSource } from "@/lib/docs-source" export default async function DocsPage() { const t = await getTranslations("docs") - const sections = DOC_SECTION_IDS.map((id) => ({ - id, - title: t(`sections.${DOC_SECTION_TITLE_KEYS[id]}`), - })) + + const sectionsWithSource = await Promise.all( + DOC_SECTIONS.map(async (section) => ({ + ...section, + source: await loadDocSource(section.file), + })), + ) return ( ({ id: s.id, title: s.title }))} > -
-

{t("overview.title")}

-

- {t("overview.description", { command: "bunx oh-my-openagent install" })} -

-
- -
-

{t("quickStart.title")}

- -
- -
-

{t("configLocations.title")}

- - -
    -
  • - .opencode/oh-my-openagent.json{" "} - {t("configLocations.projectLevel")} -
  • -
  • - - ~/.config/opencode/oh-my-openagent.json - {" "} - {t("configLocations.userLevel")} -
  • -
-

{t("configLocations.jsonc")}

-
-
-
- -
-

{t("agentsSection.title")}

-

{t("agentsSection.description")}

- -

{t("agentsSection.overrideOptions")}

- - -

{t("agentsSection.permissions")}

-
- - - - - - - - - - {[ - { name: "edit", descKey: "edit" as const }, - { name: "bash", descKey: "bash" as const }, - { name: "webfetch", descKey: "webfetch" as const }, - { name: "doom_loop", descKey: "doomLoop" as const }, - { name: "external_directory", descKey: "externalDirectory" as const }, - ].map((p) => ( - - - - - - ))} - -
PermissionValuesDescription
{p.name} - {t("agentsSection.permissionValues")} - - {t(`agentsSection.permissionDescriptions.${p.descKey}`)} -
-
-
- -
-

{t("categoriesSection.title")}

-

{t("categoriesSection.description")}

- -
- - - - - - - - - - {[ - { - name: "visual-engineering", - model: "gemini-3.1-pro (high)", - descKey: "visualEngineering" as const, - }, - { - name: "ultrabrain", - model: "gpt-5.3-codex (xhigh)", - descKey: "ultrabrain" as const, - }, - { name: "deep", model: "gpt-5.3-codex (medium)", descKey: "deep" as const }, - { name: "artistry", model: "gemini-3.1-pro (high)", descKey: "artistry" as const }, - { name: "quick", model: "claude-haiku-4-5", descKey: "quick" as const }, - { - name: "unspecified-low", - model: "claude-sonnet-4-6", - descKey: "unspecifiedLow" as const, - }, - { - name: "unspecified-high", - model: "gpt-5.4 (high)", - descKey: "unspecifiedHigh" as const, - }, - { name: "writing", model: "gemini-3-flash", descKey: "writing" as const }, - ].map((c) => ( - - - - - - ))} - -
CategoryDefault ModelDescription
{c.name}{c.model} - {t(`categoriesSection.categories.${c.descKey}`)} -
-
- -

- {t("categoriesSection.availableOptions", { - options: - "model, variant, temperature, top_p, maxTokens, thinking, reasoningEffort, textVerbosity, tools, prompt_append, is_unstable_agent", - })} -

-
- -
-

{t("skillsSection.title")}

-

- {t("skillsSection.description", { - playwright: "playwright", - agentBrowser: "agent-browser", - gitMaster: "git-master", - })} -

- -
- -
-

- {t("backgroundTasksSection.title")} -

- -
- {t("backgroundTasksSection.priority")} - modelConcurrency > - providerConcurrency > - defaultConcurrency -
-
- -
-

{t("hooksSection.title")}

-

{t("hooksSection.description")}

-
- {[ - "agent-usage-reminder", - "anthropic-context-window-limit-recovery", - "anthropic-effort", - "atlas", - "auto-slash-command", - "auto-update-checker", - "background-notification", - "category-skill-reminder", - "claude-code-hooks", - "comment-checker", - "compaction-context-injector", - "compaction-todo-preserver", - "delegate-task-retry", - "directory-agents-injector", - "directory-readme-injector", - "edit-error-recovery", - "interactive-bash-session", - "keyword-detector", - "non-interactive-env", - "prometheus-md-only", - "question-label-truncator", - "ralph-loop", - "rules-injector", - "session-recovery", - "sisyphus-junior-notepad", - "start-work", - "stop-continuation-guard", - "subagent-question-blocker", - "task-reminder", - "task-resume-info", - "tasks-todowrite-disabler", - "think-mode", - "thinking-block-validator", - "unstable-agent-babysitter", - "write-existing-file-guard", - ].map((hook) => ( -
- {hook} -
- ))} -
-
- -
-

{t("mcpsSection.title")}

-
- - - {t("mcpsSection.websearch.title")} - - -

- {t("mcpsSection.websearch.description")} -

-
-
- - - {t("mcpsSection.context7.title")} - - -

- {t("mcpsSection.context7.description")} -

-
-
- - - {t("mcpsSection.grepApp.title")} - - -

- {t("mcpsSection.grepApp.description")} -

-
-
-
-
- -
-

- {t("browserAutomationSection.title")} -

-
- - - - - - - - - - - - - - - - - - - - -
ToolDescriptionUse Case
- {t("browserAutomationSection.playwright.tool")} - - {t("browserAutomationSection.playwright.description")} - - {t("browserAutomationSection.playwright.useCase")} -
- {t("browserAutomationSection.agentBrowser.tool")} - - {t("browserAutomationSection.agentBrowser.description")} - - {t("browserAutomationSection.agentBrowser.useCase")} -
-
-
- -
-

{t("tmuxSection.title")}

- -
- -
-

{t("gitMasterSection.title")}

- -
- -
-

- {t("commentCheckerSection.title")} -

-

- {t("commentCheckerSection.description", { placeholder: "{{comments}}" })} -

- -
- -
-

{t("experimentalSection.title")}

- - - - - {t("experimentalSection.dynamicPruning.trigger")} - -

- {t("experimentalSection.dynamicPruning.description")} -

- -
-
-
-
- -
-

{t("lspSection.title")}

- -
- -
-

{t("envVarsSection.title")}

-
-
-
-

- {t("envVarsSection.opencodeConfigDir.name")} -

-

- {t("envVarsSection.opencodeConfigDir.description")} -

-
-
-
-
- - - -
-

{t("footer", { year: new Date().getFullYear().toString() })}

-
+ {sectionsWithSource.map((section) => ( +
+ +
+ ))}
) } diff --git a/web/bun.lock b/web/bun.lock index 46ad1eb68..5f1e84fcd 100644 --- a/web/bun.lock +++ b/web/bun.lock @@ -11,10 +11,12 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "geist": "^1.7.0", + "gray-matter": "^4.0.3", "lucide-react": "0.577.0", "motion": "^12.38.0", "next": "15.5.18", "next-intl": "^4.11.0", + "next-mdx-remote": "^6.0.0", "react": "^19.2.6", "react-dom": "^19.2.6", "tailwind-merge": "^3.5.0", @@ -163,6 +165,10 @@ "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.2.3", "", {}, "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw=="], + "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.5.0", "", {}, "sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg=="], "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.16.1", "", { "peerDependencies": { "unenv": "2.0.0-rc.24", "workerd": ">1.20260305.0 <2.0.0-0" }, "optionalPeers": ["workerd"] }, "sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw=="], @@ -341,6 +347,10 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], + + "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], "@next/env": ["@next/env@15.5.18", "", {}, "sha512-hAV85Ckd9QR6RvH04MEKwsfLTksvFpO47j9xwtoIuvuPnlwecpSi+uZTtm8HirVbtlI2Fnz//xpcSTjFdyJk+g=="], @@ -629,14 +639,26 @@ "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], + "@types/esrecurse": ["@types/esrecurse@4.3.1", "", {}, "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw=="], "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], + + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + + "@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], + + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + "@types/node": ["@types/node@25.6.2", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw=="], "@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="], @@ -645,6 +667,8 @@ "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.59.2", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.59.2", "@typescript-eslint/type-utils": "8.59.2", "@typescript-eslint/utils": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.59.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ=="], "@typescript-eslint/parser": ["@typescript-eslint/parser@8.59.2", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.59.2", "@typescript-eslint/types": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.2", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ=="], @@ -665,6 +689,8 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.59.2", "", { "dependencies": { "@typescript-eslint/types": "8.59.2", "eslint-visitor-keys": "^5.0.0" } }, "sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.1", "", {}, "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="], + "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="], @@ -721,6 +747,8 @@ "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], @@ -743,6 +771,8 @@ "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="], + "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], + "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="], "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], @@ -755,6 +785,8 @@ "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "blake3-wasm": ["blake3-wasm@2.1.5", "", {}, "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g=="], @@ -779,8 +811,18 @@ "caniuse-lite": ["caniuse-lite@1.0.30001792", "", {}, "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw=="], + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], @@ -793,8 +835,12 @@ "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + "commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], "comment-json": ["comment-json@4.6.2", "", { "dependencies": { "array-timsort": "^1.0.3", "esprima": "^4.0.1" } }, "sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w=="], @@ -825,6 +871,8 @@ "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], @@ -835,8 +883,12 @@ "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], @@ -875,6 +927,10 @@ "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], + "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], + + "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], + "esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -919,6 +975,20 @@ "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], + + "estree-util-build-jsx": ["estree-util-build-jsx@3.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-walker": "^3.0.0" } }, "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ=="], + + "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], + + "estree-util-scope": ["estree-util-scope@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ=="], + + "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], + + "estree-util-visit": ["estree-util-visit@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^3.0.0" } }, "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww=="], + + "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], @@ -929,6 +999,10 @@ "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="], + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], "fast-diff": ["fast-diff@1.3.0", "", {}, "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="], @@ -1013,6 +1087,8 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="], + "gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="], "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], @@ -1027,6 +1103,12 @@ "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], + + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], @@ -1043,12 +1125,18 @@ "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], "intl-messageformat": ["intl-messageformat@11.1.2", "", { "dependencies": { "@formatjs/ecma402-abstract": "3.1.1", "@formatjs/fast-memoize": "3.1.0", "@formatjs/icu-messageformat-parser": "3.5.1", "tslib": "^2.8.1" } }, "sha512-ucSrQmZGAxfiBHfBRXW/k7UC8MaGFlEj4Ry1tKiDcmgwQm1y3EDl40u+4VNHYomxJQMJi9NEI3riDRlth96jKg=="], "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], + + "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="], @@ -1067,6 +1155,10 @@ "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], + + "is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="], + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], @@ -1075,6 +1167,8 @@ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="], @@ -1083,6 +1177,8 @@ "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], @@ -1117,6 +1213,8 @@ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], @@ -1129,6 +1227,8 @@ "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="], @@ -1163,6 +1263,8 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], "lru-cache": ["lru-cache@11.2.5", "", {}, "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw=="], @@ -1171,8 +1273,28 @@ "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], + + "mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="], + + "mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="], + + "mdast-util-mdx-jsx": ["mdast-util-mdx-jsx@3.2.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" } }, "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q=="], + + "mdast-util-mdxjs-esm": ["mdast-util-mdxjs-esm@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg=="], + + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], + + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "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" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], + + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], + + "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], + "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], @@ -1181,6 +1303,62 @@ "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], + + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], + + "micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="], + + "micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="], + + "micromark-extension-mdx-md": ["micromark-extension-mdx-md@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ=="], + + "micromark-extension-mdxjs": ["micromark-extension-mdxjs@3.0.0", "", { "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", "micromark-extension-mdx-expression": "^3.0.0", "micromark-extension-mdx-jsx": "^3.0.0", "micromark-extension-mdx-md": "^2.0.0", "micromark-extension-mdxjs-esm": "^3.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ=="], + + "micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="], + + "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], + + "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], + + "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="], + + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + + "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], + + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], + + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], + + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], + + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], + + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], + + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + + "micromark-util-events-to-acorn": ["micromark-util-events-to-acorn@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg=="], + + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], + + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], + + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], @@ -1223,6 +1401,8 @@ "next-intl-swc-plugin-extractor": ["next-intl-swc-plugin-extractor@4.11.0", "", {}, "sha512-WUGBSxGNd8eQ0rAsJHFmRw2H7+SZAXQIY/HAnYM57JaUsj5D2vx4KOz4zFtXlyKDtsw9awHfgWVvBae2/RDF9A=="], + "next-mdx-remote": ["next-mdx-remote@6.0.0", "", { "dependencies": { "@babel/code-frame": "^7.23.5", "@mdx-js/mdx": "^3.0.1", "@mdx-js/react": "^3.0.1", "unist-util-remove": "^4.0.0", "unist-util-visit": "^5.1.0", "vfile": "^6.0.1", "vfile-matter": "^5.0.0" }, "peerDependencies": { "react": ">=16" } }, "sha512-cJEpEZlgD6xGjB4jL8BnI8FaYdN9BzZM4NwadPe1YQr7pqoWjg9EBCMv3nXBkuHqMRfv2y33SzUsuyNh9LFAQQ=="], + "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], @@ -1267,6 +1447,8 @@ "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], @@ -1305,6 +1487,8 @@ "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], @@ -1323,10 +1507,26 @@ "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], + + "recma-jsx": ["recma-jsx@1.0.1", "", { "dependencies": { "acorn-jsx": "^5.0.0", "estree-util-to-js": "^2.0.0", "recma-parse": "^1.0.0", "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w=="], + + "recma-parse": ["recma-parse@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ=="], + + "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="], + "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="], "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], + + "remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="], + + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], + + "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], + "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], @@ -1347,6 +1547,8 @@ "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], + "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], @@ -1377,12 +1579,16 @@ "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="], "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], @@ -1403,14 +1609,22 @@ "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="], + "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], "strnum": ["strnum@2.1.2", "", {}, "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ=="], + "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], + + "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], "supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], @@ -1437,6 +1651,10 @@ "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], "ts-tqdm": ["ts-tqdm@0.8.6", "", {}, "sha512-3X3M1PZcHtgQbnwizL+xU8CAgbYbeLHrrDwL9xxcZZrV5J+e7loJm1XrXozHjSkl44J0Zg0SgA8rXbh83kCkcQ=="], @@ -1469,6 +1687,22 @@ "unenv": ["unenv@2.0.0-rc.24", "", { "dependencies": { "pathe": "^2.0.3" } }, "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw=="], + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], + + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + + "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], + + "unist-util-remove": ["unist-util-remove@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], @@ -1481,6 +1715,12 @@ "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-matter": ["vfile-matter@5.0.1", "", { "dependencies": { "vfile": "^6.0.0", "yaml": "^2.0.0" } }, "sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw=="], + + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + "web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="], "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], @@ -1523,6 +1763,8 @@ "youch-core": ["youch-core@0.3.3", "", { "dependencies": { "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } }, "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + "@aws-crypto/sha1-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], @@ -1603,12 +1845,16 @@ "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], + "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], "router/path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], "sharp/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], diff --git a/web/components/docs/mdx-components.tsx b/web/components/docs/mdx-components.tsx new file mode 100644 index 000000000..a664188e2 --- /dev/null +++ b/web/components/docs/mdx-components.tsx @@ -0,0 +1,140 @@ +import * as React from "react" +import { cn } from "@/lib/utils" + +type WithChildren = { children?: React.ReactNode; className?: string } + +export const mdxComponents = { + h1: ({ children, className, ...props }: WithChildren) => ( +

+ {children} +

+ ), + h2: ({ children, className, ...props }: WithChildren) => ( +

+ {children} +

+ ), + h3: ({ children, className, ...props }: WithChildren) => ( +

+ {children} +

+ ), + h4: ({ children, className, ...props }: WithChildren) => ( +

+ {children} +

+ ), + p: ({ children, className, ...props }: WithChildren) => ( +

+ {children} +

+ ), + a: ({ children, href, className, ...props }: WithChildren & { href?: string }) => ( + + {children} + + ), + ul: ({ children, className, ...props }: WithChildren) => ( +
    + {children} +
+ ), + ol: ({ children, className, ...props }: WithChildren) => ( +
    + {children} +
+ ), + li: ({ children, className, ...props }: WithChildren) => ( +
  • + {children} +
  • + ), + blockquote: ({ children, className, ...props }: WithChildren) => ( +
    + {children} +
    + ), + code: ({ children, className, ...props }: WithChildren) => ( + + {children} + + ), + pre: ({ children, className, ...props }: WithChildren) => ( +
    +      {children}
    +    
    + ), + table: ({ children, className, ...props }: WithChildren) => ( +
    + + {children} +
    +
    + ), + thead: ({ children, className, ...props }: WithChildren) => ( + + {children} + + ), + th: ({ children, className, ...props }: WithChildren) => ( + + {children} + + ), + td: ({ children, className, ...props }: WithChildren) => ( + + {children} + + ), + hr: ({ className, ...props }: { className?: string }) => ( +
    + ), + strong: ({ children, className, ...props }: WithChildren) => ( + + {children} + + ), +} diff --git a/web/lib/docs-sections.ts b/web/lib/docs-sections.ts index 06ac78c68..6cf91989f 100644 --- a/web/lib/docs-sections.ts +++ b/web/lib/docs-sections.ts @@ -1,39 +1,25 @@ -export const DOC_SECTION_IDS = [ - "overview", - "quick-start", - "config-locations", - "agents", - "categories", - "skills", - "background-tasks", - "hooks", - "mcps", - "browser-automation", - "tmux", - "git-master", - "comment-checker", - "experimental", - "lsp", - "env-vars", +export type DocSection = { + id: string + title: string + file: string +} + +export const DOC_SECTIONS: readonly DocSection[] = [ + { id: "overview", file: "guide/overview.md", title: "Overview" }, + { id: "installation", file: "guide/installation.md", title: "Installation" }, + { id: "orchestration", file: "guide/orchestration.md", title: "Orchestration" }, + { + id: "agent-model-matching", + file: "guide/agent-model-matching.md", + title: "Agent / Model Matching", + }, + { id: "team-mode", file: "guide/team-mode.md", title: "Team Mode" }, + { id: "cli", file: "reference/cli.md", title: "CLI Reference" }, + { id: "configuration", file: "reference/configuration.md", title: "Configuration" }, + { id: "features", file: "reference/features.md", title: "Features" }, + { id: "manifesto", file: "manifesto.md", title: "Manifesto" }, ] as const -export type DocSectionId = (typeof DOC_SECTION_IDS)[number] +export const DOC_SECTION_IDS = DOC_SECTIONS.map((s) => s.id) -export const DOC_SECTION_TITLE_KEYS: Record = { - overview: "overview", - "quick-start": "quickStart", - "config-locations": "configLocations", - agents: "agents", - categories: "categories", - skills: "skills", - "background-tasks": "backgroundTasks", - hooks: "hooks", - mcps: "mcps", - "browser-automation": "browserAutomation", - tmux: "tmux", - "git-master": "gitMaster", - "comment-checker": "commentChecker", - experimental: "experimental", - lsp: "lsp", - "env-vars": "envVars", -} +export type DocSectionId = (typeof DOC_SECTIONS)[number]["id"] diff --git a/web/lib/docs-source.ts b/web/lib/docs-source.ts new file mode 100644 index 000000000..495c95831 --- /dev/null +++ b/web/lib/docs-source.ts @@ -0,0 +1,9 @@ +import { readFile } from "node:fs/promises" +import path from "node:path" + +const DOCS_ROOT = path.resolve(process.cwd(), "..", "docs") + +export async function loadDocSource(file: string): Promise { + const fullPath = path.join(DOCS_ROOT, file) + return readFile(fullPath, "utf8") +} diff --git a/web/messages/en.json b/web/messages/en.json index 83d15df34..817fb069e 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -247,178 +247,7 @@ }, "docs": { "mobileHeader": "Oh My OpenAgent Docs", - "searchPlaceholder": "Search docs...", - "sections": { - "overview": "Overview", - "quickStart": "Quick Start", - "configLocations": "Config File Locations", - "agents": "Agents", - "categories": "Categories", - "skills": "Skills", - "backgroundTasks": "Background Tasks", - "hooks": "Hooks", - "mcps": "MCPs", - "browserAutomation": "Browser Automation", - "tmux": "Tmux Integration", - "gitMaster": "Git Master", - "commentChecker": "Comment Checker", - "experimental": "Experimental Features", - "lsp": "LSP Configuration", - "envVars": "Environment Variables" - }, - "overview": { - "title": "Configuration Reference", - "description": "Oh My OpenAgent is highly opinionated but adjustable to taste. Most users don't need to configure anything — run {command} and go." - }, - "quickStart": { - "title": "Quick Start" - }, - "configLocations": { - "title": "Config File Locations", - "projectLevel": "(Project level)", - "userLevel": "(User level)", - "jsonc": "JSONC is supported, allowing comments and trailing commas." - }, - "agentsSection": { - "title": "Agents", - "description": "Configure specific behaviors for the built-in agents: Sisyphus, Hephaestus, Oracle, Librarian, Explore, Multimodal Looker, Prometheus, Metis, Momus, Atlas, and Sisyphus Junior.", - "overrideOptions": "Override Options", - "permissions": "Permissions", - "options": { - "model": "Model identifier (e.g., openai/gpt-4o)", - "variant": "Model variant (max, high, medium, low)", - "category": "Inherit configuration from a category", - "temperature": "Sampling temperature (0-2)", - "topP": "Top-p sampling (0-1)", - "prompt": "Override the system prompt completely", - "promptAppend": "Append text to the system prompt", - "tools": "Enable or disable specific tools", - "disable": "Disable this agent", - "maxTokens": "Maximum tokens for response", - "thinking": "Extended thinking configuration", - "reasoningEffort": "Reasoning effort: low, medium, high, xhigh" - }, - "permissionValues": "ask / allow / deny", - "permissionDescriptions": { - "edit": "File editing capabilities", - "bash": "Bash command execution", - "webfetch": "Web request capabilities", - "doomLoop": "Infinite loop override", - "externalDirectory": "Access files outside project" - } - }, - "categoriesSection": { - "title": "Categories", - "description": "Categories allow you to define shared configurations that agents can inherit from.", - "availableOptions": "Available options for categories: {options}.", - "categories": { - "visualEngineering": "Frontend, UI/UX, design tasks", - "ultrabrain": "Deep logical reasoning", - "deep": "Autonomous problem-solving, thorough research", - "artistry": "Creative tasks", - "quick": "Trivial, fast tasks", - "unspecifiedLow": "Low effort general tasks", - "unspecifiedHigh": "High effort general tasks", - "writing": "Documentation and prose" - } - }, - "skillsSection": { - "title": "Skills", - "description": "Built-in skills include {playwright}, {agentBrowser}, and {gitMaster}. You can also define custom skills." - }, - "backgroundTasksSection": { - "title": "Background Tasks", - "priority": "Priority:", - "options": { - "defaultConcurrency": "Default max concurrent tasks", - "staleTimeoutMs": "Timeout for stale tasks in ms", - "providerConcurrency": "Concurrency limit per provider", - "modelConcurrency": "Concurrency limit per model" - } - }, - "hooksSection": { - "title": "Hooks", - "description": "Hooks allow you to extend functionality at various lifecycle points." - }, - "mcpsSection": { - "title": "MCPs", - "websearch": { - "title": "websearch", - "description": "Powered by Exa for high-quality search results." - }, - "context7": { - "title": "context7", - "description": "Documentation retrieval and context management." - }, - "grepApp": { - "title": "grep_app", - "description": "GitHub code search integration." - } - }, - "browserAutomationSection": { - "title": "Browser Automation", - "playwright": { - "tool": "playwright", - "description": "Full browser automation (default)", - "useCase": "Testing, complex interactions" - }, - "agentBrowser": { - "tool": "agent-browser", - "description": "Lightweight browser agent", - "useCase": "Quick lookups, simple scraping" - } - }, - "tmuxSection": { - "title": "Tmux Integration", - "options": { - "enabled": "Enable Tmux integration", - "layout": "Tmux window layout", - "mainPaneSize": "Size of the main pane" - } - }, - "gitMasterSection": { - "title": "Git Master", - "options": { - "commitFooter": "Text to append to commit messages", - "includeCoAuthoredBy": "Add Co-authored-by trailer" - } - }, - "commentCheckerSection": { - "title": "Comment Checker", - "description": "Validates comments in your code. Use the {placeholder} placeholder in your custom prompt." - }, - "experimentalSection": { - "title": "Experimental Features", - "options": { - "aggressiveTruncation": "Aggressively truncate outputs", - "autoResume": "Automatically resume interrupted tasks", - "preemptiveCompaction": "Compact context before limits", - "truncateAllToolOutputs": "Truncate all tool outputs" - }, - "dynamicPruning": { - "trigger": "dynamic_context_pruning", - "description": "Configure dynamic pruning rules to manage context window usage efficiently." - } - }, - "lspSection": { - "title": "LSP Configuration", - "options": { - "command": "LSP server command", - "extensions": "File extensions to match", - "priority": "Server priority", - "env": "Environment variables", - "initialization": "Initialization options", - "disabled": "Disable this LSP" - } - }, - "envVarsSection": { - "title": "Environment Variables", - "opencodeConfigDir": { - "name": "OPENCODE_CONFIG_DIR", - "description": "Override the default configuration directory path." - } - }, - "footer": "Oh My OpenAgent Documentation © {year}" + "searchPlaceholder": "Search docs..." }, "manifesto": { "badge": "Manifesto", diff --git a/web/messages/ja.json b/web/messages/ja.json index 0a990119b..2e34b77d0 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -247,178 +247,7 @@ }, "docs": { "mobileHeader": "Oh My OpenAgentドキュメント", - "searchPlaceholder": "ドキュメントを検索...", - "sections": { - "overview": "概要", - "quickStart": "クイックスタート", - "configLocations": "設定ファイルの場所", - "agents": "エージェント", - "categories": "カテゴリ", - "skills": "スキル", - "backgroundTasks": "バックグラウンドタスク", - "hooks": "フック", - "mcps": "MCP", - "browserAutomation": "ブラウザ自動化", - "tmux": "Tmux統合", - "gitMaster": "Git Master", - "commentChecker": "コメントチェッカー", - "experimental": "実験的機能", - "lsp": "LSP設定", - "envVars": "環境変数" - }, - "overview": { - "title": "設定リファレンス", - "description": "Oh My OpenAgentは意見を持っていますが、好みに応じて調整可能です。ほとんどのユーザーは何も設定する必要はありません — {command}を実行して始めてください。" - }, - "quickStart": { - "title": "クイックスタート" - }, - "configLocations": { - "title": "設定ファイルの場所", - "projectLevel": "(プロジェクトレベル)", - "userLevel": "(ユーザーレベル)", - "jsonc": "JSONCがサポートされており、コメントと末尾のカンマを使用できます。" - }, - "agentsSection": { - "title": "エージェント", - "description": "Sisyphus、Hephaestus、Oracle、Librarian、Explore、Multimodal Looker、Prometheus、Metis、Momus、Atlas、Sisyphus Juniorなど、組み込みエージェントの動作を設定します。", - "overrideOptions": "オーバーライドオプション", - "permissions": "権限", - "options": { - "model": "モデル識別子(例:openai/gpt-4o)", - "variant": "モデルバリアント(max, high, medium, low)", - "category": "カテゴリから設定を継承", - "temperature": "サンプリング温度(0-2)", - "topP": "Top-pサンプリング(0-1)", - "prompt": "システムプロンプトを完全にオーバーライド", - "promptAppend": "システムプロンプトにテキストを追加", - "tools": "特定のツールを有効または無効にする", - "disable": "このエージェントを無効にする", - "maxTokens": "レスポンスの最大トークン数", - "thinking": "拡張思考設定", - "reasoningEffort": "推論努力:low, medium, high, xhigh" - }, - "permissionValues": "ask / allow / deny", - "permissionDescriptions": { - "edit": "ファイル編集機能", - "bash": "Bashコマンド実行", - "webfetch": "Webリクエスト機能", - "doomLoop": "無限ループオーバーライド", - "externalDirectory": "プロジェクト外のファイルへのアクセス" - } - }, - "categoriesSection": { - "title": "カテゴリ", - "description": "カテゴリを使用すると、エージェントが継承できる共有設定を定義できます。", - "availableOptions": "カテゴリで利用可能なオプション:{options}。", - "categories": { - "visualEngineering": "フロントエンド、UI/UX、デザインタスク", - "ultrabrain": "深い論理的推論", - "deep": "自律的な問題解決と徹底したリサーチ", - "artistry": "クリエイティブタスク", - "quick": "些細で高速なタスク", - "unspecifiedLow": "低労力の一般的タスク", - "unspecifiedHigh": "高労力の一般的タスク", - "writing": "ドキュメントと散文" - } - }, - "skillsSection": { - "title": "スキル", - "description": "組み込みスキルには{playwright}、{agentBrowser}、{gitMaster}が含まれます。カスタムスキルを定義することもできます。" - }, - "backgroundTasksSection": { - "title": "バックグラウンドタスク", - "priority": "優先度:", - "options": { - "defaultConcurrency": "デフォルトの最大並列タスク数", - "staleTimeoutMs": "古いタスクのタイムアウト(ミリ秒)", - "providerConcurrency": "プロバイダーごとの並列制限", - "modelConcurrency": "モデルごとの並列制限" - } - }, - "hooksSection": { - "title": "フック", - "description": "フックを使用すると、さまざまなライフサイクルポイントで機能を拡張できます。" - }, - "mcpsSection": { - "title": "MCP", - "websearch": { - "title": "websearch", - "description": "Exa提供の高品質検索結果。" - }, - "context7": { - "title": "context7", - "description": "ドキュメント取得とコンテキスト管理。" - }, - "grepApp": { - "title": "grep_app", - "description": "GitHubコード検索統合。" - } - }, - "browserAutomationSection": { - "title": "ブラウザ自動化", - "playwright": { - "tool": "playwright", - "description": "フルブラウザ自動化(デフォルト)", - "useCase": "テスト、複雑なインタラクション" - }, - "agentBrowser": { - "tool": "agent-browser", - "description": "軽量ブラウザエージェント", - "useCase": "クイックルックアップ、簡単なスクレイピング" - } - }, - "tmuxSection": { - "title": "Tmux統合", - "options": { - "enabled": "Tmux統合を有効にする", - "layout": "Tmuxウィンドウレイアウト", - "mainPaneSize": "メインペインのサイズ" - } - }, - "gitMasterSection": { - "title": "Git Master", - "options": { - "commitFooter": "コミットメッセージに追加するテキスト", - "includeCoAuthoredBy": "Co-authored-byトレーラーを追加" - } - }, - "commentCheckerSection": { - "title": "コメントチェッカー", - "description": "コード内のコメントを検証します。カスタムプロンプトには{placeholder}プレースホルダーを使用してください。" - }, - "experimentalSection": { - "title": "実験的機能", - "options": { - "aggressiveTruncation": "出力を積極的に切り詰める", - "autoResume": "中断されたタスクを自動的に再開", - "preemptiveCompaction": "制限前にコンテキストを圧縮", - "truncateAllToolOutputs": "すべてのツール出力を切り詰める" - }, - "dynamicPruning": { - "trigger": "dynamic_context_pruning", - "description": "コンテキストウィンドウの使用量を効率的に管理するための動的プルーニングルールを設定します。" - } - }, - "lspSection": { - "title": "LSP設定", - "options": { - "command": "LSPサーバーコマンド", - "extensions": "一致させるファイル拡張子", - "priority": "サーバーの優先度", - "env": "環境変数", - "initialization": "初期化オプション", - "disabled": "このLSPを無効にする" - } - }, - "envVarsSection": { - "title": "環境変数", - "opencodeConfigDir": { - "name": "OPENCODE_CONFIG_DIR", - "description": "デフォルトの設定ディレクトリパスを上書きします。" - } - }, - "footer": "Oh My OpenAgentドキュメント © {year}" + "searchPlaceholder": "ドキュメントを検索..." }, "manifesto": { "badge": "マニフェスト", diff --git a/web/messages/ko.json b/web/messages/ko.json index 54e8feed9..6ec34fe6a 100644 --- a/web/messages/ko.json +++ b/web/messages/ko.json @@ -247,178 +247,7 @@ }, "docs": { "mobileHeader": "Oh My OpenAgent Docs", - "searchPlaceholder": "문서 검색...", - "sections": { - "overview": "Overview", - "quickStart": "Quick Start", - "configLocations": "Config File Locations", - "agents": "Agents", - "categories": "Categories", - "skills": "Skills", - "backgroundTasks": "Background Tasks", - "hooks": "Hooks", - "mcps": "MCPs", - "browserAutomation": "Browser Automation", - "tmux": "Tmux Integration", - "gitMaster": "Git Master", - "commentChecker": "Comment Checker", - "experimental": "Experimental Features", - "lsp": "LSP Configuration", - "envVars": "Environment Variables" - }, - "overview": { - "title": "Configuration Reference", - "description": "Oh My OpenAgent는 강력한 의견을 가지고 있지만 취향에 맞게 조정할 수 있습니다. 대부분의 사용자는 설정할 필요가 없습니다. {command}를 실행하고 바로 시작하세요." - }, - "quickStart": { - "title": "Quick Start" - }, - "configLocations": { - "title": "Config File Locations", - "projectLevel": "(프로젝트 레벨)", - "userLevel": "(사용자 레벨)", - "jsonc": "JSONC가 지원되어 주석과 후행 쉼표를 사용할 수 있습니다." - }, - "agentsSection": { - "title": "Agents", - "description": "내장된 Agent의 특정 동작을 설정합니다: Sisyphus, Hephaestus, Oracle, Librarian, Explore, Multimodal Looker, Prometheus, Metis, Momus, Atlas, Sisyphus Junior.", - "overrideOptions": "Override 옵션", - "permissions": "Permissions", - "options": { - "model": "모델 식별자 (예: openai/gpt-4o)", - "variant": "모델 변형 (max, high, medium, low)", - "category": "카테고리에서 설정 상속", - "temperature": "샘플링 온도 (0-2)", - "topP": "Top-p 샘플링 (0-1)", - "prompt": "시스템 프롬프트 완전히 재정의", - "promptAppend": "시스템 프롬프트에 텍스트 추가", - "tools": "특정 도구 활성화 또는 비활성화", - "disable": "이 Agent 비활성화", - "maxTokens": "응답의 최대 토큰 수", - "thinking": "확장 사고 설정", - "reasoningEffort": "추론 노력: low, medium, high, xhigh" - }, - "permissionValues": "ask / allow / deny", - "permissionDescriptions": { - "edit": "파일 편집 기능", - "bash": "Bash 명령어 실행", - "webfetch": "웹 요청 기능", - "doomLoop": "무한 루프 재정의", - "externalDirectory": "프로젝트 외부 파일 접근" - } - }, - "categoriesSection": { - "title": "Categories", - "description": "Categories를 사용하면 Agent가 상속할 수 있는 공유 설정을 정의할 수 있습니다.", - "availableOptions": "Categories 사용 가능 옵션: {options}.", - "categories": { - "visualEngineering": "프론트엔드, UI/UX, 디자인 작업", - "ultrabrain": "심층 논리적 추론", - "deep": "자율 문제 해결, 철저한 리서치", - "artistry": "창의적 작업", - "quick": "간단하고 빠른 작업", - "unspecifiedLow": "저노력 일반 작업", - "unspecifiedHigh": "고노력 일반 작업", - "writing": "문서 및 산문" - } - }, - "skillsSection": { - "title": "Skills", - "description": "내장된 스킬에는 {playwright}, {agentBrowser}, {gitMaster}가 포함됩니다. 커스텀 스킬도 정의할 수 있습니다." - }, - "backgroundTasksSection": { - "title": "Background Tasks", - "priority": "우선순위:", - "options": { - "defaultConcurrency": "기본 최대 동시 작업 수", - "staleTimeoutMs": "오래된 작업 타임아웃 (ms)", - "providerConcurrency": "프로바이더당 동시성 제한", - "modelConcurrency": "모델당 동시성 제한" - } - }, - "hooksSection": { - "title": "Hooks", - "description": "Hooks를 사용하면 다양한 라이프사이클 지점에서 기능을 확장할 수 있습니다." - }, - "mcpsSection": { - "title": "MCPs", - "websearch": { - "title": "websearch", - "description": "Exa로 구동되는 고품질 검색 결과." - }, - "context7": { - "title": "context7", - "description": "문서 검색 및 컨텍스트 관리." - }, - "grepApp": { - "title": "grep_app", - "description": "GitHub 코드 검색 통합." - } - }, - "browserAutomationSection": { - "title": "Browser Automation", - "playwright": { - "tool": "playwright", - "description": "풀 브라우저 자동화 (기본값)", - "useCase": "테스트, 복잡한 상호작용" - }, - "agentBrowser": { - "tool": "agent-browser", - "description": "가벼운 브라우저 Agent", - "useCase": "빠른 조회, 간단한 스크래핑" - } - }, - "tmuxSection": { - "title": "Tmux Integration", - "options": { - "enabled": "Tmux 통합 활성화", - "layout": "Tmux 창 레이아웃", - "mainPaneSize": "메인 창 크기" - } - }, - "gitMasterSection": { - "title": "Git Master", - "options": { - "commitFooter": "커밋 메시지에 추가할 텍스트", - "includeCoAuthoredBy": "Co-authored-by 트레일러 추가" - } - }, - "commentCheckerSection": { - "title": "Comment Checker", - "description": "코드의 주석을 검증합니다. 커스텀 프롬프트에서 {placeholder} 자리 표시자를 사용하세요." - }, - "experimentalSection": { - "title": "Experimental Features", - "options": { - "aggressiveTruncation": "출력을 적극적으로 잘라내기", - "autoResume": "중단된 작업 자동 재개", - "preemptiveCompaction": "제한 전 컨텍스트 압축", - "truncateAllToolOutputs": "모든 도구 출력 잘라내기" - }, - "dynamicPruning": { - "trigger": "dynamic_context_pruning", - "description": "컨텍스트 윈도우 사용량을 효율적으로 관리하기 위한 동적 가지치기 규칙을 설정합니다." - } - }, - "lspSection": { - "title": "LSP Configuration", - "options": { - "command": "LSP 서버 명령어", - "extensions": "매칭할 파일 확장자", - "priority": "서버 우선순위", - "env": "환경 변수", - "initialization": "초기화 옵션", - "disabled": "이 LSP 비활성화" - } - }, - "envVarsSection": { - "title": "Environment Variables", - "opencodeConfigDir": { - "name": "OPENCODE_CONFIG_DIR", - "description": "기본 설정 디렉토리 경로를 재정의합니다." - } - }, - "footer": "Oh My OpenAgent Documentation © {year}" + "searchPlaceholder": "문서 검색..." }, "manifesto": { "badge": "Manifesto", diff --git a/web/messages/zh.json b/web/messages/zh.json index 6e4e429fc..1d4187b4b 100644 --- a/web/messages/zh.json +++ b/web/messages/zh.json @@ -247,178 +247,7 @@ }, "docs": { "mobileHeader": "Oh My OpenAgent 文档", - "searchPlaceholder": "搜索文档...", - "sections": { - "overview": "概览", - "quickStart": "快速开始", - "configLocations": "配置文件位置", - "agents": "Agents", - "categories": "分类", - "skills": "Skills", - "backgroundTasks": "后台任务", - "hooks": "钩子", - "mcps": "MCPs", - "browserAutomation": "浏览器自动化", - "tmux": "Tmux 集成", - "gitMaster": "Git Master", - "commentChecker": "注释检查器", - "experimental": "实验性功能", - "lsp": "LSP 配置", - "envVars": "环境变量" - }, - "overview": { - "title": "配置参考", - "description": "Oh My OpenAgent 高度自有主张,但可根据个人喜好调整。大多数用户无需配置——运行 {command} 即可开始。" - }, - "quickStart": { - "title": "快速开始" - }, - "configLocations": { - "title": "配置文件位置", - "projectLevel": "(项目级)", - "userLevel": "(用户级)", - "jsonc": "支持 JSONC 格式,允许注释和尾随逗号。" - }, - "agentsSection": { - "title": "Agents", - "description": "为内置 Agent 配置特定行为:Sisyphus、Hephaestus、Oracle、Librarian、Explore、Multimodal Looker、Prometheus、Metis、Momus、Atlas 和 Sisyphus Junior。", - "overrideOptions": "覆盖选项", - "permissions": "权限", - "options": { - "model": "模型标识符(例如 openai/gpt-4o)", - "variant": "模型变体(max、high、medium、low)", - "category": "从分类继承配置", - "temperature": "采样温度(0-2)", - "topP": "Top-p 采样(0-1)", - "prompt": "完全覆盖系统提示词", - "promptAppend": "在系统提示词后追加文本", - "tools": "启用或禁用特定工具", - "disable": "禁用此 Agent", - "maxTokens": "响应的最大 token 数", - "thinking": "扩展思考配置", - "reasoningEffort": "推理强度:low、medium、high、xhigh" - }, - "permissionValues": "ask / allow / deny", - "permissionDescriptions": { - "edit": "文件编辑能力", - "bash": "Bash 命令执行", - "webfetch": "网络请求能力", - "doomLoop": "无限循环覆盖", - "externalDirectory": "访问项目外部文件" - } - }, - "categoriesSection": { - "title": "分类", - "description": "分类允许你定义 Agent 可以继承的共享配置。", - "availableOptions": "分类可用选项:{options}。", - "categories": { - "visualEngineering": "前端、UI/UX、设计任务", - "ultrabrain": "深度逻辑推理", - "deep": "自主解决问题与深入研究", - "artistry": "创意任务", - "quick": "简单、快速任务", - "unspecifiedLow": "低投入一般任务", - "unspecifiedHigh": "高投入一般任务", - "writing": "文档和写作" - } - }, - "skillsSection": { - "title": "Skills", - "description": "内置技能包括 {playwright}、{agentBrowser} 和 {gitMaster}。你也可以定义自定义技能。" - }, - "backgroundTasksSection": { - "title": "后台任务", - "priority": "优先级:", - "options": { - "defaultConcurrency": "默认最大并发任务数", - "staleTimeoutMs": "过时任务超时时间(毫秒)", - "providerConcurrency": "每个提供商的并发限制", - "modelConcurrency": "每个模型的并发限制" - } - }, - "hooksSection": { - "title": "钩子", - "description": "钩子允许你在各个生命周期点扩展功能。" - }, - "mcpsSection": { - "title": "MCPs", - "websearch": { - "title": "websearch", - "description": "由 Exa 驱动,提供高质量搜索结果。" - }, - "context7": { - "title": "context7", - "description": "文档检索和上下文管理。" - }, - "grepApp": { - "title": "grep_app", - "description": "GitHub 代码搜索集成。" - } - }, - "browserAutomationSection": { - "title": "浏览器自动化", - "playwright": { - "tool": "playwright", - "description": "完整的浏览器自动化(默认)", - "useCase": "测试、复杂交互" - }, - "agentBrowser": { - "tool": "agent-browser", - "description": "轻量级浏览器 Agent", - "useCase": "快速查询、简单抓取" - } - }, - "tmuxSection": { - "title": "Tmux 集成", - "options": { - "enabled": "启用 Tmux 集成", - "layout": "Tmux 窗口布局", - "mainPaneSize": "主面板大小" - } - }, - "gitMasterSection": { - "title": "Git Master", - "options": { - "commitFooter": "追加到提交消息的文本", - "includeCoAuthoredBy": "添加 Co-authored-by 标记" - } - }, - "commentCheckerSection": { - "title": "注释检查器", - "description": "验证代码中的注释。在自定义提示词中使用 {placeholder} 占位符。" - }, - "experimentalSection": { - "title": "实验性功能", - "options": { - "aggressiveTruncation": "积极截断输出", - "autoResume": "自动恢复中断的任务", - "preemptiveCompaction": "在达到限制前压缩上下文", - "truncateAllToolOutputs": "截断所有工具输出" - }, - "dynamicPruning": { - "trigger": "dynamic_context_pruning", - "description": "配置动态剪枝规则,高效管理上下文窗口使用。" - } - }, - "lspSection": { - "title": "LSP 配置", - "options": { - "command": "LSP 服务器命令", - "extensions": "匹配的文件扩展名", - "priority": "服务器优先级", - "env": "环境变量", - "initialization": "初始化选项", - "disabled": "禁用此 LSP" - } - }, - "envVarsSection": { - "title": "环境变量", - "opencodeConfigDir": { - "name": "OPENCODE_CONFIG_DIR", - "description": "覆盖默认配置目录路径。" - } - }, - "footer": "Oh My OpenAgent 文档 © {year}" + "searchPlaceholder": "搜索文档..." }, "manifesto": { "badge": "宣言", diff --git a/web/package.json b/web/package.json index 5662213bc..716d184c9 100644 --- a/web/package.json +++ b/web/package.json @@ -26,10 +26,12 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "geist": "^1.7.0", + "gray-matter": "^4.0.3", "lucide-react": "0.577.0", "motion": "^12.38.0", "next": "15.5.18", "next-intl": "^4.11.0", + "next-mdx-remote": "^6.0.0", "react": "^19.2.6", "react-dom": "^19.2.6", "tailwind-merge": "^3.5.0", From aadcbbfcc647edcf9f99e9a9df0567f40f78210b Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 8 May 2026 16:15:54 +0900 Subject: [PATCH 3/4] chore(workflows): trigger web CI + deploy on docs/ changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now that docs/ is the single source of truth that the marketing site renders at build time, edits to those files must run web CI and trigger the Cloudflare deploy. Add `docs/**` to the paths filter in both web-ci.yml and web-deploy.yml. A markdown-only fix in docs/ is now sufficient to redeploy oh-my-openagent.com — no companion web/ change needed. --- .github/workflows/web-ci.yml | 2 ++ .github/workflows/web-deploy.yml | 1 + 2 files changed, 3 insertions(+) diff --git a/.github/workflows/web-ci.yml b/.github/workflows/web-ci.yml index a9974746a..f3c0c9d3e 100644 --- a/.github/workflows/web-ci.yml +++ b/.github/workflows/web-ci.yml @@ -5,11 +5,13 @@ on: branches: [master, dev] paths: - "web/**" + - "docs/**" - ".github/workflows/web-ci.yml" pull_request: branches: [master, dev] paths: - "web/**" + - "docs/**" - ".github/workflows/web-ci.yml" concurrency: diff --git a/.github/workflows/web-deploy.yml b/.github/workflows/web-deploy.yml index a8a10ba15..9d265700b 100644 --- a/.github/workflows/web-deploy.yml +++ b/.github/workflows/web-deploy.yml @@ -11,6 +11,7 @@ on: branches: [master, dev] paths: - "web/**" + - "docs/**" - ".github/workflows/web-deploy.yml" concurrency: From 70be16dd6b2e2c2d8880414a6fb53db62e83670e Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 8 May 2026 16:23:54 +0900 Subject: [PATCH 4/4] docs(agent-model-matching): Hephaestus chain is gpt-5.5 only Hephaestus's fallbackChain in src/shared/model-requirements.ts has a single entry: gpt-5.5. The previous wording said "GPT-5.4/5.5" which implied either was acceptable; only gpt-5.5 is. Note OpenAI API access as an alternative to ChatGPT Plus/Pro for clarity. --- docs/guide/agent-model-matching.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/guide/agent-model-matching.md b/docs/guide/agent-model-matching.md index f5f0b4189..ef7754e2a 100644 --- a/docs/guide/agent-model-matching.md +++ b/docs/guide/agent-model-matching.md @@ -124,7 +124,7 @@ You don't need every provider. You need the right two. ### Why this specific combination -1. **Hephaestus requires GPT-5.4/5.5.** It has no Claude-family fallback. ChatGPT Plus/Pro is the cheapest real path. +1. **Hephaestus requires GPT-5.5.** It has no Claude-family fallback. ChatGPT Plus/Pro or OpenAI API access is the cheapest real path. 2. **OpenCode Go covers the orchestration and creative surface.** Kimi K2.5/2.6 behaves like Claude for Sisyphus/Atlas. GLM-5 fills the long tail. Qwen handles visual tasks when Gemini isn't available. 3. **No single provider can cover everything.** Anthropic-only setups break Hephaestus. OpenAI-only setups degrade Sisyphus. You need at least one from each family. @@ -140,7 +140,12 @@ OpenCode Go alone gets Sisyphus/Atlas/Oracle/Librarian/Explore working. Hephaest ## Step 3 — Model Family Alternatives (Priority Order) -When the "native" model isn't available, oh-my-openagent walks each agent's fallback chain until something connects. The chains are hardcoded in [`src/shared/model-requirements.ts`](../../src/shared/model-requirements.ts). Here are the **substitution rules** you should internalize. +When the "native" model isn't available, oh-my-openagent walks each agent's fallback chain until something connects. The chains are hardcoded in [`src/shared/model-requirements.ts`](../../src/shared/model-requirements.ts). There is no single global priority list. Every agent and category has its own chain. + +There are two separate systems: + +- **model-fallback**: proactive resolution in `chat.params` using hardcoded `AGENT_MODEL_REQUIREMENTS` and `CATEGORY_MODEL_REQUIREMENTS` +- **runtime-fallback**: reactive recovery from `session.error`, configurable per category/agent in runtime-fallback hooks ### Claude Family (communicative, instruction-following) @@ -293,7 +298,7 @@ OpenCode Go models appear throughout the fallback chains as intermediate options **Go-Only Scenarios:** -Some model identifiers like `k2p5` (paid Kimi K2.5) and `glm-5` may only be available through OpenCode Go subscription in certain regions. When configured with these short identifiers, the system resolves them through the opencode-go provider first. +Some model identifiers in fallback chains are provider-specific aliases. For example, `k2p5` resolves through `kimi-for-coding`, while `glm-5` can resolve through `zai-coding-plan`, `opencode`, or `vercel` depending on availability. ### About Free-Tier Fallbacks @@ -310,13 +315,13 @@ When agents delegate work, they don't pick a model name — they pick a **catego | Category | Used For | Default Model | Fallback Chain | |---|---|---|---| | `visual-engineering` | Frontend, UI, CSS, design | `google/gemini-3.1-pro` (high) | Gemini → `zai-coding-plan/glm-5` → `claude-opus-4-7` (max) → `opencode-go/glm-5.1` → `kimi-for-coding/k2p5` | -| `artistry` | Creative, novel approaches | `google/gemini-3.1-pro` (high) | Gemini → `claude-opus-4-7` (max) → `gpt-5.5` — requires Gemini family to activate | +| `artistry` | Creative, novel approaches | `google/gemini-3.1-pro` (high) | Gemini → `claude-opus-4-7` (max) → `gpt-5.5` | | `ultrabrain` | Maximum reasoning needed | `openai/gpt-5.5` (xhigh) | GPT-5.5 xhigh → `gemini-3.1-pro` (high) → `claude-opus-4-7` (max) → `opencode-go/glm-5.1` | | `deep` | Deep coding, complex logic | `openai/gpt-5.5` (medium) | GPT-5.5 → `claude-opus-4-7` (max) → `gemini-3.1-pro` (high) | | `quick` | Simple, fast tasks | `openai/gpt-5.4-mini` | GPT-5.4-mini → `claude-haiku-4-5` → `gemini-3-flash` → `opencode-go/minimax-m2.7` → `opencode/gpt-5-nano` | | `unspecified-high` | General complex work | `anthropic/claude-opus-4-7` (max) | Opus → `gpt-5.5` (high) → `zai-coding-plan/glm-5` → `kimi-for-coding/k2p5` → `opencode-go/glm-5.1` → `opencode/kimi-k2.5` → `moonshotai/kimi-k2.5` | | `unspecified-low` | General standard work | `anthropic/claude-sonnet-4-6` | Sonnet → `gpt-5.3-codex` (medium) → `opencode-go/kimi-k2.6` → `google/gemini-3-flash` → `opencode-go/minimax-m2.7` | -| `writing` | Text, docs, prose | `kimi-for-coding/k2p5` | Kimi → `gemini-3-flash` → `opencode-go/kimi-k2.6` → `claude-sonnet-4-6` → `opencode-go/minimax-m2.7` | +| `writing` | Text, docs, prose | `kimi-for-coding/k2p5` | `gemini-3-flash` → `opencode-go/kimi-k2.6` → `claude-sonnet-4-6` → `opencode-go/minimax-m2.7` | See the [Orchestration System Guide](./orchestration.md) for how agents dispatch tasks to categories. @@ -482,7 +487,7 @@ Resolution pipeline (from [`src/shared/model-resolution-pipeline.ts`](../../src/ 5. System default → Ultimate safety net ``` -Core-agent tab cycling is deterministic via injected runtime order field. The fixed priority order is Sisyphus (order: 1), Hephaestus (order: 2), Prometheus (order: 3), and Atlas (order: 4), then the remaining agents follow. +Core-agent tab cycling is deterministic via injected runtime order field. The fixed priority order is Sisyphus (order: 0), Hephaestus (order: 1), Prometheus (order: 2), and Atlas (order: 3), then the remaining agents follow. Your explicit configuration always wins. If you set a specific model for an agent, that choice takes precedence even when resolution data is cold.